前言
何为技巧,意指表如今文学、工艺、体育等方面的巧妙技能。代码做为一门现代高级工艺,推进着人类科学技术的发展,同时犹如文字同样承托着人类文化的进步。css
每写好一篇文章,都会使用大量的写做技巧。烘托、渲染、悬念、铺垫、照应、伏笔、联想、想象、抑扬结合、点面结合、动静结合、叙议结合、情景交融、首尾呼应、陪衬对比、白描细描、比喻象征、借古讽今、卒章显志、承上启下、开门见山、动静相衬、虚实相生、实写虚写、托物寓意、咏物抒情
等,这些应该都是咱们从小到大写文章而接触到的写做技巧。html
做为程序猿的咱们,写代码一样也须要大量的写做技巧。一份良好的代码能让人耳目一新,让人容易理解,让人舒服天然,同时也让本身成就感满满(哈哈,这个才是重点)。所以,我整理下三年来本身使用到的一些CSS开发技巧,但愿能让你写出耳目一新、容易理解、舒服天然的代码。前端
目录
既然写文章有这么多的写做技巧,那么我也须要对CSS开发技巧整理一下,起个易记的名字。git
- Layout Skill:布局技巧
- Behavior Skill:行为技巧
- Color Skill:色彩技巧
- Figure Skill:图形技巧
- Component Skill:组件技巧
备注github
- 代码只做演示用途,不会详细说明语法
- 部分技巧示例代码过长,使用
CodePen
进行保存,点击在线演示便可查看
- 兼容项点击连接便可查看当前属性的浏览器兼容数据,自行根据项目兼容需求考虑是否使用
- 如下代码所有基于CSS进行书写,没有任何JS代码,没有特殊说明的状况下全部属性和方法都是CSS类型
- 一部分技巧是本身探讨出来的,另外一部分技巧是参考各位前端大神们的,都是一个互相学习的工程,你们一块儿进步
Layout Skill
使用vw定制rem自适应布局
- 要点:移动端使用
rem布局
须要经过JS设置不一样屏幕宽高比的font-size
,结合vw
单位和calc()
可脱离JS的控制
- 场景:rem页面布局(不兼容低版本移动端系统)
- 兼容:vw、calc())
/* 基于UI width=750px DPR=2的页面 */
html {
font-size: calc(100vw / 7.5);
}
使用:nth-child()选择指定元素
- 要点:经过
:nth-child()
筛选指定的元素设置样式
- 场景:表格着色、边界元素排版(首元素、尾元素、左右两边元素)
- 兼容::nth-child())
- 代码:在线演示

使用writing-mode排版竖文

使用text-align-last对齐两端文本

使用:not()去除无用属性
- 要点:经过
:not()
排除指定元素不使用设置样式
- 场景:符号分割文字、边界元素排版(首元素、尾元素、左右两边元素)
- 兼容::not())
- 代码:在线演示

使用object-fit规定图像尺寸
- 要点:经过
object-fit
使图像脱离background-size
的约束,使用<img>
来标记图像背景尺寸
- 场景:图片尺寸自适应
- 兼容:object-fit
- 代码:在线演示

使用overflow-x排版横向列表
- 要点:经过
flexbox
或inline-block
的形式横向排列元素,对父元素设置overflow-x:auto
横向滚动查看
- 场景:横向滚动列表、元素过多但位置有限的导航栏
- 兼容:overflow-x
- 代码:在线演示

使用text-overflow控制文本溢出

使用transform描绘1px边框
- 要点:分辨率比较低的屏幕下显示1px的边框会显得模糊,经过
::before
或::after
和transform
模拟细腻的1px边框
- 场景:容器1px边框
- 兼容:transform
- 代码:在线演示

使用transform翻转内容
- 要点:经过
transform:scale3d()
对内容进行翻转(水平翻转、垂直翻转、倒序翻转)
- 场景:内容翻转
- 兼容:transform
- 代码:在线演示

使用letter-spacing排版倒序文本

使用margin-left排版左重右轻列表
- 要点:使用
flexbox横向布局
时,最后一个元素经过margin-left:auto
实现向右对齐
- 场景:右侧带图标的导航栏
- 兼容:margin
- 代码:在线演示

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-*

使用:valid和:invalid校验表单

使用pointer-events禁用事件触发
- 要点:经过
pointer-events:none
禁用事件触发(默认事件、冒泡事件、鼠标事件、键盘事件等),至关于<button>
的disabled
- 场景:限时点击按钮(发送验证码倒计时)、事件冒泡禁用(多个元素重叠且自带事件、a标签跳转)
- 兼容:pointer-events
- 代码:在线演示

使用+或~美化选项框
- 要点:
<label>
使用+
或~
配合for
绑定radio
或checkbox
的选择行为
- 场景:选项框美化、选中项增长选中样式
- 兼容:+、~
- 代码:在线演示

使用:focus-within分发冒泡响应

使用:hover描绘鼠标跟随
- 要点:将整个页面等比划分红小的单元格,每一个单元格监听
:hover
,经过:hover
触发单元格的样式变化来描绘鼠标运动轨迹
- 场景:鼠标跟随轨迹、水波纹、怪圈
- 兼容::hover
- 代码:在线演示

使用max-height切换自动高度
- 要点:经过
max-height
定义收起的最小高度和展开的最大高度,设置二者间的过渡切换
- 场景:隐藏式子导航栏、悬浮式折叠面板
- 兼容:max-height
- 代码:在线演示

使用transform模拟视差滚动

使用animation-delay保留动画起始帧

使用resize拉伸分栏
- 要点:经过
resize
设置横向自由拉伸来调整目标元素的宽度
- 场景:富文本编辑器、分栏阅读
- 兼容:resize
- 代码:在线演示

Color Skill
使用color改变边框颜色
- 要点:
border
没有定义border-color
时,设置color
后,border-color
会被定义成color
- 场景:边框颜色与文字颜色相同
- 兼容:color
.elem {
border: 1px solid;
color: #f66;
}

使用filter开启悼念模式
- 要点:经过
filter:grayscale()
设置灰度模式来悼念某位去世的仁兄或悼念因灾难而去世的人们
- 场景:网站悼念
- 兼容:filter
- 代码:在线演示

使用::selection改变文本选择颜色

使用linear-gradient控制背景渐变

使用linear-gradient控制文本渐变

使用caret-color改变光标颜色

使用::scrollbar改变滚动条样式
- 要点:经过
scrollbar
的scrollbar-track
和scrollbar-thumb
等属性来自定义滚动条样式
- 场景:主题化、页面滚动
- 兼容:::scrollbar
- 代码:在线演示

使用filter模拟Instagram滤镜

Figure Skill
使用div描绘各类图形
- 要点:
<div>
配合其伪元素(::before
、::after
)经过clip
、transform
等方式绘制各类图形
- 场景:各类图形容器
- 兼容:clip、transform
- 代码:在线演示
使用mask雕刻镂空背景

使用linear-gradient描绘波浪线
- 要点:经过
linear-gradient
绘制波浪线
- 场景:文字强化显示、文字下划线、内容分割线
- 兼容:gradient
- 代码:在线演示

使用linear-gradient描绘彩带

使用conic-gradient描绘饼图

使用linear-gradient描绘方格背景
- 要点:使用
linear-gradient
绘制间断颜色的彩带进行交互生成方格
- 场景:格子背景、占位图
- 兼容:gradient
- 代码:在线演示

使用box-shadow描绘单侧投影

使用filter描绘头像彩色阴影
- 要点:经过
filter:blur() brightness() opacity()
模拟阴影效果
- 场景:头像阴影
- 兼容:filter
- 代码:在线演示

使用box-shadow裁剪图像
- 要点:经过
box-shadow
模拟蒙层实现中间镂空
- 场景:图片裁剪、新手引导、背景镂空、投射定位
- 兼容:box-shadow
- 代码:在线演示

使用outline描绘内边框
- 要点:经过
outline
设置轮廓进行描边,可设置outline-offset
设置内描边
- 场景:内描边、外描边
- 兼容:outline
- 代码:在线演示

Component Skill
迭代计数器

下划线跟随导航栏
- 要点:下划线跟随鼠标移动的导航栏
- 场景:动态导航栏
- 兼容:+
- 代码:在线演示

气泡背景墙

滚动指示器

故障文本

换色器

状态悬浮球

粘粘球

商城票券

倒影加载条

三维立方体

动态边框

标签页

标签导航栏
- 要点:可切换内容的导航栏
- 场景:页面切换
- 兼容:~
- 代码:在线演示

折叠面板
- 要点:可折叠内容的面板
- 场景:隐藏式子导航栏
- 兼容:~
- 代码:在线演示

星级评分
- 要点:点击星星进行评分的按钮
- 场景:评分
- 兼容:~
- 代码:在线演示

加载指示器

自适应相册

圆角进度条

螺纹进度条

立体按钮

混沌加载圈

蛇形边框

自动打字

结语
写到最后总结得差很少了,后续若是我想起还有哪些CSS开发技巧遗漏的,会继续在这篇文章上补全,同时也但愿各位朋友对文章里的要点进行补充或者提出本身的看法。欢迎在下方进行评论或补充喔,喜欢的点个赞或收个藏,保证你在开发时用得上。web
最后送你们一个键盘!segmentfault
(_=>[..."`1234567890-=~~QWERTYUIOP[]\\~ASDFGHJKL;'~~ZXCVBNM,./~"].map(x=>(o+=`/${b='_'.repeat(w=x<y?2:' 667699'[x=["Bs","Tab","Caps","Enter"][p++]||'Shift',p])}\\|`,m+=y+(x+' ').slice(0,w)+y+y,n+=y+b+y+y,l+=' __'+b)[73]&&(k.push(l,m,n,o),l='',m=n=o=y),m=n=o=y='|',p=l=k=[])&&k.join`
`)()
专栏文章
《灵活运用》系列
《必备工具》系列
《随笔》系列
关注公众号Uzero
,更多前端小干货等着你喔!我是JowayYoung
,喜欢分享前端技术和生活纪事,学习与生活不落下,天天进步一点点,与你们相伴成长浏览器