点击查看html编辑器说明文档

炫酷的按钮,使用JS+CSS实现edit icon

|
|
Fork(复制)
|
|
作者:
穿越者X57

👉 新版编辑器已上线,点击进行体验吧!

BUG反馈
嵌入
设置
下载
HTML
格式化
支持Emmet,输入 p 后按 Tab键试试吧!
<head> ...
展开
</head>
<body>
            
            <div class="radial-ring-container">
    <div class="radial-ring-wrapper">
        <div class="radial-ring-color"></div>
        <div class="radial-ring-button">Sign Up</div>
    </div>
</div>
        
</body>
CSS
格式化
            
            :root {
    --defaultFont: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
    --garageWhite: rgba(235, 237, 236, 1);
}

*, *:before, *:after {
    -webkit-box-sizing: border-box;
    -moz-box-sizing: border-box;
    box-sizing: border-box;
}
        
[type=submit], [type=reset], button, html [type=button] {
    -webkit-appearance: button;
    text-transform: none;
}
        
html, body {
    margin: 0;
    width: 100%;
    height: 100%;
    font-family: var(--defaultFont);
    font-weight: 300;
}

body {
    position: relative;
    height: 100vh;
    width: 100vw;
    color: var(--garageWhite);
            
    display: grid;
    place-items: center;
            
    transition: all 200ms ease;
    overflow-x: hidden;
            
    background: hsla(228deg, 12.2%, 8.04%, 1);
}

.lightTheme {
    background: rgba(235, 236, 240, 1);
}

.radial-ring-container {
    --borderRadius: .856em;
    --borderRadiusBefore: .867em;
    --offset: 0%;
    --blurAmount: 12px;
    --saturateAmount: 120%;
    --contrastAmount: 1.05;
    --brightnessAmount: 1.1;
    --backgroundSize: 250% 100%;
    --backgroundPosition: 50% 50%;
    --backangle: 127deg;
    --doubleHeight: var(--bheight);
    --doubleWidth: var(--bwidth);
    
    --color01: #1598fc;
    --color02: #18ecfd;
    --color03: #26f0ba;
    --color04: #e6d05a;
    --color05: #fb9f56;
    --color06: #fa6984;
    --color07: #838ce1;
    --color08: #1598fc;
    --color09: #fadd81;
    --color10: #8cfa97;
    --color11: #06d4d1;
    --color12: #16b0b0; /* ending coloring for match to front for repeat */
    
    position: relative;
    content: "";
    width: 100%;
    max-width: 175px;
    height: 100%;
    max-height: 55px;
    transition: background 150ms ease;
    border-radius: var(--borderRadius);
    transition: all 200ms linear;
}

.lightTheme .radial-ring-container {
    border-top: 1px solid rgba(255, 255, 255, .6);
    border-left: 1px solid rgba(255, 255, 255, .6);
    border-right: 1px solid rgba(255, 255, 255, .6);
    border-bottom: 2px solid rgba(255, 255, 255, .6);
}

.radial-ring-container:hover {
    cursor: pointer;
    transform: scale(1.03);
}

.radial-ring-container:active {
    transform: scale(.98);
}

.radial-ring-container:before {
    content: "";
    width: 95%;
    height: 70%;
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    border-radius: 50%;
    
    background:
    repeating-radial-gradient(
        circle at left top,
        var(--color01) calc(var(--offset) + 12.500% * 01),
        var(--color02) calc(var(--offset) + 12.500% * 02),
        var(--color03) calc(var(--offset) + 12.500% * 03),
        var(--color04) calc(var(--offset) + 12.500% * 04),
        var(--color05) calc(var(--offset) + 12.500% * 05),
        var(--color06) calc(var(--offset) + 12.500% * 06),
        var(--color07) calc(var(--offset) + 12.500% * 07),
        var(--color08) calc(var(--offset) + 12.500% * 08)
        /*
        var(--color09) calc(var(--offset) + 12.500% * 09),
        var(--color10) calc(var(--offset) + 12.500% * 10),
        var(--color11) calc(var(--offset) + 12.500% * 11),
        var(--color12) calc(var(--offset) + 12.500% * 12)
        */
    );
    
    background-size: var(--backgroundSize);
    background-position: var(--backgroundPosition);
    
    -webkit-filter: brightness(var(--brightnessAmount)) contrast(var(--contrastAmount)) saturate(var(--saturateAmount)) blur(30px));
    filter: brightness(var(--brightnessAmount)) contrast(var(--contrastAmount)) saturate(var(--saturateAmount)) blur(30px);
    z-index: -1;
    mix-blend-mode: hard-light;
}

