2025年前端er应该知道的css小技巧


hello大家好,我是Range。
这些年,JavaScript(或者说ECMAScript)一直在持续演进,大家都很乐意去学习并运用一些新的特性、API(面试中也挺常见的)。相比JavaScript,CSS就显得有点寂寞了,其实,CSS技术也是一直在升级,比如一些行列布局,从 float 到 Flex 再到 Grid 布局(Grid布局一直没怎么记住,还好现在都是让cursor帮我写了),浏览器基础能力的提升,真的是大大提高了页面仔的工作效率。
今天带来一篇关于CSS中一些小技巧的文章,这些技巧在有的时候,会显得非常重要(特别是第一个 grayscale,相信经历过大风大浪的同志们应该能体会到 )。我理解大家不用刻意去记忆,现在有了AI辅助编码,我们只需要知道大概方向并且能够描述清楚,剩下的就交给AI去搞定吧。
下面是正文部分。


CSS 主要用于设置网页的视觉样式,包括布局、颜色、字体和其他设计细节。它使得网页设计与内容分离,从而提高了网页的可维护性和可重用性。

🌞 今天我将分享一些有用的 CSS 小技巧,后续不断完善,灵感不息,创作不止。

filter家族

filter 属性将模糊或颜色偏移等图形效果应用于元素。滤镜通常用于调整图像、背景和边框的渲染

图片置灰


filtergrayscale(100%);
image.png

滤镜阴影


 filterdrop-shadow(5px 5px 5px rgba(0,0,0,0.5));

大多数人都知道box-shadow是设置盒子阴影,但你知道 filter: drop-shadowbox-shadow的区别吗? 举个例子:

image.png

不难看出区别显而易见,但值的注意的是 filter: drop-shadow只针对一张「无背景的图片。」

图片模糊化


//数值越高越模糊
filterblur(3px);
image.png

图片亮度调整


filterbrightness(1);

brightness()  CSS函数将线性乘数应用于输入图像,使其看起来更亮或更暗。

image.png

加上属相后的效果:

image.png

文本省略

单行文本

image.png


<style>
    .box {
        width150px;
        height80px;
        border1px black solid;
        border-radius5px;
        overflow: hidden;
        /*超出部分隐藏*/
        text-overflow: ellipsis;
        /*超出部分显示省略号*/
        white-space: nowrap;
        /*规定段落中的文本不进行换行 */
    }
</style>

<body>
    <div class="box">
        人总是在遭遇一次重创之后,才会幡然醒悟,重新认识自己的坚强和隐忍。所以,无论你正在遭遇什么磨难,都不要一味抱怨上苍不公平,甚至从此一蹶不振。人生没有过不去的坎,只有过不去的人。
    </div>
</body>

多行文本

image.png


<style>
    .box {
        width150px;
        height80px;
        border1px black solid;
        border-radius5px;
        overflow: hidden;
        display: -webkit-box;   /*将对象作为弹性伸缩盒子模型显示*/  
       -webkit-box-orient: vertical;   /*设置伸缩盒对象的子元素的排列方式*/ 
       -webkit-line-clamp: 5;   /*用来限制在一个块元素中显示的文本的行数*/
        word-break: break-all;   /*让浏览器实现在任意位置的换行 *break-all为允许在单词内换行*/
    }
</style>

<body>
    <div class="box">
        人总是在遭遇一次重创之后,才会幡然醒悟,重新认识自己的坚强和隐忍。所以,无论你正在遭遇什么磨难,都不要一味抱怨上苍不公平,甚至从此一蹶不振。人生没有过不去的坎,只有过不去的人。
    </div>
</body>

渐变

linear-gradient

linear-gradient() 创建一个由两种或多种颜色沿一条直线进行线性过渡的图像。


