来源:https://mp.weixin.qq.com/s/hEWqQYfrbTrEJ4CIa16DCQ

作者:前端宇宙

何为技巧,意指表现在文学、工艺、体育等方面的巧妙技能。代码作为一门现代高级工艺,推动着人类科学技术的发展,同时犹如文字一样承托着人类文化的进步。

每写好一篇文章,都会使用大量的写作技巧。烘托、渲染、悬念、铺垫、照应、伏笔、联想、想象、抑扬结合、点面结合、动静结合、叙议结合、情景交融、首尾呼应、衬托对比、白描细描、比喻象征、借古讽今、卒章显志、承上启下、开门见山、动静相衬、虚实相生、实写虚写、托物寓意、咏物抒情等,这些应该都是我们从小到大写文章而接触到的写作技巧。

作为程序猿的我们,写代码同样也需要大量的写作技巧。一份良好的代码能让人耳目一新,让人容易理解,让人舒服自然,同时也让自己成就感满满(哈哈,这个才是重点)。因此,我整理下三年来自己使用到的一些CSS开发技巧,希望能让你写出耳目一新、容易理解、舒服自然的代码。

目录

既然写文章有这么多的写作技巧,那么我也需要对CSS开发技巧整理一下,起个易记的名字。

  • Layout Skill:布局技巧
  • Behavior Skill:行为技巧
  • Color Skill:色彩技巧
  • Figure Skill:图形技巧
  • Component Skill:组件技巧

备注

  • 代码只作演示用途,不会详细说明语法
  • 部分技巧示例代码过长,使用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排版竖文

  • 要点:通过writing-mode调整文本排版方向
  • 场景:竖行文字文言文诗词
  • 兼容:writing-mode
  • 代码:在线演示

在线演示

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

  • 要点:通过text-align-last:justify设置文本两端对齐
  • 场景:未知字数中文对齐
  • 兼容:text-align-last
  • 代码:在线演示

在线演示

使用:not()去除无用属性

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

在线演示

使用object-fit规定图像尺寸

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

在线演示

我自己是一名从事了多年开发的web前端老程序员,目前辞职在做自己的web前端私人定制课程,今年年初我花了一个月整理了一份最适合2019年学习的web前端学习干货,各种框架都有整理,送给每一位前端小伙伴,想要获取的可以关注我的头条号并在后台私信我:前端,即可免费获取。

使用overflow-x排版横向列表

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

在线演示

使用text-overflow控制文本溢出

  • 要点:通过text-overflow:ellipsis对溢出的文本在末端添加…
  • 场景:单行文字溢出多行文字溢出
  • 兼容:text-overflow、line-clamp、box-orient
  • 代码:在线演示

在线演示

使用transform描绘1px边框

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

在线演示

使用transform翻转内容

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

在线演示

使用letter-spacing排版倒序文本

  • 要点:通过letter-spacing设置负值字体间距将文本倒序
  • 场景:文言文诗词
  • 兼容: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-*

  • 要点:在标签上自定义属性data-*,通过attr()获取其内容赋值到content上
  • 场景:提示框
  • 兼容:data-*、attr()
  • 代码:在线演示

在线演示

使用:valid和:invalid校验表单

  • 要点:使用伪类:valid和:invalid配合pattern校验表单输入的内容
  • 场景:表单校验
  • 兼容:pattern、:valid、:invalid
  • 代码:在线演示

在线演示

使用pointer-events禁用事件触发

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

在线演示

使用+或~美化选项框

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

在线演示

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

  • 要点:表单控件触发focus和blur事件后往父元素进行冒泡,在父元素上通过:focus-within捕获该冒泡事件来设置样式
  • 场景:登录注册弹框表单校验离屏导航导航切换
  • 兼容::focus-within、:placeholder-shown
  • 代码:在线演示

在线演示

使用:hover描绘鼠标跟随

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

在线演示

使用max-height切换自动高度

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

在线演示

使用transform模拟视差滚动

  • 要点:通过background-attachment:fixed或transform让多层背景以不同的速度移动,形成立体的运动效果
  • 场景:页面滚动视差滚动文字阴影视差滚动文字虚影
  • 兼容:background-attachment、transform
  • 代码:在线演示