.lightTheme .radial-ring-container::before {
    mix-blend-mode: multiply;
}

.radial-ring-container:after {
    content: "";
    position: absolute;
    width: 100%;
    height: 100%;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    border-radius: var(--borderRadiusBefore);
}

.radial-ring-wrapper {
    position: absolute;
    content: "";
    width: 100%;
    max-width: 175px;
    height: 100%;
    max-height: 55px;
    transition: background 150ms ease;
    border-radius: var(--borderRadius);
    overflow: hidden;
    
    border-top: 1px solid rgba(0, 0, 0, .6);
    border-left: 1px solid rgba(0, 0, 0, .6);
    border-right: 1px solid rgba(0, 0, 0, .6);
    border-bottom: 2px solid rgba(0, 0, 0, .6);
    
    box-shadow:
      0 1px 1px hsl(0deg 0% 0% / 0.075),
      0 2px 2px hsl(0deg 0% 0% / 0.075),
      0 4px 4px hsl(0deg 0% 0% / 0.075),
      0 6px 6px hsl(0deg 0% 0% / 0.075);
}

.radial-ring-color {
    content: "";
    width: 150%; /* width set to + blur to make borders no blur */
    height: 150%; /* height set to + blur to make borders no blur */
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    
    background:
    repeating-radial-gradient(
        circle at left top,
        var(--color01) calc(var(--offset) + 12.500% * 01),
        var(--color02) calc(var(--offset) + 12.500% * 02),
        var(--color03) calc(var(--offset) + 12.500% * 03),
        var(--color04) calc(var(--offset) + 12.500% * 04),
        var(--color05) calc(var(--offset) + 12.500% * 05),
        var(--color06) calc(var(--offset) + 12.500% * 06),
        var(--color07) calc(var(--offset) + 12.500% * 07),
        var(--color08) calc(var(--offset) + 12.500% * 08)
        /*
        var(--color09) calc(var(--offset) + 12.500% * 09),
        var(--color10) calc(var(--offset) + 12.500% * 10),
        var(--color11) calc(var(--offset) + 12.500% * 11),
        var(--color12) calc(var(--offset) + 12.500% * 12)
        */
    );
    
    background-size: var(--backgroundSize);
    background-position: var(--backgroundPosition);
    
    -webkit-filter: brightness(var(--brightnessAmount)) contrast(var(--contrastAmount)) saturate(var(--saturateAmount)) blur(var(--blurAmount));
    filter: brightness(var(--brightnessAmount)) contrast(var(--contrastAmount)) saturate(var(--saturateAmount)) blur(var(--blurAmount));
}

.radial-ring-color:before,
.radial-ring-color:after {
    content: "";
    position: absolute;
    width: 100%;
    height: 100%;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
}

.radial-ring-color:before {
    height: var(--doubleHeight);
    background:
    repeating-linear-gradient(
        var(--backangle),
        transparent,
        transparent,
        rgba(0, 0, 0, .6),
        transparent,
        transparent,
        transparent,
        rgba(0, 0, 0, .2),
        transparent var(--doubleHeight)
    ),
    repeating-linear-gradient(
        var(--backangle),
        transparent,
        transparent,
        rgba(255, 255, 255, .55),
        transparent,
        transparent,
        rgba(255, 255, 255, .35),
        transparent,
        transparent var(--doubleHeight)
    );
    
    background-blend-mode: color-burn, overlay;
    mix-blend-mode: color-dodge;
    
    background-repeat: repeat;
    background-size:: calc( var(--doubleHeight) / sin(var(--backangle)) ) 100%;
    animation: moveAccentLights 10s linear infinite;
}

@keyframes moveAccentLights {
    100% {
        background-position: calc( var(--doubleHeight) / sin(var(--backangle)) ) 0%;
    }
}

.radial-ring-button {
    content: "";
    position: absolute;
    width: 100%;
    height: 100%;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    color: hsla(0deg, 0%, 0.78%, .75);
    
    display: flex;
    -webkit-box-pack: center;
    justify-content: center;
    -webkit-box-align: center;
    align-items: center;
    backface-visibility: hidden;
    text-shadow: 0px 1px 1px rgba(0, 0, 0, .15);
    text-rendering: geometricprecision;
    font-size: 1.1625em;
    font-weight: 600;
    text-transform: uppercase;
}

