文章最后更新时间:2024年08月29日
好看的下载按钮源码
这是一款非常好看的CSS动画效果下载按钮,通过代码实现了一个具有动画效果的下载按钮,当点击复选框时,按钮会发生一系列的动画变化,包括圆形的缩放、颜色变化、图标隐藏和文字显示的切换等。link rel="stylesheet" href="./保存的CSS文件.css" 此处修改成保存的CSS文件,<p>Open</p> 添加下载超链接。
演示:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>好看的CSS动画效果下载按钮</title> <link rel="stylesheet" href="./保存的CSS文件.css"> </head> <body> <div> <label> <input type="checkbox" /> <span><svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"> <path d="M12 19V5m0 14-4-4m4 4 4-4" stroke-width="1.5" stroke-linejoin="round" stroke-linecap="round" stroke="currentColor"></path> </svg> <div></div> </span> <p>Download</p> <p>Open</p> </label> </div> </body> </html>
body { height: 100vh; display: flex; justify-content: center; align-items: center; background-color: #212121; } .container { padding: 0; margin: 0; box-sizing: border-box; font-family: Arial, Helvetica, sans-serif; display: flex; justify-content: center; align-items: center; } .label { background-color: transparent; border: 2px solid rgb(91, 91, 240); display: flex; align-items: center; border-radius: 50px; width: 150px; cursor: pointer; transition: all 0.4s ease; padding: 5px; position: relative; } .label::before { content: ""; position: absolute; top: 0; bottom: 0; left: 0; right: 0; background-color: #fff; width: 8px; height: 8px; transition: all 0.4s ease; border-radius: 100%; margin: auto; opacity: 0; visibility: hidden; } .label .input { display: none; } .label .title { font-size: 20px; color: #fff; transition: all 0.4s ease; position: absolute; right: 10px; text-align: center; font-weight: bold; } .label .title:last-child { opacity: 0; visibility: hidden; } .label .circle { height: 45px; width: 45px; border-radius: 50%; background-color: rgb(91, 91, 240); display: flex; justify-content: center; align-items: center; transition: all 0.4s ease; position: relative; box-shadow: 0 0 0 0 rgb(255, 255, 255); overflow: hidden; } .label .circle .icon { color: #fff; width: 30px; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); transition: all 0.4s ease; } .label .circle .square { aspect-ratio: 1; width: 15px; border-radius: 2px; background-color: #fff; opacity: 0; visibility: hidden; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); transition: all 0.4s ease; } .label .circle::before { content: ""; position: absolute; left: 0; top: 0; background-color: #3333a8; width: 100%; height: 0; transition: all 0.4s ease; } .label:has(.input:checked) { width: 45px; animation: installed 0.4s ease 3.5s forwards; } .label:has(.input:checked)::before { animation: rotate 3s ease-in-out 0.4s forwards; } .label .input:checked+.circle { animation: pulse 1s forwards, circleDelete 0.2s ease 3.5s forwards; rotate: 180deg; } .label .input:checked+.circle::before { animation: installing 3s ease-in-out forwards; } .label .input:checked+.circle .icon { opacity: 0; visibility: hidden; } .label .input:checked~.circle .square { opacity: 1; visibility: visible; } .label .input:checked~.title { opacity: 0; visibility: hidden; } .label .input:checked~.title:last-child { animation: showInstalledMessage 0.4s ease 3.5s forwards; } @keyframes pulse { 0% { scale: 0.95; box-shadow: 0 0 0 0 rgba(255, 255, 255, 0.7); } 70% { scale: 1; box-shadow: 0 0 0 16px rgba(255, 255, 255, 0); } 100% { scale: 0.95; box-shadow: 0 0 0 0 rgba(255, 255, 255, 0); } } @keyframes installing { from { height: 0; } to { height: 100%; } } @keyframes rotate { 0% { transform: rotate(-90deg) translate(27px) rotate(0); opacity: 1; visibility: visible; } 99% { transform: rotate(270deg) translate(27px) rotate(270deg); opacity: 1; visibility: visible; } 100% { opacity: 0; visibility: hidden; } } @keyframes installed { 100% { width: 150px; border-color: rgb(35, 174, 35); } } @keyframes circleDelete { 100% { opacity: 0; visibility: hidden; } } @keyframes showInstalledMessage { 100% { opacity: 1; visibility: visible; right: 56px; } }
还没有评论,来说两句吧...