聊聊如何使用CSS实现比普通阴影更加立体的阴影效果!

如何使用css实现更加立体的阴影效果?下面本篇文章给大家聊聊css 阴影进阶,介绍一下巧用使用css实现立体阴影效果的方法,希望对大家有所帮助!

聊聊如何使用CSS实现比普通阴影更加立体的阴影效果!

CSS 阴影的存在,让物体看上去更加有型立体。【推荐学习:css视频教程】

然而,在最简单的阴影使用之上,我们可以实现更多有意思且更加立体的阴影效果。

CSS 阴影基础

CSS 中,明面上可以实现阴影的有三个属性:

立即学习“前端免费学习笔记(深入)”;

box-shadow – 盒阴影text-shadow – 文字阴影filter: drop-shaodw() – 滤镜内的阴影

关于它们的基础语法和使用就不过多描述,这一部分大家可以先在 MDN 补齐,贴几张图快速复习一下:

box-shadow – 盒阴影:

聊聊如何使用CSS实现比普通阴影更加立体的阴影效果!

text-shadow – 文字阴影:

聊聊如何使用CSS实现比普通阴影更加立体的阴影效果!

filter: drop-shaodw() – 滤镜内的阴影:

聊聊如何使用CSS实现比普通阴影更加立体的阴影效果!

基本上 3 种阴影大同小异,需要注意的就是:

box-shadow 还区分内阴影,内阴影使用关键字 inset 进行描述;box-shadow 多一个阴影扩散半径参数。

长投影

上面提到了通过多层阴影叠加实现文字的立体阴影。运用在 div 这些容器上也是可以的。当然这里还有一种挺有意思的方法。假设我们,有一个矩形元素,希望给他添加一个长投影,像下面这样:

image

要生成这种长投影,刚刚说的叠加多层阴影可以,再就是借助元素的两个伪元素,其实上面的图是这样的:

image

关键点在于,我们通过对两个伪元素的 transform: skew() 变换以及从实色到透明色的背景色变化,实现了长投影的效果:

CodePen Demo — 线性渐变模拟长阴影https://codepen.io/Chokcoco/pen/qJvVGy

立体投影

好,我们继续。下一个主题是立体投影

这个说法很奇怪,阴影的出现,本就是为了让原本的元素看起来更加的立体,那这里所谓的立体投影,是个怎么立体法?

这里所谓的立体投影,并不一定是使用了 box-shadowtext-shadow 或者 drop-shadow,而是我们使用其他元素或者属性模拟元素的阴影。而这样做的目的,是为了能够突破 box-shadow 这类元素的一些定位局限。让阴影的位置、大小、模糊度可以更加的灵活

OK,让我们来看看,这样一个元素,我们希望通过自定义阴影的位置,让它更加立体:

image

上图 div 只是带了一个非常浅的 box-shadow ,看上去和立体没什么关系,接下来,我们通过 div 的伪元素,给它生成一个和原图边角形状类似的图形,再通过 transform 位移一下,可能是这样:

image

OK,最后对这个用伪元素生成的元素进行一些虚化效果(filter或者box-shadow都可以),就可以实现一个边角看起来像被撕开的立体效果:

image

代码非常简单,伪 CSS 代码示意如下:

div {    position: relative;    width: 600px;    height: 100px;    background: hsl(48, 100%, 50%);    border-radius: 20px;}div::before {    content: "";    position: absolute;    top: 50%;    left: 5%;    right: 5%;    bottom: 0;    border-radius: 10px;    background: hsl(48, 100%, 20%);    transform: translate(0, -15%) rotate(-4deg);    transform-origin: center center;    box-shadow: 0 0 20px 15px hsl(48, 100%, 20%);}

所以总结一下:

立体投影的关键点在于利于伪元素生成一个大小与父元素相近的元素,然后对其进行 rotate 以及定位到合适位置,再赋于阴影操作颜色的运用也很重要,阴影的颜色通常比本身颜色要更深,这里使用 hsl 表示颜色更容易操作,l 控制颜色的明暗度

还有其他很多场景,都可以用类似的技巧实现:

image

详细完整的代码,你可以戳这里:CodePen Demo — 立体投影

https://codepen.io/Chokcoco/pen/LgdRKE?editors=1100

浮雕阴影

还有一类立体效果的阴影就是浮雕阴影,它的本质还是 box-shadowtext-shadow,只是需要控制好颜色的配合以及内外阴影的一起使用。核心就是 2 点:

