前言
何为技巧,意指表现在文学、工艺、体育等方面的巧妙技能。代码作为一门现代高级工艺,推动着人类科学技术的发展,同时犹如文字一样承托着人类文化的进步。
每写好一篇文章,都会使用大量的写作技巧。烘托、渲染、悬念、铺垫、照应、伏笔、联想、想象、抑扬结合、点面结合、动静结合、叙议结合、情景交融、首尾呼应、衬托对比、白描细描、比喻象征、借古讽今、卒章显志、承上启下、开门见山、动静相衬、虚实相生、实写虚写、托物寓意、咏物抒情
等,这些应该都是我们从小到大写文章而接触到的写作技巧。
作为程序猿的我们,写代码同样也需要大量的写作技巧。一份良好的代码能让人耳目一新,让人容易理解,让人舒服自然,同时也让自己成就感满满(哈哈,这个才是重点)。因此,我整理下三年来自己使用到的一些CSS开发技巧,希望能让你写出耳目一新、容易理解、舒服自然的代码。
目录
既然写文章有这么多的写作技巧,那么我也需要对CSS开发技巧整理一下,起个易记的名字。
- Layout Skill:布局技巧
- Behavior Skill:行为技巧
- Color Skill:色彩技巧
- Figure Skill:图形技巧
- Component Skill:组件技巧
备注
- 代码只作演示用途,不会详细说明语法
- 部分技巧示例代码过长,使用
CodePen
进行保存,点击在线演示即可查看 - 兼容项点击链接即可查看当前属性的浏览器兼容数据,自行根据项目兼容需求考虑是否使用
- 以下代码全部基于CSS进行书写,没有任何JS代码,没有特殊说明的情况下所有属性和方法都是CSS类型
- 一部分技巧是自己探讨出来的,另一部分技巧是参考各位前端大神们的,都是一个互相学习的工程,大家一起进步
Layout Skill
使用vw定制rem自适应布局
/* 基于UI width=750px DPR=2的页面 */ html { font-size: calc(100vw / 7.5); } 复制代码
使用:nth-child()选择指定元素
- 要点:通过
:nth-child()
筛选指定的元素设置样式 - 场景:表格着色、边界元素排版(首元素、尾元素、左右两边元素)
- 兼容::nth-child()
- 代码:在线演示
![](https://www.eimg.top/images/2020/03/03/d889782ffcb47dc0f462ee9bf5a0b642.png)
使用writing-mode排版竖文
- 要点:通过
writing-mode
调整文本排版方向 - 场景:竖行文字、文言文、诗词
- 兼容:writing-mode
- 代码:在线演示
![](https://www.eimg.top/images/2020/03/03/bd2140a871cce63290ad201dbeec1a9d.png)
使用text-align-last对齐两端文本
- 要点:通过
text-align-last:justify
设置文本两端对齐 - 场景:未知字数中文对齐
- 兼容:text-align-last
- 代码:在线演示
![](https://www.eimg.top/images/2020/03/03/d577993529b94f4422dea56819229d9a.png)
使用:not()去除无用属性
![](https://www.eimg.top/images/2020/03/03/c03a47dacfb62adf786f82798500ef63.png)
使用object-fit规定图像尺寸
- 要点:通过
object-fit
使图像脱离background-size
的约束,使用<img>
来标记图像背景尺寸 - 场景:图片尺寸自适应
- 兼容:object-fit
- 代码:在线演示
![](https://www.eimg.top/images/2020/03/03/f0694559ce77e331c5cabb76e3d161d4.png)
使用overflow-x排版横向列表
- 要点:通过
flexbox
或inline-block
的形式横向排列元素,对父元素设置overflow-x:auto
横向滚动查看 - 场景:横向滚动列表、元素过多但位置有限的导航栏
- 兼容:overflow-x
- 代码:在线演示
![](https://www.eimg.top/images/2019/12/20/619c316d51e4f268917cf044a161ba6a.gif)
使用text-overflow控制文本溢出
- 要点:通过
text-overflow:ellipsis
对溢出的文本在末端添加...
- 场景:单行文字溢出、多行文字溢出
- 兼容:text-overflow、line-clamp、box-orient
- 代码:在线演示
![](https://www.eimg.top/images/2020/03/03/37c49343a471ea355e0da0dacc26c39b.png)
使用transform描绘1px边框
![](https://www.eimg.top/images/2020/03/03/14b08858218b8a11001cd5f0d5e67429.png)
使用transform翻转内容
![](https://www.eimg.top/images/2020/03/03/e3ab155c33c3f6cab6f9df8c1af811ee.png)
使用letter-spacing排版倒序文本
- 要点:通过
letter-spacing
设置负值字体间距将文本倒序 - 场景:文言文、诗词
- 兼容:letter-spacing
- 代码:在线演示
![](https://www.eimg.top/images/2020/03/03/f76aff6a0857996a98bdab809ae6e144.png)
使用margin-left排版左重右轻列表
![](https://www.eimg.top/images/2020/03/03/45d9b47ef6514a78c8044e184a3245b0.png)
Behavior Skill
使用overflow-scrolling支持弹性滚动
- 要点:iOS页面
非body元素
的滚动操作会非常卡(Android不会出现此情况),通过overflow-scrolling:touch
调用Safari原生滚动来支持弹性滚动,增加页面滚动的流畅度 - 场景:iOS页面滚动
- 兼容:iOS自带
-webkit-overflow-scrolling
body { -webkit-overflow-scrolling: touch; } .elem { overflow: auto; } 复制代码
使用transform启动GPU硬件加速
- 要点:有时执行动画可能会导致页面卡顿,可在特定元素中使用硬件加速来避免这个问题
- 场景:动画元素(绝对定位、同级中超过6个以上使用动画)
- 兼容:transform
.elem { transform: translate3d(0, 0, 0); /* translateZ(0)亦可 */ } 复制代码
使用attr()抓取data-*
![](https://www.eimg.top/images/2019/12/20/6cc506413a71965a0a9b08b6dfd3a19c.gif)
使用:valid和:invalid校验表单
![](https://www.eimg.top/images/2019/12/20/6f7c8672e2c73fb0584633c768f60c1c.gif)
使用pointer-events禁用事件触发
- 要点:通过
pointer-events:none
禁用事件触发(默认事件、冒泡事件、鼠标事件、键盘事件等),相当于<button>
的disabled
- 场景:限时点击按钮(发送验证码倒计时)、事件冒泡禁用(多个元素重叠且自带事件、a标签跳转)
- 兼容:pointer-events
- 代码:在线演示
![](https://www.eimg.top/images/2019/12/20/768553a1ec5d77ca477b21addc62562c.gif)
使用+或~美化选项框
![](https://www.eimg.top/images/2019/12/20/b8d8623e8fcb3b0e3edbbb68c08c847d.gif)
使用:focus-within分发冒泡响应
- 要点:表单控件触发
focus
和blur
事件后往父元素进行冒泡,在父元素上通过:focus-within
捕获该冒泡事件来设置样式 - 场景:登录注册弹框、表单校验、离屏导航、导航切换
- 兼容::focus-within、:placeholder-shown
- 代码:在线演示
![](https://www.eimg.top/images/2019/12/20/59cc6fe19700adc26ac230ac94ca912d.gif)
使用:hover描绘鼠标跟随
![](https://www.eimg.top/images/2019/12/20/5c481db0ab8a441dc609f017b268d219.gif)
使用max-height切换自动高度
- 要点:通过
max-height
定义收起的最小高度和展开的最大高度,设置两者间的过渡切换 - 场景:隐藏式子导航栏、悬浮式折叠面板
- 兼容:max-height
- 代码:在线演示
![](https://www.eimg.top/images/2019/12/20/eb57afb512967b1f825b9104e050a015.gif)
使用transform模拟视差滚动
- 要点:通过
background-attachment:fixed
或transform
让多层背景以不同的速度移动,形成立体的运动效果 - 场景:页面滚动、视差滚动文字阴影、视差滚动文字虚影
- 兼容:background-attachment、transform
- 代码:在线演示
![](https://www.eimg.top/images/2019/12/20/8c76de44f55c0dc6add900ad2d4ebecc.gif)
使用animation-delay保留动画起始帧
- 要点:通过
transform-delay
或animation-delay
设置负值时延保留动画起始帧,让动画进入页面不用等待即可运行 - 场景:开场动画
- 兼容:transform、animation
- 代码:在线演示
![](https://www.eimg.top/images/2019/12/20/33b6e0a11637257bae924c7ba50d4582.gif)
使用resize拉伸分栏
![](https://www.eimg.top/images/2019/12/20/c6db940d38e6cfb05e7ecb37256d213b.gif)
Color Skill
使用color改变边框颜色
- 要点:
border
没有定义border-color
时,设置color
后,border-color
会被定义成color
- 场景:边框颜色与文字颜色相同
- 兼容:color
.elem { border: 1px solid; color: #f66; } 复制代码
![](https://www.eimg.top/images/2019/12/20/04429456e12e573178d5371181e58062.gif)
使用filter开启悼念模式
使用::selection改变文本选择颜色
- 要点:通过
::selection
根据主题颜色自定义文本选择颜色 - 场景:主题化
- 兼容:::selection
- 代码:在线演示
![](https://www.eimg.top/images/2019/12/20/a56683983e6160ea869cea06e1e276ea.gif)
使用linear-gradient控制背景渐变
![](https://www.eimg.top/images/2019/12/20/65e4f07d3b11c83579fc0e1ab2699e9f.gif)
使用linear-gradient控制文本渐变
- 要点:通过
linear-gradient
设置背景渐变色,配合background-clip:text
对背景进行文本裁剪,添加滤镜动画 - 场景:主题化、特色标题
- 兼容:gradient、background-clip、filter、animation、text-fill-color
- 代码:在线演示
![](https://www.eimg.top/images/2019/12/20/064a7b76cef8882c4b52e312b0941745.gif)
使用caret-color改变光标颜色
- 要点:通过
caret-color
根据主题颜色自定义光标颜色 - 场景:主题化
- 兼容:caret-color
- 代码:在线演示
![](https://www.eimg.top/images/2019/12/20/4a3edbc211efc74686f300d7fe8311b9.gif)
使用:scrollbar改变滚动条样式
- 要点:通过
scrollbar
的scrollbar-track
和scrollbar-thumb
等属性来自定义滚动条样式 - 场景:主题化、页面滚动
- 兼容::scrollbar
- 代码:在线演示
![](https://www.eimg.top/images/2019/12/20/d5421f57d612cef1dc7134c511451181.gif)
使用filter模拟Instagram滤镜
Figure Skill
使用div描绘各种图形
使用mask雕刻镂空背景
- 要点:通过
mask
为图像背景生成蒙层提供遮罩效果 - 场景:高斯模糊蒙层、票劵(电影票、购物卡)、遮罩动画
- 兼容:mask、perspective、transform-style、animation
- 代码:在线演示
![](https://www.eimg.top/images/2019/12/20/4694a10cf8178eef0ae30661711cb1a9.gif)
使用linear-gradient描绘波浪线
![](https://www.eimg.top/images/2020/03/03/ef3d0acd677895000a185b583e3db5d7.png)
使用linear-gradient描绘彩带
![](https://www.eimg.top/images/2020/03/03/34b70b4aa7d500f385e194b5a526a42a.png)
使用conic-gradient描绘饼图
使用linear-gradient描绘方格背景
![](https://www.eimg.top/images/2020/03/03/853ac289701c61c1f893679458e95e8d.png)
使用box-shadow描绘单侧投影
- 要点:通过
box-shadow
生成投影,且模糊半径和负的扩张半径一致,使投影偏向一侧 - 场景:容器投影、背景补间动画1、背景补间动画2、立体投影、文字立体投影、文字渐变立体投影、长投影、霓虹灯、灯光阴影
- 兼容:box-shadow、filter、text-shadow
- 代码:在线演示
![](https://www.eimg.top/images/2020/03/03/96e4213397f8f313e8cd3f459c4d610d.png)
使用filter描绘头像彩色阴影
![](https://www.eimg.top/images/2020/03/03/6255599effb70b99a9b4d6428ed32c03.png)
使用box-shadow裁剪图像
- 要点:通过
box-shadow
模拟蒙层实现中间镂空 - 场景:图片裁剪、新手引导、背景镂空、投射定位
- 兼容:box-shadow
- 代码:在线演示
![](https://www.eimg.top/images/2020/03/03/ae8d30807fbc86556d7e64485edde5b5.png)
使用outline描绘内边框
![](https://www.eimg.top/images/2020/03/03/9abea720f6a2a0af265467330996285c.png)
Component Skill
迭代计数器
![](https://www.eimg.top/images/2019/12/20/67783a57338b608b141769a25a743cea.gif)
下划线跟随导航栏
![](https://www.eimg.top/images/2019/12/20/a16619af7c5e3037f5005f9f4cf7ddcf.gif)
气泡背景墙
![](https://www.eimg.top/images/2019/12/20/29090b829b28ecfe778cf207155d07ba.gif)
滚动指示器
![](https://www.eimg.top/images/2019/12/20/d77935e194d70399f776368b23144a9f.gif)
故障文本
![](https://www.eimg.top/images/2019/12/20/6cdd378a61c732a435c5ffc7fdb21cce.gif)
换色器
- 要点:通过拾色器改变图像色相的换色器
- 场景:图片色彩变换
- 兼容:mix-blend-mode
- 代码:在线演示
状态悬浮球
![](https://www.eimg.top/images/2019/12/20/2c95a643b4b261ce3e0b276c1cebcf60.gif)
粘粘球
![](https://www.eimg.top/images/2019/12/20/dc4db5a9f81fed4ce6eed81ec38b17ce.gif)
商城票券
![](https://www.eimg.top/images/2020/03/03/13e509cc9c7736a5da5c1048dfe4e4e6.png)
倒影加载条
- 要点:带有渐变倒影的加载条
- 场景:加载提示
- 兼容:box-reflect、animation
- 代码:在线演示
![](https://www.eimg.top/images/2019/12/20/c7e628ed339e674c29657704decaf0b9.gif)
三维立方体
- 要点:三维建模的立方体
- 场景:三维建模
- 兼容:transform、perspective、transform-style、animation
- 代码:在线演示
![](https://www.eimg.top/images/2019/12/20/43fc774e3fdaf5faa28ab16e7b93fcf1.gif)
动态边框
![](https://www.eimg.top/images/2019/12/20/2f62019c194a50ba5bae63c6fc6f6bba.gif)
标签页
- 要点:可切换内容的标签页
- 场景:内容切换
- 兼容:scroll-behavior
- 代码:在线演示
![](https://www.eimg.top/images/2019/12/20/3b5f3d47b65a47738895070b903b04ea.gif)
标签导航栏
![](https://www.eimg.top/images/2019/12/20/fdaa3633605c1aaf85304c9b8a1af983.gif)
折叠面板
![](https://www.eimg.top/images/2019/12/20/d639100218c76cd343c2eae848b5bb7d.gif)
星级评分
![](https://www.eimg.top/images/2019/12/20/b82bceeca5e5e5bc74f3570bb526487a.gif)
加载指示器
![](https://www.eimg.top/images/2019/12/20/a4255b3b9d0f78be27432dc03cf50178.gif)
自适应相册
- 要点:自适应照片数量的相册
- 场景:九宫格相册、微信相册、图集
- 兼容::only-child、:first-child、:nth-child()、:nth-last-child()、~
- 代码:在线演示
![](https://www.eimg.top/images/2019/12/20/3dd689d33500256e14308e694ce7be39.gif)
圆角进度条
![](https://www.eimg.top/images/2020/03/03/0d797fb0e90bb7c2c9bfc366f0c26b74.png)
螺纹进度条
![](https://www.eimg.top/images/2019/12/20/94bc6939c8b143ae802d6d62d5ad754c.gif)
立体按钮
- 要点:点击呈现按下状态的按钮
- 场景:按钮点击
- 兼容:box-shadow
- 代码:在线演示
![](https://www.eimg.top/images/2019/12/20/af06813d4898dce5e2753520baf1ea36.gif)
混沌加载圈
![](https://www.eimg.top/images/2019/12/20/0769b707179e5419c7f732a601f3b3a8.gif)
蛇形边框
![](https://www.eimg.top/images/2019/12/20/8db4b3f41289ae5b6b3276756eb44b51.gif)
自动打字
![](https://www.eimg.top/images/2019/12/20/91b704f8e2025484971b5f11c7a6021b.gif)
结语
写到最后总结得差不多了,后续如果我想起还有哪些CSS开发技巧遗漏的,会继续在这篇文章上补全,同时也希望各位倔友对文章里的要点进行补充或者提出自己的见解。欢迎在下方进行评论或补充喔,喜欢的点个赞或收个藏,保证你在开发时用得上。
最后送大家一个键盘!
作者:JowayYoung
链接:https://juejin.im/post/5d4d0ec651882549594e7293
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。