• 如何用纯 CSS 创作背景色块变换的按钮特效


    效果预览

    在线演示

    按下右侧的“点击预览”按钮可以在当前页面预览,点击链接可以全屏预览。

    https://codepen.io/comehope/pen/XYKdwg

    可交互视频教程

    此视频是可以交互的,你可以随时暂停视频,编辑视频中的代码。

    请用 chrome, safari, edge 打开观看。

    https://scrimba.com/p/pEgDAM/cM7RLUG

    源代码下载

    本地下载

    每日前端实战系列的全部源代码请从 github 下载:

    https://github.com/comehope/front-end-daily-challenges

    代码解读

    定义 dom,标准导航结构下,<li> 中的每个字母用 <span> 包裹:

    &lt;nav&gt;
        &lt;ul&gt;
            &lt;li&gt;
                &lt;span&gt;p&lt;/span&gt;
                &lt;span&gt;r&lt;/span&gt;
                &lt;span&gt;o&lt;/span&gt;
                &lt;span&gt;d&lt;/span&gt;
                &lt;span&gt;u&lt;/span&gt;
                &lt;span&gt;c&lt;/span&gt;
                &lt;span&gt;t&lt;/span&gt;
                &lt;span&gt;s&lt;/span&gt;
            &lt;/li&gt;
        &lt;/ul&gt;
    &lt;/nav&gt;
    

    居中显示:

    body {
        margin: 0;
        height: 100vh;
        display: flex;
        align-items: center;
        justify-content: center;
        background: linear-gradient(to right bottom, dimgray, black);
    }
    

    定义文字样式:

    ul {
        padding: 0;
    }
    
    li {
        list-style-type: none;
    }
    
    li span {
        color: white;
        font-size: 50px;
        font-family: monospace;
        text-transform: uppercase;
        letter-spacing: 0.1em;
    }
    

    当鼠标悬停时,用伪元素绘制倾斜的背景色块:

    li span {
        position: relative;
        transition: 500ms;
    }
    
    li:hover span {
        color: #333;
    }
    
    li span::before {
        content: '';
        position: absolute;
        height: 100%;
         0;
        z-index: -1;
        transition: 500ms;
    }
    
    li:hover span::before {
         70%;
        transform: rotate(-25deg);
        background: white;
    }
    

    设置缓动延时,增加动画效果:

    li:hover span {
        transition-delay: calc(80ms * var(--n) + 10ms);
    }
    
    li:hover span::before {
        transition-delay: calc(80ms * var(--n));
    }
    
    li span:nth-child(1) {
        --n: 1;
    }
    
    li span:nth-child(2) {
        --n: 2;
    }
    
    li span:nth-child(3) {
        --n: 3;
    }
    
    li span:nth-child(4) {
        --n: 4;
    }
    
    li span:nth-child(5) {
        --n: 5;
    }
    
    li span:nth-child(6) {
        --n: 6;
    }
    
    li span:nth-child(7) {
        --n: 7;
    }
    
    li span:nth-child(8) {
        --n: 8;
    }
    

    在单词左侧增加一条鼠标悬停时变亮的竖线:

    li {
        padding-left: 2em;
        border: 2px solid transparent;
        border-left-color: silver;
        transition: 500ms;
    }
    
    li:hover {
        border-left-color: white;
    }
    

    dom 中增加几个按钮,形成一组按钮:

    &lt;nav&gt;
        &lt;ul&gt;
            &lt;li&gt;
                &lt;span&gt;h&lt;/span&gt;
                &lt;span&gt;o&lt;/span&gt;
                &lt;span&gt;m&lt;/span&gt;
                &lt;span&gt;e&lt;/span&gt;
            &lt;/li&gt;
            &lt;li&gt;
                &lt;span&gt;p&lt;/span&gt;
                &lt;span&gt;r&lt;/span&gt;
                &lt;span&gt;o&lt;/span&gt;
                &lt;span&gt;d&lt;/span&gt;
                &lt;span&gt;u&lt;/span&gt;
                &lt;span&gt;c&lt;/span&gt;
                &lt;span&gt;t&lt;/span&gt;
                &lt;span&gt;s&lt;/span&gt;
            &lt;/li&gt;
            &lt;li&gt;
                &lt;span&gt;s&lt;/span&gt;
                &lt;span&gt;e&lt;/span&gt;
                &lt;span&gt;v&lt;/span&gt;
                &lt;span&gt;i&lt;/span&gt;
                &lt;span&gt;c&lt;/span&gt;
                &lt;span&gt;e&lt;/span&gt;
                &lt;span&gt;s&lt;/span&gt;
            &lt;/li&gt;
            &lt;li&gt;
                &lt;span&gt;c&lt;/span&gt;
                &lt;span&gt;o&lt;/span&gt;
                &lt;span&gt;n&lt;/span&gt;
                &lt;span&gt;t&lt;/span&gt;
                &lt;span&gt;a&lt;/span&gt;
                &lt;span&gt;c&lt;/span&gt;
                &lt;span&gt;t&lt;/span&gt;
            &lt;/li&gt;
        &lt;/ul&gt;
    &lt;/nav&gt;
    

    最后,文字居中对齐,再调整一下按钮间距:

    li {
        text-align: center;
        margin: 1em 0;
    }
    

    大功告成!

    原文地址:https://segmentfault.com/a/1190000015192218
  • 相关阅读:
    QSetting
    类中函数前、后、参数加const
    delete指针
    自定义数组类
    手动调用构造函数
    windows和linux平台下的通用时间测试函数
    多线程编程学习
    Android 利用ImageView显示图片
    特征描述算子-sift
    opencv边界扩展
  • 原文地址:https://www.cnblogs.com/lalalagq/p/10007296.html
Copyright © 2020-2023  润新知