linear-gradient(to right#ff9a62var(--main--bg));
image.png

radial-gradient()

radial-gradient() 创建一个图像,该图像由从原点辐射的两种或多种颜色之间的渐进过渡组成,其形状可以是圆形或椭圆形。


   backgroundradial-gradient(rgb(243 152 7323%#000000 75%);
image.png

mask

mask 允许使用者通过遮罩或者裁切特定区域的图片的方式来隐藏一个元素的部分或者全部可见区域。

Case 1

先看图

image.png

如果你想做一个图片的轮播切换效果,就会出现上图所示,比较生硬。但是加上下面的mask效果,边缘有一层遮罩效果,体验就会好许多


   masklinear-gradient(
          90deg,
          transparent,
          black 10%,
          black 90%,
          transparent
     );
image.png

mask设置transparent的部分,图片会变得透明

Case 2

两张图片的一个好看的展示效果!

image.png


<style>
    .box {
        position: relative;
    }

    img {
        width600px;
        position: absolute;

    }

    img:nth-child(1) {
        masklinear-gradient(124deg#000 55%, transparent 45%)
    }

    img:nth-child(2) {
        masklinear-gradient(301deg#000 48%, transparent 53%)
    }
</style>

<body>
    <div class="box">
        <img src="./img/pic1.png" alt="">
        <img src="./img/pic2.png" alt="">

    </div>
</body>

两张图片重叠使用mask可达到分割渐变的效果。

其他

background-blend-mode


     //以下三个css属性结合,可以达到背景与背景颜色重合的效果
     backgroundurl(../../assets/img/user_bg.png) no-repeat 50% 100%;
     background-blend-mode: overlay;
     background-colorrgba(255255255,0.1);

overlay 模式将背景图像和背景颜色以混合模式的方式结合起来,增强对比度,同时保持图像的明亮度。这种模式通常用于增强图像的视觉效果或与背景颜色进行对比。

让文字发光


 text-shadow0px 0px 5px rgba(255255255)
image.png

毛玻璃


 backdrop-filterblur(2px);

backdrop-filter 属性可以让你为一个元素后面区域添加图形效果(如模糊或颜色偏移)。因为它适用于元素背后的所有元素,为了看到效果,必须使元素或其背景至少部分透明。


<style>
   .box {
    width100vw;
    height100vh;
    background-color: gray;
    display: flex;
    align-items: center;
    justify-content: center;
    backgroundurl('./img.png') no-repeat;
    background-size: cover;
  } 
  .text {
      width200px;
      height100px;
      backdrop-filterblur(2px);
      border-radius20px;
      background-colorrgba(0000.1);
      box-shadow0px 0px 5px rgba(0000.9);
      display: flex;
      color: black;
      align-items: center;
      justify-content: center;
    }
</style>

<body>
    <div class="box">
        <div class="text">
            css毛玻璃
        </div>
    </div>
</body>
image.png

css小案例

图片循环轮播

如下sass代码


<template>
 <div class="swiperContent">
        <div class="picImg">
            <img src="./img/pic1.jpg" alt="">
            <img src="./img/pic2.png" alt="">
            <img src="./img/pic3.png" alt="">
            <img src="./img/pic4.jpg" alt="">
            <img src="./img/pic5.jpg" alt="">
            <img src="./img/pic6.png" alt="">
            <img src="./img/pic7.jpg" alt="">
            <img src="./img/pic8.jpg" alt="">
            <img src="./img/pic1.jpg" alt="">
            <img src="./img/pic2.png" alt="">
            <img src="./img/pic3.png" alt="">
            <img src="./img/pic4.jpg" alt="">
            <img src="./img/pic5.jpg" alt="">
            <img src="./img/pic6.png" alt="">
            <img src="./img/pic7.jpg" alt="">
            <img src="./img/pic8.jpg" alt="">

        </div>
    </div>
</template>
<style scoped lang="scss">
 @keyframes swiper {
        to {
            transformtranslateX(-50%);
        }
    }

    .swiperContent {
        width80%;
        height100vh;
        display: flex;
        overflow: hidden;
        margin: auto;
        masklinear-gradient(90deg,
                transparent,
                black 10%,
                black 90%,
                transparent);

        .picImg {
            margin: auto;
            /* 撑满就不会出现动画效果的卡顿了 */
            width: max-content;
            display: flex;
            align-items: center;
            animation: swiper 10s linear infinite;

            img {
                width260px;
                height150px;
                border-radius10px;
                margin-right40px;
            }

            &:hover {
                animation-play-state: paused;
            }
        }
    }
</style>

扫光

容器扫光

动画.gif

如下sass代码


<template>
  <div class="tips">热门商品</div>
</template>
<style scoped lang="scss">
    @keyframes tip {
        from {
            transformskewX(45degtranslateX(80px);
        }

        to {
            transformskewX(45degtranslateX(-10px);
        }
    }

    .tips {
        width45px;
        margin-left10px;
        background-color: red;
        font-size10px;
        padding5px 10px;
        font-weight: bold;
        border-radius2px;
        color#fff;
        position: relative;
        overflow: hidden;
        margin100px 100px;

        &::before {
            content"";
            position: absolute;
            top0px;
            left0px;
            width15px;
            height100%;
            background-colorrgb(2552552550.5);
            animation: tip 1s linear infinite;
        }
    }
</style>

文字扫光

动画.gif


<template>
     <div class="box">
        <span class="tip">文字扫光效果</span>
     </div>
</template>

<style scoped lang="scss">
        @keyframes shine {
            from {
                background-position0% 0%;
            }

            to {
                background-position150% 100%;
            }
        }

        .box {
            width200px;
            height100px;
            border-radius5px;
            font-weight: bold;
            background-color: black;
            display: flex;
            align-items: center;
            justify-content: center;

            .tip {
                font-size30px;
                background#585757 linear-gradient(to left, transparent, #fff, transparent) no-repeat 0 0;
                background-size40% 100%;
                background-clip: text;
                -webkit-background-clip: text;
                color: transparent;
                animation: shine 1s infinite;
            }
        }
    </style>

元素倒影

image.png


<template>
  <div class="box">
    <img
      src="https://ts1.cn.mm.bing.net/th/id/R-C.6d8a57256ba630185743ba8557f4ed14?rik=VldXaSQLI8%2bObA&riu=http%3a%2f%2fimage.yjcf360.com%2fu%2fcms%2fwww%2f201904%2f120850581kxr.jpg&ehk=WNEMqv9m%2f6G74rn9TCLdjOYquj4EU%2bdDYDxY6yE9Q8E%3d&risl=&pid=ImgRaw&r=0"
      class="pic"
    />
  </div>
</template>

<script setup lang="ts">
</script>

<style scoped lang="scss">
.box {
  width: 100%;
  height: 100vh;
  background: black;
  display: flex;
  justify-content: center;
  .pic {
    width: 300px;
    height: 450px;
    margin-top: 50px;
    border-radius: 4px;
    box-shadow: 0px 0px 10px #ffffffcc;
    //   元素倒影
    -webkit-box-reflect: below 10px
      linear-gradient(transparent, transparent, rgb(0, 0, 0, 0.8));
  }
}
</style>

写在最后

🙉 以上就是一些开发中可能会用到的css小技巧,如果有机会我还会和大家分享更多有趣且实用小技巧!!!

最后分享几个使用的第三方库和一些网站,仅供参考

  1. vue-3-slider-component高度定制的滑块组件
  2. CSS clip-path 生成器
  3. css可视化
  4. Animate.css(css动画库)
  5. javascript动效库
  6. css生成优惠卷

最后

还没有使用过我们刷题网站(https://fe.ecool.fun/)或者刷题小程序的同学,如果近期准备或者正在找工作,千万不要错过,题库主打题全和更新快哦~。


有会员购买、辅导咨询的小伙伴,可以通过下面的二维码,联系我们的小助手。

Image


原文链接:https://juejin.cn/post/7397318860409831461