在线演示

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

  • 要点:通过transform-delay或animation-delay设置负值时延保留动画起始帧,让动画进入页面不用等待即可运行
  • 场景:开场动画
  • 兼容:transform、animation
  • 代码:在线演示

在线演示

使用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改变文本选择颜色

  • 要点:通过::selection根据主题颜色自定义文本选择颜色
  • 场景:主题化
  • 兼容:::selection
  • 代码:在线演示

在线演示

使用linear-gradient控制背景渐变

  • 要点:通过linear-gradient设置背景渐变色并放大背景尺寸,添加背景移动效果
  • 场景:主题化彩虹背景墙
  • 兼容:gradient、animation
  • 代码:在线演示

在线演示

使用linear-gradient控制文本渐变

  • 要点:通过linear-gradient设置背景渐变色,配合background-clip:text对背景进行文本裁剪,添加滤镜动画
  • 场景:主题化特色标题
  • 兼容:gradient、background-clip、filter、animation、text-fill-color
  • 代码:在线演示

在线演示

使用caret-color改变光标颜色

  • 要点:通过caret-color根据主题颜色自定义光标颜色
  • 场景:主题化
  • 兼容:caret-color
  • 代码:在线演示

在线演示

使用:scrollbar改变滚动条样式

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

在线演示

使用filter模拟Instagram滤镜

  • 要点:通过filter的滤镜组合起来模拟Instagram滤镜
  • 场景:图片滤镜
  • 兼容:filter
  • 代码:在线演示、css-gram

在线演示

Figure Skill

使用div描绘各种图形

  • 要点:
  • 配合其伪元素(::before、::after)通过clip、transform等方式绘制各种图形
  • 场景:各种图形容器
  • 兼容:clip、transform
  • 代码:在线演示

使用mask雕刻镂空背景

  • 要点:通过mask为图像背景生成蒙层提供遮罩效果
  • 场景:高斯模糊蒙层票劵(电影票、购物卡)、遮罩动画
  • 兼容:mask、perspective、transform-style、animation
  • 代码:在线演示

在线演示

使用linear-gradient描绘波浪线

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

在线演示

使用linear-gradient描绘彩带

  • 要点:通过linear-gradient绘制间断颜色的彩带
  • 场景:主题化
  • 兼容:gradient
  • 代码:在线演示

在线演示

使用conic-gradient描绘饼图

  • 要点:通过conic-gradient绘制多种色彩的饼图
  • 场景:项占比饼图
  • 兼容:gradient
  • 代码:在线演示

在线演示

使用linear-gradient描绘方格背景

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

在线演示

使用box-shadow描绘单侧投影

  • 要点:通过box-shadow生成投影,且模糊半径和负的扩张半径一致,使投影偏向一侧
  • 场景:容器投影背景补间动画1背景补间动画2立体投影文字立体投影文字渐变立体投影长投影霓虹灯灯光阴影
  • 兼容:box-shadow、filter、text-shadow
  • 代码:在线演示

在线演示

使用filter描绘头像彩色阴影

  • 要点:通过filter:blur() brightness() opacity()模拟阴影效果
  • 场景:头像阴影
  • 兼容:filter
  • 代码:在线演示

在线演示

使用box-shadow裁剪图像

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

在线演示

使用outline描绘内边框

  • 要点:通过outline设置轮廓进行描边,可设置outline-offset设置内描边
  • 场景:内描边外描边
  • 兼容:outline
  • 代码:在线演示

在线演示

Component Skill

迭代计数器

  • 要点:累加选项单位的计数器
  • 场景:章节目录选项计数器加法计数器
  • 兼容:counters
  • 代码:在线演示

在线演示

下划线跟随导航栏

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

在线演示

气泡背景墙

  • 要点:不间断冒出气泡的背景墙
  • 场景:动态背景
  • 兼容:animation
  • 代码:在线演示

在线演示

滚动指示器

  • 要点:提示滚动进度的指示器
  • 场景:阅读进度
  • 兼容:calc()、gradient
  • 代码:在线演示

