CSS(全称 Cascading Style Sheets,层叠样式表)为开发人员提供声明式的样式语言,是前端必备的技能之一,基于互联网上全面的资料和简单易懂的语法,CSS 非常易于学习,但其知识点广泛且分散,很难做到精通,在我们日常开发中,常常忽视了 CSS 代码的质量,很容易写出杂乱无章的 CSS 文件。

代码优化建议

1. 使用缩写属性精简代码

适用于:margin、padding、border、font、background 等

但并非所有情况下都必须缩写,因为当一个属性的值缩写时,总是会将所有项都设置一遍,而有时候我们不希望设置值里的某些项,这时候需要开发者自行判断。

.content{
// 缩写前
margin-right:16px;
margin-top:30px;
width:184px;
height:32px;
background:#FFFFFF
margin-left:10px;
}
.content{
//缩写后
margin:30px 16px 0 10px;
width:184px;
height:32px;
background:#FFFFFF
}

2. 合并选择器

使用 "," 连接多个选择器定义公用属性,不仅能增加可读性,还能减小 css 文件大小。

.content{
display: flex;
.flush,
.include,
.underline{
margin-right: 12px;
padding: 3px 6px;
border: 1px solid #a96161;
font-size: 12px;
color: #412c2c;
}
.flush{
color: #FFFFFF;
background-color: aqua;
}
.include{
color: #5d3e3e;
background-color: #657f7f;
}
.underline{
color: #7da938;
background-color: #7c6a6a;
}
}

3. 使用更语义化的单词命名 class

命名的时候以 “在你之后开发的人不会产生疑惑” 为目标 如下

.curr{
color:#FFFFFF;
background:red;
}
.future{
background:#9f6262;
}
// curr 是啥? future又是啥? ️ .current-count{
color:#FFFFFF;
background:red;
}
.future-count{
background:#9f6262;
}

4. 属性声明顺序

选择器中属性数量较多时,将相关的属性声明放在一起,并按以下顺序排列:

  1. 定位相关,如 position、top/bottom/left/right、z-index 等
  2. 盒模型相关,如 display、float、margin、width/height 等
  3. 排版相关,如 font、color、line-height 等
  4. 可视相关,如 background、color 等
  5. 其他,如 opacity、animation 等

建议:在属性数量较多时可以参考这 5 个类别归类排列。

  /* 定位相关 */
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
z-index: 100;
/* 盒模型相关 */
display: block;
float: right;
width: 100px;
height: 100px;
/* 排版相关 */
font: normal 13px "Helvetica Neue", sans-serif;
line-height: 1.5;
color: #333;
text-align: center;
/* 可视相关 */
background-color: #f5f5f5;
border: 1px solid #e5e5e5;
border-radius: 3px;
/* 其他 */
opacity: 1;

5. 使用 & 符号引用父选择器

& 是 Sass 和 Less 中提供的语法糖,用于表示对父选择器的引用

优点:非常适合用于编写组件的样式,减少了很多重复单词

缺点:从 HTML 的 class name 中寻找对应样式的成本增加

.first {
.first-title {/* styles */}
.first-title:after {/* styles */}
.first-content {/* styles */}
}
/* 用&引用来优化代码 */
.first {
&-title {
/* styles */
&:after {/* styles */}
}
&-content {/* styles */}
}

Sass .vs. Less?

预处理器将 CSS 从声明语言转换成一门编程语言

可嵌套的语法增加了样式文件的可读性和可维护性

变量与混合特性能够减少很多重复的样式声明

Less 更像 CSS,易于上手,能够从 CSS 平滑过渡;Sass 的缩进语法接受度因人而异,Sass3.0 中提出了兼容 CSS 的 Scss,用户可以选择使用 Sass 或 Scss。

当项目 CSS 中需要涉及复杂逻辑时,Sass/Scss 更适合,Sass 提供了更强大、更接近编程语言的 @function、@if/@else、@while 等语法;当项目的样式复杂度不高时,选 Sass 或 Less 都可以。 (下面是一个 Less 和 Scss 语法对比例子)

// Less
.mixin( @count )when( @count > 0 ){
background-color: black;
}
.mixin( @count )when( @count <= 0 ){
background-color: white;
}
.tag {
.mixin(100);
}
// Scss
@function selectCount($count) {
@if $count > 0 {
return black;
}
@else {
return white;
}
}
.tag {
background-color: checkCount(100);
}

综上,CSS 作为一门前端必备的基础技能,具有许多原生的痛点。近年来,开发者们也在源源不断地提出了不同的优化方案,我们在日常关注 Vue、React、NodeJS、性能优化等热门前端话题的时候,也不要忘了好好写 CSS 代码呀~

