惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
H
Hacker News: Front Page
P
Palo Alto Networks Blog
T
ThreatConnect
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
T
True Tiger Recordings
P
Privacy & Cybersecurity Law Blog
B
Blog
IT之家
IT之家
Last Week in AI
Last Week in AI
F
Full Disclosure
Hacker News: Ask HN
Hacker News: Ask HN
C
Comments on: Blog
Microsoft Azure Blog
Microsoft Azure Blog
C
Cybersecurity and Infrastructure Security Agency CISA
Microsoft Security Blog
Microsoft Security Blog
博客园 - 【当耐特】
N
News and Events Feed by Topic
NISL@THU
NISL@THU
腾讯CDC
雷峰网
雷峰网
Security Latest
Security Latest
李成银的技术随笔
M
Microsoft Research Blog - Microsoft Research
L
LangChain Blog
L
Lohrmann on Cybersecurity
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Check Point Blog
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
博客园 - Franky
N
News | PayPal Newsroom
V
V2EX
A
About on SuperTechFans
The Register - Security
The Register - Security
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google Online Security Blog
Google Online Security Blog
MyScale Blog
MyScale Blog
Cisco Talos Blog
Cisco Talos Blog
Vercel News
Vercel News
WordPress大学
WordPress大学
C
Cyber Attacks, Cyber Crime and Cyber Security
The Hacker News
The Hacker News
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
爱范儿
爱范儿
A
Arctic Wolf
L
LINUX DO - 最新话题
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

GeekPlux

一代人的博客,一代人的青春注脚 那些年我打过的日结工 来美国的两年后 2023 一蓑烟雨 在美国拥有一辆 Tesla 的成本 我的 Workspaces 十年进化史 How to Sync Logseq Plugins, Themes and Settings Across Multiple Devices Setting Up Umami as Your Google Analytics Alternative: A Step-by-Step Guide 迁移豆瓣读书记录到 goodreads Enhance Your Internet Privacy in 2023 Refactor your blog comments system with Webmention.io 来美国之后,如何快速安顿下来 Three Levels of Information Perception 疫情三年 与人聊天的美好 我获取信息的方法 2022 版 我是如何学会编程的 Legacy code best practice: how to take over an existing project smoothly 2020 恍如隔世 接外包的一些坑和小技巧 论交友 往返香港隔离指南 即将失明,还能继续做程序员吗 小谈我对新技术的态度 How to use tailwindcss with AMP in a Next.js project 远程工作如何提高效率 复式记账、财报、量化与图论 我为什么从阿里巴巴离职 2019 柳暗花明 YouTube 观看历史数据分析 投资被动型指数基金正在造成下一次金融泡沫? 三种主流的网赚套利,躺着赚钱? 色盲的世界 我是如何管理 21 张信用卡的 薅羊毛的最大意义:保持对规则的敏感度 来香港的两个月 数据可视化技术实现的关键点 不需要扫描仪,数字化归档自己的文件 如何找到时薪 80 美元的远程工作(二) 如何找到时薪 80 美元的远程工作(一) 如何打造真正的简历 浅思图数据可视化 舍本逐末的学习方式 给想转行作程序员的人泼一盆冷水 算法优化人生之 —— 调度算法 杭州最适合闲来溜达的几条路线 2018 平淡无奇 突闻金庸先生逝世有感 十年博客折腾历史 数据可视化之 Sankey 桑基图的实现 研究生生涯总结 如何在不规则多边形内均匀撒点的算法 Web 前端中的增强现实(AR)开发技术 参加 Google Summer of Code 的体验 netjsongraph.js – Google Summer of Code (GSoC) 2017 summary 如何在 GitHub 上获得数百 stars Markvis - 在 markdown 中生成可视化图表 D3 force layout and WebGL integration 文本数据可视化(下)——一图胜千言 文本数据可视化(上)——从 Wordle 谈起 我获取信息的渠道 数据可视化基础——视觉编码 数据可视化基础——数据模型 数据可视化基础——可视化流程 为什么要用 Emacs Vega-Lite: A Grammar of Interactive Graphics 如何搭建一个私人网盘 如何阅读一篇学术论文 超过十个人的微信群根本没有价值 毕业后的两年 建立索引式的学习方法 为什么我喜欢写代码 写文章的小技巧 为什么文章写得好的人都很厉害 人总要有点盲目的自信 如何管理好自己的密码 Backbone View 之间通信的三种方式 Vim - 适合自己的,才是最好的 轻松玩转 Ukulele 告别社交网络有多难 双拼学习记 CoffeeScript 编码风格指南(译) CoffeeScript 笔记 CSS 最核心的几个概念 响应式设计简易指南(译) 初识 TDD Collapsing margins——合并的外边距 菜鸟级 Mac 配置(二) 菜鸟级 Mac 配置(一) Goodbye,我的大学 如何新建一个 Cocos2d-x 项目 Windows8.1 下 Cocos2d-x 环境搭建 Android 开发如何入门 如何绑定独立域名 写博客就用 FarBox 尝试改变微信公众账号消息的推送方式 情似流水 操作系统总结——存储器管理 操作系统总结——处理机管理 操作系统总结——引论
CSS 编写原则
GeekPlux · 2014-02-20 · via GeekPlux