在线演示

故障文本

  • 要点:显示器故障形式的文本
  • 场景:错误提示
  • 兼容:data-*、attr()、animation
  • 代码:在线演示

在线演示

换色器

  • 要点:通过拾色器改变图像色相的换色器
  • 场景:图片色彩变换
  • 兼容:mix-blend-mode
  • 代码:在线演示

在线演示

悬浮状态球

  • 要点:展示当前状态的悬浮球
  • 场景:状态动态显示波浪动画
  • 兼容:gradient、animation
  • 代码:在线演示

在线演示

粘粘球

  • 要点:相交粘粘效果的双球回弹运动
  • 场景:粘粘动画
  • 兼容:filter、animation
  • 代码:在线演示

在线演示

商城票券

  • 要点:边缘带孔和中间折痕的票劵
  • 场景:电影票代金券消费卡
  • 兼容:gradient
  • 代码:在线演示

在线演示

倒影加载条

  • 要点:带有渐变倒影的加载条
  • 场景:加载提示
  • 兼容:box-reflect、animation
  • 代码:在线演示

在线演示

三维立方体

  • 要点:三维建模的立方体
  • 场景:三维建模
  • 兼容:transform、perspective、transform-style、animation
  • 代码:在线演示

在线演示

动态边框

  • 要点:鼠标悬浮时动态渐变显示的边框
  • 场景:悬浮按钮边框动画
  • 兼容:gradient
  • 代码:在线演示

在线演示

标签页

  • 要点:可切换内容的标签页
  • 场景:内容切换
  • 兼容:scroll-behavior
  • 代码:在线演示

在线演示

标签导航栏

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

在线演示

折叠面板

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

在线演示

星级评分

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

在线演示

加载指示器

  • 要点:变换…长度的加载提示
  • 场景:加载提示
  • 兼容:animation
  • 代码:在线演示

在线演示

自适应相册

  • 要点:自适应照片数量的相册
  • 场景:九宫格相册微信相册图集
  • 兼容::only-child、:first-child、:nth-child()、:nth-last-child()、~
  • 代码:在线演示

在线演示

圆角进度条

  • 要点:单一颜色的圆角进度条
  • 场景:进度条
  • 兼容:gradient
  • 代码:在线演示

在线演示

螺纹进度条

  • 要点:渐变螺纹的进度条
  • 场景:进度条加载动画
  • 兼容:gradient、animation
  • 代码:在线演示

在线演示

立体按钮

  • 要点:点击呈现按下状态的按钮
  • 场景:按钮点击
  • 兼容:box-shadow
  • 代码:在线演示

在线演示

混沌加载圈

  • 要点:带混沌虚影的加载圈
  • 场景:加载提示
  • 兼容:filter、animation
  • 代码:在线演示

在线演示

蛇形边框

  • 要点:蛇形运动的边框
  • 场景:蛇形动画
  • 兼容:clip、animation
  • 代码:在线演示

在线演示

自动打字

  • 要点:逐个字符自动打印出来的文字
  • 场景:代码演示文字输入动画
  • 兼容:ch、animation
  • 代码:在线演示