背景色与内容(文本或者盒子颜色)一致

使用两个相反的方向,使用两组对比明显的颜色值,来实现凹凸效果

首先,我们来看一个文字版的浮雕效果。

先实现一个凸起的效果,我们需要实现一个背景色和文字色一样的文字:

浮雕阴影
body {    background: #999;}div {    color: #999;}

效果如下,由于背景色和文字色的颜色一样,所以我们什么都看不到。

聊聊如何使用CSS实现比普通阴影更加立体的阴影效果!

不过没事,我们给文字添加一个 1px x、y 方向的黑色阴影:

div {    color: #999;    text-shadow: 1px 1px 1px #000;}

效果如下:

聊聊如何使用CSS实现比普通阴影更加立体的阴影效果!

有点感觉了,再反向,也就是 -1px x、y 方向添加一个黑色相对,也就白色的阴影:

div {    color: #999;    text-shadow:         1px 1px 1px #000,         -1px -1px 1px #fff;}

效果如下,这样我们就得到了一个凸起质感的浮雕阴影:

聊聊如何使用CSS实现比普通阴影更加立体的阴影效果!

如果我们把颜色对调一下呢?

div {    color: #999;    text-shadow:         1px 1px 1px #fff,         -1px -1px 1px #000;}

就能很轻松的得到凹下质感的浮雕阴影:

聊聊如何使用CSS实现比普通阴影更加立体的阴影效果!

上述 DEMO 的完整代码:CodePen Demo – Embossed Shadow

https://codepen.io/Chokcoco/pen/yLPmMXM

新拟态风格阴影

我们将运用在文字上的技巧,扩展延伸到容器上,就能得到最近比较火的拟态风格阴影,其原理也是大同小异。

两个阴影,使用两个相反的方向,使用两组对比明显的颜色值,来实现凹凸效果。与文字不同的是,这里的凹效果,我们需要使用盒子的内阴影实现

浮雕阴影
浮雕阴影
div {    width: 120px;    height: 120px;    background: #e9ecef;    color: #333;    box-shadow:        7px 7px 12px rgba(0, 0, 0, .4),        -7px -7px 12px rgba(255, 255, 255, .9);}div:nth-child(2) {    box-shadow:        inset -7px -7px 12px rgba(255, 255, 255, .9),        inset 7px 7px 12px rgba(0, 0, 0, .4);}

这样,就可以得到拟态风格的按钮,如下图所示,左凸右凹:

聊聊如何使用CSS实现比普通阴影更加立体的阴影效果!

再通过一个简单的过渡,就可以实现整个点击的交互:

div {    transition: .2s all;    box-shadow:        7px 7px 12px rgba(0, 0, 0, .4),        -7px -7px 12px rgba(255, 255, 255, .9),        inset 0 0 0x rgba(255, 255, 255, .9),        inset 0 0 0 rgba(0, 0, 0, .4);        &:active {        box-shadow:            0 0 0 rgba(0, 0, 0, .4),            0 0 0 rgba(255, 255, 255, .9),            inset -7px -7px 12px rgba(255, 255, 255, .9),            inset 7px 7px 12px rgba(0, 0, 0, .4);    }}

看看效果:

聊聊如何使用CSS实现比普通阴影更加立体的阴影效果!

文字立体投影 / 文字长阴影

上面的立体效果在文字上就完全不适用了,所以对待文字的立体阴影效果,还需要另辟蹊径。

正常而言,我们使用 text-shadow 来生成文字阴影,像这样:

Txt Shadow
-----div { text-shadow: 6px 6px 3px hsla(14, 100%, 30%, 1);}

image

嗯,挺好的,就是不够立体。那么要做到立体文字阴影,最常见的方法就是使用多层文字阴影叠加。

Tips:和 box-shadow 一样,text-shadow 是可以叠加多层的!但是对于单个元素而言, drop-shadow 的话就只能是一层。

好,上面的文字,我们试着叠加个 50 层文字阴影试一下。额,50 层手写,其实很快的~

好吧,手写真的太慢了,还容易出错,所以这里我们需要借助一下 SASS/LESS 帮忙,写一个生成 50 层阴影的 function 就好,我们每向右和向下偏移 1px,生成一层 text-shadow:

@function makeLongShadow($color) {    $val: 0px 0px $color;    @for $i from 1 through 50 {        $val: #{$val}, #{$i}px #{$i}px #{$color};    }    @return $val;}div {    text-shadow: makeLongShadow(hsl(14, 100%, 30%));}

上面的 SCSS 代码。经过编译后,就会生成如下 CSS:

div {      text-shadow: 0px 0px #992400, 1px 1px #992400, 2px 2px #992400, 3px 3px #992400, 4px 4px #992400, 5px 5px #992400, 6px 6px #992400, 7px 7px #992400, 8px 8px #992400, 9px 9px #992400, 10px 10px #992400, 11px 11px #992400, 12px 12px #992400, 13px 13px #992400, 14px 14px #992400, 15px 15px #992400, 16px 16px #992400, 17px 17px #992400, 18px 18px #992400, 19px 19px #992400, 20px 20px #992400, 21px 21px #992400, 22px 22px #992400, 23px 23px #992400, 24px 24px #992400, 25px 25px #992400, 26px 26px #992400, 27px 27px #992400, 28px 28px #992400, 29px 29px #992400, 30px 30px #992400, 31px 31px #992400, 32px 32px #992400, 33px 33px #992400, 34px 34px #992400, 35px 35px #992400, 36px 36px #992400, 37px 37px #992400, 38px 38px #992400, 39px 39px #992400, 40px 40px #992400, 41px 41px #992400, 42px 42px #992400, 43px 43px #992400, 44px 44px #992400, 45px 45px #992400, 46px 46px #992400, 47px 47px #992400, 48px 48px #992400, 49px 49px #992400, 50px 50px #992400;}

看看效果:

image

额,很不错,很立体。但是,就是丑,而且说不上来的奇怪。

问题出在哪里呢,阴影其实是存在明暗度和透明度的变化的,所以,对于渐进的每一层文字阴影,明暗度和透明度应该都是不断变化的。这个需求,SASS 可以很好的实现,下面是两个 SASS 颜色函数:

fade-out 改变颜色的透明度,让颜色更加透明desaturate 改变颜色的饱和度值,让颜色更少的饱和

关于 SASS 颜色函数,可以看看这里:Sass基础—颜色函数

我们使用上面两个 SASS 颜色函数修改一下我们的 CSS 代码,主要是修改上面的 makeLongShadow function 函数:

@function makelongrightshadow($color) {    $val: 0px 0px $color;    @for $i from 1 through 50 {        $color: fade-out(desaturate($color, 1%), .02);        $val: #{$val}, #{$i}px #{$i}px #{$color};    }    @return $val;}

好,看看最终效果:

聊聊如何使用CSS实现比普通阴影更加立体的阴影效果!

嗯,大功告成,这次顺眼了很多~

详细完整的代码,你可以戳这里:CodePen Demo — 立体文字阴影

https://codepen.io/Chokcoco/pen/JmgNNa

当然,使用 CSS 生成立体文字阴影的方法还有很多,下面再贴出一例,使用了透明色叠加底色的多重线性渐变实现的文字立体阴影,感兴趣的同学可以去看看具体实现:

聊聊如何使用CSS实现比普通阴影更加立体的阴影效果!

详细完整的代码,你可以戳这里:CodePen Demo — 线性渐变配合阴影实现条纹立体阴影条纹字

https://codepen.io/Chokcoco/pen/XxQJEB?editors=1100

(学习视频分享:web前端入门)

以上就是聊聊如何使用CSS实现比普通阴影更加立体的阴影效果!的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1624311.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月24日 08:29:48
下一篇 2025年12月24日 08:30:02

相关推荐

  • CSS宽度、高度属性详解

    本篇文章给大家带来了关于css的相关知识,其中主要介绍了关于设置元素高度和宽度属性的相关问题,height和width属性用于设置元素的高度和宽度,height和width属性不包括内边距、边框或外边距。下面一起来看一下,希望对大家有帮助。. (学习视频分享:css视频教程、html视频教程) CS…

    2025年12月24日 好文分享
    000
  • CSS定位属性之固定fixed属性详解

    本篇文章给大家带来了关于css的相关知识,其中主要介绍了关于css定位属性中fixed 定位的相关问题,fixed定位表示元素的位置相对于浏览器窗口是固定位置,即使窗口是滚动的它也不会移动,下面一起来看一下,希望对大家有帮助。 (学习视频分享:css视频教程、html视频教程) CSS定位属性之固定…

    2025年12月24日
    000
  • CSS定位属性之相对定位relative属性详解

    本篇文章给大家带来了关于css的相关知识,其中主要介绍了关于css定位属性中relative相对定位的相关问题,相对定位是元素在移动位置的时候,是相对于它原来的位置来说的,设置为相对定位的元素框会偏移某个距离,下面一起来看一下,希望对大家有帮助。 (学习视频分享:css视频教程、html视频教程) …

    2025年12月24日 好文分享
    000
  • CSS相对定位和绝对定位的关系解析

    本篇文章给大家带来了关于css的相关知识,其中主要介绍了关于css的绝对定位和相对定位的相关问题,相对定位是元素在移动位置的时候,是相对于它原来的位置来说的,绝对定位是元素在移动位置的时候,是相对于它的祖先元素来说的,下面一起来看一下,希望对大家有帮助。 (学习视频分享:css视频教程、html视频…

    2025年12月24日 好文分享
    000
  • css定位详解–相对定位、绝对定位和固定定位

    本篇文章给大家带来了关于css的相关知识,其中主要介绍了关于css的相对定位、绝对定位和固定定位的相关问题,css中的position属性,position有四个值:relative(相对定位)、absolute(绝对定位)、static(静态定位)和fixed(固定定位),通过top、left、b…

    2025年12月24日 好文分享
    000
  • 详解CSS中的基本选择器,并聊聊选择器优先级

    本篇文章带大家了解一下css的5种基本选择器:元素选择器、类选择器、id选择器、通配符选择器、属性选择器,并聊聊这基本选择器的优先级,希望对大家有所帮助! 本教程操作环境:windows7系统、CSS3&&HTML5版、Dell G3电脑。 什么是选择器 CSS选择器 的作用是按照C…

    2025年12月24日 好文分享
    000
  • CSS布局属性控制元素的隐藏与显示

    本篇文章给大家带来了关于css的相关知识,其中主要介绍了关于元素显示与隐藏相关属性的问题,包括了display、visibility、overflow和opacity,下面一起来看一下,希望对大家有帮助。 (学习视频分享:css视频教程、html视频教程) CSS中提供了一些可以使元素显示与隐藏的属…

    2025年12月24日 好文分享
    000
  • CSS利用float属性控制div左右浮动详解

    本篇文章给大家带来了关于css的相关知识,其中主要介绍了float属性控制div左右浮动的相关问题,浮动,顾名思义,就是漂浮的意思。指的是一个元素脱离文档流,悬浮在父元素之上的现象,下面一起来看一下,希望对大家有帮助。 (学习视频分享:css视频教程、html视频教程) 一、什么是浮动? 浮动,顾名…

    2025年12月24日 好文分享
    000
  • web前端笔试题库之CSS篇

    之前的文章《web前端笔试题库之html篇》中,我们分享了一些关于html的前端面试题。下面本篇文章就接着上一篇,分享css部分的笔试题(附答案),大家快看看能答对几个! 1、Q: CSS 属性是否区分大小写? “` ul { MaRGin: 10px; } “` A: 不区分。 HTML,CS…

    2025年12月24日
    000
  • 手把手带你使用CSS绘制一个可爱卡通狮子动画

    怎么利用css绘制狮子动画?下面本篇文章手把手带大家一步步利用css绘制一个可爱卡通狮子动画,希望对大家有所帮助。 本期我们要使用纯css来绘制出一个乖巧可爱的卡通狮子,通过这个栗子我们可以熟悉更多的css绘制技巧,相信在以后的界面绘制任务中更加得心应手。【推荐学习:css视频教程】 演示 正文 基…

    2025年12月24日 好文分享
    000
  • 快看!10个不错的CSS实用小技巧(分享)

    本篇文章给大家分享10个不错的css实用小技巧,让前端开发更轻松,快来收藏吧,希望对大家有所帮助! CSS 大约有两百个属性。很多属性都是相互关联的,理清楚每一个属性细节是不可能的。所以,本文分享一些有用的 CSS 小技巧,方便开发者和设计师参考。【推荐学习:css视频教程】 1、 打字效果 立即学…

    2025年12月24日 好文分享
    000
  • 原来利用纯CSS也能实现文字轮播与图片轮播!

    怎么制作文字轮播与图片轮播?大家第一想到的是不是利用js,其实利用纯css也能实现文字轮播与图片轮播,下面来看看实现方法,希望对大家有所帮助! 今天,分享一个实际业务中能够用得上的动画技巧。【推荐学习:css视频教程】 巧用逐帧动画,配合补间动画实现一个无限循环的轮播效果,像是这样: 立即学习“前端…

    2025年12月24日 好文分享
    000
  • 一文了解CSS3中的新属性object-view-box

    本篇文章带大家一起深入了解一下css3中的新特性object-view-box属性,聊聊新属性的作用和使用方法,希望对大家有所帮助! 在开发时,一直希望有一种原生的CSS方式来裁剪图片,并将其定位在我需要的任何方向。这可以通过使用一个额外的HTML元素和不同的CSS属性来实现,后面解释。 在这篇文章…

    2025年12月24日 好文分享
    000
  • CSS变量是怎么工作的?如何使用内联CSS变量进行布局?

    本篇文章带大家了解一下css变量,聊聊css变量是怎么工作的,并介绍一下如何使用内联css变量,以提高灵巧布局效率,希望对大家有所帮助! 有些情况下,我需要用一种简单的方法来创建网格布局。 例如,每次我改变主意时,在不修改CSS的情况下快速画出五列网格。 在本文中,我们一起探索一些用例,并思考如果实…

    2025年12月24日 好文分享
    000
  • 深入探究CSS鼠标指针交互效果

    今天,来实现这样一个有意思的交互效果,通过这个交换效果来聊聊前端鼠标指针交互,希望对大家有所帮助! 将原本的鼠标指针样式,修改成自己想要的效果,并且添加上一些特殊的交互效果。【推荐学习:css视频教程】 修改鼠标样式 首先,第一个问题,我们可以看到,上图中,鼠标指针的样式被修改成了一个圆点: 立即学…

    2025年12月24日 好文分享
    000
  • CSS3动画实战之:超酷炫的粘性气泡效果

    本篇文章带大家聊聊css3动画,看看怎么使用纯 css 实现超酷炫的粘性气泡效果,希望对大家有所帮助! 最近,在 CodePen 上看到这样一个非常有意思的效果: 这个效果的核心难点在于气泡的一种特殊融合效果。【推荐学习:css视频教程】 立即学习“前端免费学习笔记(深入)”; 其源代码在:Code…

    2025年12月24日 好文分享
    000
  • 什么是BFC?深入了解BFC,聊聊作用

    什么是bfc?下面本篇文章带大家了解一下bfc,并聊聊bfc的作用。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 之前在面试字节的时候,面试官问了我有了解BFC吗,我当时其实有看很多文章,但是总是记不住,感觉每个文章讲的都差不多,然后面试时候也没答出来,但是在听了王红元老师讲解的…

    2025年12月24日 好文分享
    000
  • 利用纯CSS如何在滚动时自动添加头部阴影

    利用纯css如何在滚动时自动添加头部阴影?下面本篇文章给大家介绍一下css层级小技巧!看看在滚动时自动添加头部阴影的方法,希望对大家有所帮助! 在网页中,经常会用阴影来突出层级关系,特别是顶部导航,但有时候设计觉得没必要一开始就显示阴影,只有滚动后才出现。比如下面这个例子,注意观察头部阴影。【推荐学…

    2025年12月24日 好文分享
    000
  • 聊聊怎么巧用CSS给普通黑色二维码添上彩色渐变!

    怎么巧用 css 构建渐变彩色二维码?下面本篇文章就来给大家介绍一下利用css给普通黑色二维码添上彩色渐变的方法,希望对大家有所帮助! 今日,群里有个很有意思的问题,问我如何实现一个彩色的,带渐变的二维码,像是这样: 很有意思的问题,我们在百度谷歌,搜索 qrcode,能搜到非常多在线制作二维码的工…

    2025年12月24日 好文分享
    000
  • 利用CSS也可以处理图片,转为“像素风”!

    如何把图片变成“伪像素风”?本篇文章给大家介绍一下使用css处理图片,将其转为“像素风”的方法,希望对大家有所帮助! 什么是像素风? 像素风是一种以固定大小纯色像素方块作为基本单元,进行创作,包含但不限于绘画、建筑、游戏更各个领域的一种美术风格。其中最让人耳熟能详的,当然是早期电子游戏的像素画面啦~…

    2025年12月24日 好文分享
    000

发表回复

登录后才能评论
关注微信