原文地址:https://geekplux.com/2014/02/20/css_written_principles

CSS 写的好可以让网页瞬间高大上,但是再高大上的网站如果效率很低也不行,尤其是在近几年「用户体验」这个词烂大街以后。前两天自己写了几个页面的 CSS,顺便拜读了很多关于 CSS 如何写的更好的文章,现在动手总结一下。

权重

CSS 中我个人觉得权重是个很需要掌握的概念。它决定哪一条样式将被应用在元素上,哪一条样式将被覆盖掉。众所周知,CSS 选择器,最基本的有三种:

  • id 选择器
  • class 选择器
  • 标签选择器

还有一种内联样式( inline-style ),是指直接在 HTML 代码中添加 CSS 样式。以上四种的权重顺序是:内联样式(1000) > id 选择器(100) > class 选择器(10) > 标签选择器(1)。括号内分别是它们的权重值!。举个栗子:

<span style="color : #fff;" id="example" class="demo">栗子</span>
#example {color: #000;}
.dome {color: red;}
span {color: blue;}

如果只有第四句来定义样式,则这个<span>是蓝色的,如果加上第三条语句,则变成了红色,第四句被覆盖掉了。如果用第二句,则变为黑色,第三句即被覆盖,以此类推如果用内联样式则<span>变成白色了。

像我这样的菜鸟刚开始滥用各类选择器,往往会出现想覆盖父元素样式的时候覆盖不了的情况,熟不知要想覆盖,必须让这条语句的权重值大于父元素(具体可以参考这篇文章你应该知道的一些事情——CSS 权重)。

尽量不要用 id 选择器

由于 id 选择器权重值过大的原因,我们要尽量少用它(内联样式估计没人会用了吧)。

<div id="example" class="parent">
    <span class="son"></span>
</div>

如果你使用 id 选择器

#example span {background-color: blue;}

则再写

.son {background-color: red;}

就没用了,甚至

.parent .son {background-color: red;}

都没用。你必须用:

#example .son {background-color: red;}

才能再改变它的背景色。这样远不如只用一个 class 轻松写意。尤其是#example 下面层级多的话,代码就会越写越长,可见少使用 id,多用 class 才是正道。而且 id 只能用一次,class 可以重复使用。

尽量不要多层级的选择器

当 CSS 写到后来,你可能会发现经常有类似这样的一长串代码出现:

#example .content .right .tag span {color: blue;}

这主要还是因为你没有搞清权重的原因。每次你想为子元素重新定义样式时都要有个权重值大于父元素的一大串选择器。这样的代码不仅你看起来痛苦,浏览器看起来也痛苦(原因可参考这篇文章【高性能前端 2】高性能 CSS)。