内容来源:京东云开发者社区 [https://www.jdcloud.com/]

如何优雅的写 css 代码的更多相关文章

  1. Less:优雅的写CSS代码

    css是不能够定义变量的,也不能嵌套.它没有编程语言的特性.在项目开发中,常常发现有很多css代码是相同的,但我们通常都是复制然后粘贴. 举个例子:假设h5应用里主题色是#FF3A6D,可能用于文字或 ...

  2. 如何优雅的写C++代码(一)

    // get the greatest power of two that is a divisor of n: return n&-n; // swap two integers a and ...

  3. CSS代码重构与优化之路

    作者:@狼狼的蓝胖子 网址:http://www.cnblogs.com/lrzw32/p/5100745.html 写CSS的同学们往往会体会到,随着项目规模的增加,项目中的CSS代码也会越来越多, ...

  4. CSS代码重构

    CSS代码重构的目的 我们写CSS代码时,不仅仅只是完成页面设计的效果,还应该让CSS代码易于管理,维护.我们对CSS代码重构主要有两个目的:1.提高代码性能2.提高代码的可维护性 提高代码性能 提高 ...

  5. 高效的CSS代码(2)

    ——阅读笔记,欢迎纠错^_^ 内容比较零散..... 1.让浮动元素的父容器根据元素的高度而自适应高度的方法: <div class="clearfix"><di ...

  6. 既然写CSS很容易,那为什么大家还是把CSS写的那么烂呢?

    在众成翻译上看到一篇不错的css文章,所以就给转过来. 在你开始阅读这篇文章之前,一定要做好心理准备.因为我写的 90% 都是在发牢骚,只有最后大概 10% 介绍 CSS 技巧之最佳实践.提前给你们打 ...

  7. CSS代码重构与优化

    CSS代码重构的基本方法 前面说到了CSS代码重构的目的,现在我们来说说一些如何达到这些目的的一些基本方法,这些方法都是易于理解,容易实施的一些手段,大家平时可能也不知不觉地在使用它. 提高CSS性能 ...

  8. CSS代码重构与优化之路(转)

    CSS代码重构与优化之路   阅读目录 CSS代码重构的目的 CSS代码重构的基本方法 CSS方法论 我自己总结的方法 写CSS的同学们往往会体会到,随着项目规模的增加,项目中的CSS代码也会越来越多 ...

  9. 如何写出优雅的CSS代码 ?(转)

    对于同样的项目或者是一个网页,尽管最终每个前端开发工程师都可以实现相同的效果,但是他们所写的代码一定是不同的.有的优雅,看起来清晰易懂,代码具有可拓展性,这样的代码有利于团队合作和后期的维护:而有的混 ...

  10. 如何写出优雅的css代码 ?

    如何写出优雅的css代码 ? 对于同样的项目或者是一个网页,尽管最终每个前端开发工程师都可以实现相同的效果,但是他们所写的代码一定是不同的.有的优雅,看起来清晰易懂,代码具有可拓展性,这样的代码有利于 ...

随机推荐

  1. 加快云原生技术转型, 智能调度登陆华为云DevOps: 增速,节源

    摘要:本文将探讨智能资源调度在华为云DevOps上的应用与实践. 本文分享自华为云社区<加快云原生技术转型, 智能调度登陆华为云DevOps: 增速,节源>,作者: DevAI. 1. 背 ...

  2. java并发编程(2):Java多线程-java.util.concurrent高级工具

    高级多线程控制类 Java1.5提供了一个非常高效实用的多线程包:java.util.concurrent, 提供了大量高级工具,可以帮助开发者编写高效.易维护.结构清晰的Java多线程程序. Thr ...

  3. Koa、koa-router、koa-jwt 鉴权详解:分模块鉴权实践总结

    首先看koa-router koa-router use 熟悉Koa的同学都知道use是用来注册中间件的方法,相比较Koa中的全局中间件,koa-router的中间件则是路由级别的. koa-rout ...

  4. 结MySQL 的一些知识点:MySQL 安装

    MySQL 安装 所有平台的 MySQL 下载地址为: MySQL 下载 . 挑选你需要的 MySQL Community Server 版本及对应的平台. **注意:**安装过程我们需要通过开启管理 ...

  5. 神经网络优化篇:详解动量梯度下降法(Gradient descent with Momentum)

    动量梯度下降法 还有一种算法叫做Momentum,或者叫做动量梯度下降法,运行速度几乎总是快于标准的梯度下降算法,简而言之,基本的想法就是计算梯度的指数加权平均数,并利用该梯度更新的权重. 例如,如果 ...

  6. 面对科技公司的制裁,俄罗斯放出封印7年的神兽:RuTracker

    大家好,我是DD! 最近俄乌冲突引发的科技公司站队,Oracle.微软.三星等全球知名科技公司都开始对俄罗斯实施制裁与封锁.就连崇尚自由的开源社区GitHub也发文会严格限制俄罗斯获得维持其咄咄逼人的 ...

  7. 【Qt Libraries】QUrl 的基本使用方法

    参考博客: https://www.cnblogs.com/liushui-sky/p/10892097.html https://www.cnblogs.com/ShineLeBlog/p/1495 ...

  8. vivo 悟空活动中台 - 栅格布局方案

    本文首发于 vivo互联网技术 微信公众号 链接: https://mp.weixin.qq.com/s/6O0CH0U_WE1YkPK75m-jDQ作者:悟空中台研发团队 一.背景 今天来给大家分享 ...

  9. 大四上 | 计算机综合课设(OS)· 答辩经验帖

    课设代码 repo 被问了如下问题: 我们的 OS 中是否有 idle 进程. 背景:如果所有进程都被 kill 掉了,那么 os 就会陷入死循环.即使再发生需要响应的事情,比如希望再创建个进程 或者 ...

  10. Git | git branch 分支操作

    假设我们已经有了稳定的代码,现在我想整一些花活.比较安全的一个方式是,在新的分支上整活. 新建 vga 分支:git branch vga,然后切换到 vga 分支:git switch vga,或者 ...