css鼠标拖拉卡顿_66个值得收藏的CSS开发技巧相关推荐

  1. css鼠标拖拉卡顿_vue中解决拖拽改变存在iframe的div大小时卡顿问题

    写在最前 针对于在vue中实现拖拽改变两左右个div大小的方式,请查看上一篇文章<vue中实现拖动调整左右两侧div的宽度>.此文章主要针对于实际应用中需要拖拽改变大小的组件中使用ifra ...

  2. css鼠标拖拉卡顿_浅谈CSS3 动画卡顿解决方案

    为什么会卡顿? 有一个前提必须要提,前端开发者们都知道,浏览器是单线程运行的.但是我们要明确以下几个概念:单线程,主线程和合成线程. 虽然说浏览器执行js是单线程执行(注意,是执行,并不是说浏览器只有 ...

  3. css鼠标拖拉卡顿_JavaScript实现元素拖动性能优化

    前言:前几天没事干写了个小网站,打算用原生的javascript实现元素的拖动,但是事情并没有想象的那么顺利,首先是实现了拖动的元素卡的不能再卡,简直不能够,上图~~ 看见没?这就是效果,简直让人欲哭 ...

  4. css鼠标拖拉卡顿_在jQuery中拖动Div – 当鼠标缓慢时就很好,但是在鼠标移动快的时候会失败...

    有两个问题.一个是你在鼠标离开元素时取消拖动,你不想这样做.第二个是mousemove只是在盒子上,一旦光标开箱即可,不再执行mousemove.您可以存储要拖动的元素,然后将mousemove添加到 ...

  5. css鼠标拖拉卡顿_详解overflow-scrolling解决滚动卡顿问题

    前言 如果你对某个div或模块使用了overflow: scroll属性,在iOS系统的手机上浏览时,则会出现明显的卡顿现象.但是在android系统的手机上则不会出现该问题. 解决方法 以下代码可解 ...

  6. 牛笔了!字节跳动大佬整理:CSS 核心知识(万字长文,值得收藏!)

    本篇文章围绕了 CSS 的核心知识点和项目中常见的需求来展开.虽然行文偏长,但较基础,适合初级中级前端阅读,阅读的时候请适当跳过已经掌握的部分. 这篇文章断断续续写了比较久,也参考了许多优秀的文章,但 ...

  7. C# 解决datagridview控件显示大量数据拖拉卡顿问题

    问题描述: 由于在使用SQL查询大量的数据并一次显示到dataGridView控件,出现拖拉的时候卡顿. 解决方法: 1.首先分页. 2.其次把显示控件设置双buffer. 解决过程如下: 1.设置d ...

  8. css鼠标经过table文字变色,有没有可能用css实现当table被鼠标hover的时候,table列变色?...

    正常情况下,table上鼠标hover,我们可以实现tr行变色,那列呢?有没有可能实现列变色? 可以的.演示地址 http://codepen.io/rainyjune/p- 代码来自: https: ...

  9. 45个值得收藏的 CSS 形状

    CSS能够生成各种形状.正方形和矩形很容易,因为它们是 web 的自然形状.添加宽度和高度,就得到了所需的精确大小的矩形.添加边框半径,你就可以把这个形状变成圆形,足够多的边框半径,你就可以把这些矩形 ...

最新文章

  1. Sublime Text 3 常用插件以及安装方法(转)
  2. swagger怎么扫描多个包_Swagger快速入门
  3. C语言程序设计第三次作业——选择结构(1)
  4. 基于小波变换到图像融合
  5. Java进阶:ReentrantLock和Condition基本使用
  6. java usc2短信编码_手机短信PDU编码与解码
  7. VS2015中DataGridView的DataGridViewComBoboxCell列值无效及数据绑定错误的解决方法
  8. 快速排序算法的简短描述
  9. js -- 时间转年月日
  10. LeetCode 1451. 重新排列句子中的单词(桶排序)
  11. 自定义一个ImageSwitcher
  12. 【数据结构笔记07】不带头结点链表实现多项式相加、相乘
  13. 提取MapInfo地图数据中的空间数据解决方案
  14. 图像处理:根据像素坐标及像素尺寸大小裁剪遥感影像
  15. 【lidar】单目深度估计与伪雷达点云、可视化
  16. CSFB和SRVCC概念解释
  17. 支付宝新人专享福利有哪些?支付宝新人专属红包、支付宝新人专区
  18. 第八届 蓝桥杯 省赛 java B
  19. 【C语言进阶】字符串函数模拟实现
  20. Cookie是什么及用法详解

热门文章

  1. jquery新版本旧版本之间的坑
  2. $(obj).each 和 $.each() 区别
  3. 使用SharedPreference保存用户数据的步骤
  4. Win32中GDI+应用(一)
  5. 【数据结构】DFS 代码模板
  6. Win10验证USB Audio MIC(三)
  7. Android SurfaceFlinger 学习之路(五)----VSync 工作原理
  8. android sepolicy报错解决
  9. 我眼中的Android Framework
  10. 毕业5年决定人的一生-- 大家千万不要错过这篇文章