.radial-ring-button:after {
    content: "";
    position: absolute;
    width: 94%;
    height: 45%;
    top: 6%;
    left: 50%;
    transform: translate(-50%, -3%);
    border-radius: .65em .65em 0em 0em;
    
    background: 
    linear-gradient(
        rgba(255, 255, 255, 0.65), 
        rgba(255, 255, 255, 0)
    );
    z-index: 1;
    mix-blend-mode: screen;
}

.radial-ring-button:before {
    content: "";
    position: absolute;
    width: 98%;
    height: 45%;
    bottom: 3%;
    left: 50%;
    transform: translate(-50%, 0%);
    border-radius: 0em 0em .65em .65em;
    
    background: 
    linear-gradient( 
        rgba(0, 0, 0, 0),
        rgba(0, 0, 0, 0.3)
    );
    z-index: 1;
    mix-blend-mode: color-burn;
}
        
JS
格式化
            
            var colorContainers = document.querySelector('.radial-ring-container');
    
    // colorContainers.forEach(colorContainer => {
        // colorContainer.addEventListener('DOMContentLoaded', function(e) {
            // 彩虹色
            var color01 = '#1598fc';
            var color02 = '#18ecfd';
            var color03 = '#26f0ba';
            var color04 = '#e6d05a';
            var color05 = '#fb9f56';
            var color06 = '#fa6984';
            var color07 = '#838ce1';
            var color08 = '#1598fc';
            // var color09 = '#fadd81';
            // var color10 = '#8cfa97';
            // var color11 = '#06d4d1';
            // var color12 = '#16b0b0';
            
            var tempColor;
 
            var offset = 0;
            
            colorContainers.style.setProperty("--color01", color01);
            colorContainers.style.setProperty("--color02", color02);
            colorContainers.style.setProperty("--color03", color03);
            colorContainers.style.setProperty("--color04", color04);
            colorContainers.style.setProperty("--color05", color05);
            colorContainers.style.setProperty("--color06", color06);
            colorContainers.style.setProperty("--color07", color07);
            colorContainers.style.setProperty("--color08", color08);
            // colorContainers.style.setProperty("--color09", color09);
            // colorContainers.style.setProperty("--color10", color10);
            // colorContainers.style.setProperty("--color11", color11);
            // colorContainers.style.setProperty("--color12", color12);
            
            function swapColors() {
                // color12 = color11;
                // color11 = color10;
                // color10 = color09;
                // color09 = color08;
                color08 = color07;
                color07 = color06;
                color06 = color05;
                color05 = color04;
                color04 = color03;
                color03 = color02;
                color02 = color01;
                color01 = color12;
                
                colorContainers.style.setProperty("--color01", color01);
                colorContainers.style.setProperty("--color02", color02);
                colorContainers.style.setProperty("--color03", color03);
                colorContainers.style.setProperty("--color04", color04);
                colorContainers.style.setProperty("--color05", color05);
                colorContainers.style.setProperty("--color06", color06);
                colorContainers.style.setProperty("--color07", color07);
                colorContainers.style.setProperty("--color08", color08);
                // colorContainers.style.setProperty("--color09", color09);
                // colorContainers.style.setProperty("--color10", color10);
                // colorContainers.style.setProperty("--color11", color11);
                // colorContainers.style.setProperty("--color12", color12);
            }
            
            function setOffset(value) {
                colorContainers.style.setProperty("--offset", value + "%");
            }
            
            function animate() {
                var handle = window.setInterval(function() {
                    offset++;
                
                    if (offset > 3500) {
                        offset = 0;
                        window.clearInterval(handle);
                        // swapColors();
                    } else {
                        window.clearInterval(handle);
                    }
         
                    setOffset(offset);
         
                    requestAnimationFrame(animate);
                }, 40);
            }
            animate();
        // });
    // });
    colorContainers.style.setProperty('--bwidth', (colorContainers.offsetWidth * 2.3).toFixed(2) + 'px');
    colorContainers.style.setProperty('--bheight', (colorContainers.offsetHeight * 2.3).toFixed(2) + 'px');
        
预览
控制台