所以后代选择器不仅性能低下而且代码很脆弱:HTML 代码和 CSS 代码严重耦合,HTML 代码结构发生变化时,CSS 也得修改,自己改起来都痛苦,更别说万一将来有人来接盘你的代码……你考虑过他的感受么 T_T。还是那句话,用 class,最多两三层选择器就搞定了!

其实还有个终极神器!importants。只要在样式语句后面加上这个就能覆盖之前之后的一切样式!这意味着你再想把它覆盖是不可能的。当你都逼到用这个神器的时候,说明你的代码实在写的不敢恭维……你一定会有更好的解决方式的,所以尽量不要用!importants

精简

精简你的 CSS 代码可以提升你编写的速度,还能让代码看起来整洁、一目了然,节省时间和空间。

使用复合语法

尽量使用复合语法:

// 糟糕的写法
.someclass {
    background: #000;
    background-image: url(../imgs/carrot.png);
    background-position: bottom;
    background-repeat: repeat-x;
}

// 好的写法
.someclass {
    background: #000 url(../imgs/carrot.png) repeat-x bottom;
}

类似的还有paddingmarginfontborder等。用复合语法可以精简代码,一目了然。

减少重复

  • 利用 CSS 继承

如果页面中父元素的多个子元素使用相同的样式,那最好把他们相同的样式定义在其父元素上,让它们继承这些 CSS 样式。

// 糟糕的写法
.example li {font-family:Georgia, serif;}
.example p {font-family:Georgia, serif;}
.example h1 {font-family:Georgia, serif;}

// 好的写法
.example {font-family:Georgia, serif;}
  • 利用分组选择器
// 糟糕的写法
.someclass {
    color: red;
    background: blue;
    font-size: 16px;
}

.otherclass {
    color: red;
    background: blue;
    font-size: 8px;
}

// 好的写法
.someclass, .otherclass {
    color: red;
    background: blue;
}

.someclass {
    font-size: 16px;
}

.otherclass {
    font-size: 8px;
}

移除没用的样式

移除无匹配的样式,有两个好处:

第一,删除无用的样式后可以缩减样式文件的体积,加快资源下载速度;

第二,对于浏览器而言,所有的样式规则的都会被解析后索引起来,即使是当前页面无匹配的规则。移除无匹配的规则,减少索引项,加快浏览器查找速度;

格式

命名很重要

程序猿最讨厌的事已经不是写文档了,而是命名。好的命名可以让你「见名思义」,不写注释也可以读懂;坏的命名会让你抓狂,你不得不用 ctrl+F 匹配它们……我还发现很多人都是根据 HTML 代码的结构去命名,如

#header、 .content、 .left、 .right

等等,这些并没有实际的意义,当 HTML 越来越复杂的时候,或者新人来接手的时候,就会时常摸不着头脑,难以调试和维护。所以我个人觉得应该多用具有实际意义的、可以见名思义的 class 命名。

好看一点

代码的易读性和易维护性成正比。

// 糟糕的写法
.someclass-a, .someclass-b, .someclass-c, .someclass-d {
 ...
}

// 好的写法
.someclass-a,
.someclass-b,
.someclass-c,
.someclass-d {
 ...
}

// 更好看一点
.someclass {
    background-image:
        linear-gradient(#000, #ccc),
        linear-gradient(#ccc, #ddd);
    box-shadow:
        2px 2px 2px #000,
        1px 4px 1px 1px #ddd inset;
}

其他

  • 注释:程序猿最讨厌的四件事:写注释、写文档、别人不写注释、别人不写文档……
  • 单位: 到底是用px还是em -->CSS 文字大小单位 PX、EM、PT
  • 兼容: IE 你到底要闹哪样~`

以下是大牛总结的一些 CSS 技巧:

学习 CSS:

手册:

工具: