在css中设计好看的阴影

在css中设计好看的阴影

在本文中,我们将学习如何将典型的盒子阴影转换为更好看的的阴影。

在这里插入图片描述

统一角度

当我们想要一个元素有阴影时,会添加box-shadow属性并修改其中的数字,直到满意为止。

问题是,通过像这样单独创建每个阴影,我们最终会得到一堆不协调的阴影。如果我们的目标是创造深度幻觉,我们需要每个阴影都匹配。否则,它看起来就像一堆模糊的边界:

在这里插入图片描述
在自然界中,阴影是从光源投射出来的。阴影的方向取决于灯光的位置。一般来说,我们应该为页面上的所有元素决定一个单一的光源。该光源通常位于上方并稍微偏左:

在这里插入图片描述

如果 CSS 有一个真正的照明系统,我们将为一个或多个灯光指定一个位置。不过CSS 并没有这样的东西,但是我们可以通过指定水平偏移和垂直偏移来移动阴影。例如,在上图中,生成的阴影具有 4px 垂直偏移和 2px 水平偏移。

这是粘性阴影的第一个技巧:页面上的每个阴影都应具有相同的比例。这将使每个元素看起来都由同一光源照亮。

分层

现代 3D 插图工具(例如 Blender)可以通过使用光线追踪技术来产生逼真的阴影和照明。在光线追踪中,数百束光从相机中射出,在场景中的表面上反射数百次。这是一种计算成本较高的技术;生成一张图像可能需要几分钟到几小时!但是css中的box-shadow算法更加初级。它以我们元素的形状创建一个盒子,并对其应用基本的模糊算法。这样就会使得我们的阴影看起来永远不会像照片一样逼真,但我们可以通过一种巧妙的技术来改进很多东西:分层。

我们不使用单个盒子阴影,而是将一些盒子阴影堆叠在一起,偏移量和半径略有不同:

<style>
.wrapper {display: flex;gap: 32px;
}.box {width: 100px;height: 100px;border-radius: 8px;background-color: white;
}.traditional.box {box-shadow:0 6px 6px hsl(0deg 0% 0% / 0.3);}.layered.box {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 8px 8px hsl(0deg 0% 0% / 0.075),0 16px 16px hsl(0deg 0% 0% / 0.075);}
</style><section class="wrapper"><div class="traditional box"></div><div class="layered box"></div>
</section>

在这里插入图片描述

性能权衡
分层阴影无疑能展现更好的效果,但它们确实是有代价的。如果我们分层 5 个阴影,我们的设备必须多做 5 倍的工作!
这在现代硬件上并不是什么大问题,但它可能会减慢移动设备上的渲染速度。
与往常一样,请务必进行自己的测试!根据我的经验,分层阴影不会对性能产生重大影响,但我也从未尝试过同时使用数十个或数百个阴影。
另外,尝试对分层阴影进行动画处理可能会导致性能问题。

与背景色匹配的阴影

到目前为止,我们所有的阴影都使用了半透明的黑色,例如hsl(0deg 0% 0% / 0.4),在项目中我们可能使用到非常多其他颜色。

当我们在背景颜色上叠加黑色时,它不仅会使其变暗,还会使背景颜色变暗。它也会使其饱和度降低很多。

在这里插入图片描述
在这里插入图片描述
通过匹配色调并降低饱和度/亮度,我们可以创建不具有“褪色”灰色质量的真实阴影。

饱和度和亮度的关系
如果我们熟悉hsl颜色格式,就会知道饱和度和亮度是独立控制的。但是降低亮度也会对饱和度产生影响。
例如,以下两个框具有相同的饱和度百分比 (100%),但感知的饱和度却截然不同.

.box.one {
background-color:hsl(220deg 100% 70%);
}
.box.two {
background-color:hsl(220deg 100% 50%);
}

在这里插入图片描述
发生这种情况是因为在高/低亮度值下颜色中没有那么多“颜料”。饱和度不会对整体颜色产生太大影响。
这在极端情况下最为明显:

  1. hsl(0deg 0% 100%)是纯白色,饱和度为 0%。
  2. hsl(0deg 100% 100%)也是纯白色,甚至是完全饱和的。

如果我们将亮度设置为 95%,就会有差异,但很微妙:
在这里插入图片描述
对于非常暗的颜色也是如此:
在这里插入图片描述
然而,当我们处于亮度50%时,可以使用完整范围的饱和度。
在这里插入图片描述
50% 的亮度是所有色调的“默认”版本。当亮度为 50% 时,亮度对饱和度没有影响。
当我们从 50% 最佳点增加或减少亮度时,我们就会减少颜色中可用颜料的量。颜色不可能完全饱和,也不可能是浅色或深色。
饱和度百分比是一个相对测量值,基于给定亮度下可用的颜料量。
这就是为什么我们之前必须降低阴影示例中的饱和度!亮度更接近 50% 最佳点,因此可以使用更广泛的饱和度范围。为了保持感知的鲜艳度相同,我们必须降低饱和度百分比。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/100992.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

近年GDC服务器分享合集(四): 《火箭联盟》:为免费游玩而进行的扩展

如今&#xff0c;网络游戏采用免费游玩&#xff08;Free to Play&#xff09;加内购的比例要远大于买断制&#xff0c;这是因为前者能带来更低的用户门槛。甚至有游戏为了获取更多的用户&#xff0c;选择把原来的买断制改为免费游玩&#xff0c;一个典型的例子就是最近的网易的…

jar包或exe程序设置为windows服务

最近在使用java和python制作客户端时突发奇想&#xff0c;是否能够通过一种方法来讲jar包和exe程序打包成windows服务呢&#xff1f;简单了解了一下是可以的。 首先要用到的是winSW&#xff0c;制作windows服务的过程非常简单&#xff0c;仅需几步制作完成&#xff0c;也不需要…

OpenCV(十二):图像透视变换

目录 1.透视变换介绍 2.计算透视变换矩阵getPerspectiveTransform(&#xff09; 3.透视变换函数warpPerspective() 4.demo 1.透视变换介绍 透视变换是一种将原始图像映射到目标图像平面上的投影变换&#xff0c;又称为四点变换。 透视变换矩阵的一般形式如下所示&#xff…

Redis未授权访问漏洞实战

文章目录 概述Redis概述Redis 介绍Redis 简单使用Redis未授权漏洞危害 漏洞复现启动靶场环境POC漏洞验证EXP漏洞利用 总结 本次测试仅供学习使用&#xff0c;如若非法他用&#xff0c;与平台和本文作者无关&#xff0c;需自行负责&#xff01; 概述 ​ 本文章主要是针对于vulh…

虹科新闻 | 虹科与LUMATEC正式建立合作伙伴关系

2023年7月&#xff0c;虹科与LUMATEC 正式建立合作伙伴关系&#xff0c;负责该品牌及其产品在大中华地区的销售和售后服务&#xff0c;共同为国内客户提供世界领先的高性能紫外光源产品和先进的液体光导技术。 关于LUMATEC 虹科伙伴LUMATEC公司成立于1976年&#xff08;总部位…

redis 配置与优化

目录 一、关系数据库和非关系型数据库 二、关系型数据库和非关系型数据库区别 三、非关系型数据库产生背景 四、redis 1、概念 2、redis的优点 3、redis为什么这么快 五、redis安装与配置 一、关系数据库和非关系型数据库 关系型数据库&#xff1a;关系型数据库是一个结…

百度云智大会:科技与创新的交汇点

​ 这次的百度云智大会&#xff0c;可谓是亮点云集—— 发布了包含42个大模型、41个数据集、10个精选应用范式的全新升级千帆大模型平台2.0&#xff0c;发布首个大模型生态伙伴计划&#xff0c;而且也预告了文心大模型4.0的发布&#xff0c;大模型服务的成绩单也非常秀&#x…

无涯教程-JavaScript - DCOUNT函数

描述 DCOUNT函数返回包含与您指定条件匹配的列表或数据库的列中的数字的单元格的计数。 语法 DCOUNT (database, field, criteria)争论 Argument描述Required/Optionaldatabase 组成列表或数据库的单元格范围。 数据库是相关数据的列表,其中相关信息的行是记录,数据的列是…

2023年高教社杯全国大学生数学建模竞赛参赛事项注意

MathClub数模资源&#xff0c;含专属思路 资源链接&#xff1a;点击这里获取众多数模资料、思路精讲、论文模板latex和word、学习书籍等 2023高教社杯数学建模国赛–赛前准备 一年一度的数学建模国赛要来啦&#xff01;&#xff01;&#xff01;小编仔细阅读了比赛官方网站上…

使用 UPFC 计算电力系统网络潮流(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

Python接口自动化封装导出excel方法和读写excel数据

一、首先需要思考&#xff0c;我们在页面导出excel&#xff0c;用python导出如何写入文件的 封装前需要确认python导出excel接口返回的是一个什么样的数据类型 如下&#xff1a;我们先看下不对返回结果做处理&#xff0c;直接接收数据类型是一个对象&#xff0c;无法获取返回值…

MyBatis-动态SQL

<if>标签 用于判断条件是否成立&#xff0c;使用test属性进行条件判断&#xff0c;如果条件为true&#xff0c;则拼接SQL <where>标签 where元素只会在子元素有内容的情况下插入where子句&#xff0c;而且会自动去除子句的开头的AND或OR <where><if tes…