目录
目录
术语
规则声明
选择器
属性
CSS
格式
Bad
Good
注释
OOCSS 和 BEM
示例
Adorable 2BR in the sunny Mission
ID 选择器
JavaScript 钩子
边框
Sass
语法
属性声明的排序
变量
Mixins
扩展指令
嵌套选择器
请不要让嵌套选择器的深度超过 3 层!
首页 web前端 html教程 Airbnb CSS / Sass 指南_html/css_WEB-ITnose

Airbnb CSS / Sass 指南_html/css_WEB-ITnose

Jun 21, 2016 am 08:51 AM

用更合理的方式写 CSS 和 Sass

译文 GitHub 链接,欢迎各位指正。

翻译自 Airbnb CSS / Sass Styleguide

目录

术语

规则声明

我们把一个(或一组)选择器和一组属性称之为 “规则声明”。举个例子:

.listing {  font-size: 18px;  line-height: 1.2;}
登录后复制

选择器

在规则声明中,“选择器” 负责选取 DOM 树中的元素,这些元素将被定义的属性所修饰。选择器可以匹配 HTML 元素,也可以匹配一个元素的类名、ID, 或者元素拥有的属性。以下是选择器的例子:

.my-element-class {  /* ... */}[aria-hidden] {  /* ... */}
登录后复制

属性

最后,属性决定了规则声明里被选择的元素将得到何种样式。属性以键值对形式存在,一个规则声明可以包含一或多个属性定义。以下是属性定义的例子:

/* some selector */ {  background: #f1f1f1;  color: #333;}
登录后复制

CSS

格式

  • 使用 2 个空格作为缩进。
  • 类名建议使用破折号代替驼峰法。如果你使用 BEM,也可以使用下划线(参见下面的)。
  • 不要使用 ID 选择器。
  • 在一个规则声明中应用了多个选择器时,每个选择器独占一行。
  • 在规则声明的左大括号 {前加上一个空格。
  • 在属性的冒号 :后面加上一个空格,前面不加空格。
  • 规则声明的右大括号 }独占一行。
  • 规则声明之间用空行分隔开。

Bad

.avatar{    border-radius:50%;    border:2px solid white; }.no, .nope, .not_good {    // ...}#lol-no {  // ...}
登录后复制

Good

.avatar {  border-radius: 50%;  border: 2px solid white;}.one,.selector,.per-line {  // ...}
登录后复制

注释

  • 建议使用行注释 (在 Sass 中是 //) 代替块注释。
  • 建议注释独占一行。避免行末注释。
  • 给没有自注释的代码写上详细说明,比如:
    • 为什么用到了 z-index
    • 兼容性处理或者针对特定浏览器的 hack

OOCSS 和 BEM

出于以下原因,我们鼓励使用 OOCSS 和 BEM 的某种组合:

  • 可以帮助我们理清 CSS 和 HTML 之间清晰且严谨的关系。
  • 可以帮助我们创建出可重用、易装配的组件。
  • 可以减少嵌套,降低特定性。
  • 可以帮助我们创建出可扩展的样式表。

OOCSS,也就是 “Object Oriented CSS(面向对象的CSS)”,是一种写 CSS 的方法,其思想就是鼓励你把样式表看作“对象”的集合:创建可重用性、可重复性的代码段让你可以在整个网站中多次使用。

参考资料:

  • Nicole Sullivan 的 OOCSS wiki
  • Smashing Magazine 的 Introduction to OOCSS

BEM,也就是 “Block-Element-Modifier”,是一种用于 HTML 和 CSS 类名的_命名约定_。BEM 最初是由 Yandex 提出的,要知道他们拥有巨大的代码库和可伸缩性,BEM 就是为此而生的,并且可以作为一套遵循 OOCSS 的参考指导规范。

  • CSS Trick 的 BEM 101
  • Harry Roberts 的 introduction to BEM

示例

<article class="listing-card listing-card--featured">  <h1 id="Adorable-BR-in-the-sunny-Mission">Adorable 2BR in the sunny Mission</h1>  <div class="listing-card__content">    <p>Vestibulum id ligula porta felis euismod semper.</p>  </div></article>
登录后复制

.listing-card { }.listing-card--featured { }.listing-card__title { }.listing-card__content { }
登录后复制

  • .listing-card是一个块(block),表示高层次的组件。
  • .listing-card__title是一个元素(element),它属于 .listing-card的一部分,因此块是由元素组成的。
  • .listing-card--featured是一个修饰符(modifier),表示这个块与 .listing-card有着不同的状态或者变化。

ID 选择器

在 CSS 中,虽然可以通过 ID 选择元素,但大家通常都会把这种方式列为反面教材。ID 选择器给你的规则声明带来了不必要的高 优先级,而且 ID 选择器是不可重用的。

想要了解关于这个主题的更多内容,参见 CSS Wizardry 的文章,文章中有关于如何处理优先级的内容。

JavaScript 钩子

避免在 CSS 和 JavaScript 中绑定相同的类。否则开发者在重构时通常会出现以下情况:轻则浪费时间在对照查找每个要改变的类,重则因为害怕破坏功能而不敢作出更改。

我们推荐在创建用于特定 JavaScript 的类名时,添加 .js-前缀:

<button class="btn btn-primary js-request-to-book">Request to Book</button>
登录后复制

边框

在定义无边框样式时,使用 0代替 none。

Bad

.foo {  border: none;}
登录后复制

Good

.foo {  border: 0;}
登录后复制

Sass

语法

  • 使用 .scss的语法,不使用 .sass原本的语法。
  • CSS 和 @include声明按照以下逻辑排序(参见下文)

属性声明的排序

  1. 属性声明

    首先列出除去 @include和嵌套选择器之外的所有属性声明。

    scss .btn-green { background: green; font-weight: bold; // ... }

  2. @include声明

    紧随后面的是 @include,这样可以使得整个选择器的可读性更高。

    scss .btn-green { background: green; font-weight: bold; @include transition(background 0.5s ease); // ... }

  3. 嵌套选择器

    _如果有必要_用到嵌套选择器,把它们放到最后,在规则声明和嵌套选择器之间要加上空白,相邻嵌套选择器之间也要加上空白。嵌套选择器中的内容也要遵循上述指引。

    ```scss .btn { background: green; font-weight: bold; @include transition(background 0.5s ease);

    .icon { margin-right: 10px; } } ```

变量

变量名应使用破折号(例如 $my-variable)代替 camelCased 和 snake_cased 风格。对于仅用在当前文件的变量,可以在变量名之前添加下划线前缀(例如 $_my-variable)。

Mixins

为了让代码遵循 DRY 原则(Don’t Repeat Yourself)、增强清晰性或抽象化复杂性,应该使用 mixin,这与那些命名良好的函数的作用是异曲同工的。虽然 mixin 可以不接收参数,但要注意,假如你不压缩负载(比如通过 gzip),这样会导致最终的样式包含不必要的代码重复。

扩展指令

应避免使用 @extend指令,因为它并不直观,而且具有潜在风险,特别是用在嵌套选择器的时候。即便是在顶层占位符选择器使用扩展,如果选择器的顺序最终会改变,也可能会导致问题。(比如,如果它们存在于其他文件,而加载顺序发生了变化)。其实,使用 @extend 所获得的大部分优化效果,gzip 压缩已经帮助你做到了,因此你只需要通过 mixin 让样式表更符合 DRY 原则就足够了。

嵌套选择器

请不要让嵌套选择器的深度超过 3 层!

.page-container {  .content {    .profile {      // STOP!    }  }}
登录后复制

当遇到以上情况的时候,你也许是这样写 CSS 的:

  • 与 HTML 强耦合的(也是脆弱的) 或者
  • 过于具体(强大) 或者
  • 没有重用

再说一遍: 永远不要嵌套 ID 选择器!

如果你始终坚持要使用 ID 选择器(劝你三思),那也不应该嵌套它们。如果你正打算这么做,你需要先重新检查你的标签,或者指明原因。如果你想要写出风格良好的 HTML 和 CSS,你是 应该这样做的。

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1663
14
CakePHP 教程
1420
52
Laravel 教程
1313
25
PHP教程
1266
29
C# 教程
1237
24
了解HTML,CSS和JavaScript:初学者指南 了解HTML,CSS和JavaScript:初学者指南 Apr 12, 2025 am 12:02 AM

WebDevelovermentReliesonHtml,CSS和JavaScript:1)HTMLStructuresContent,2)CSSStyleSIT和3)JavaScriptAddSstractivity,形成thebasisofmodernWebemodernWebExexperiences。

HTML,CSS和JavaScript的角色:核心职责 HTML,CSS和JavaScript的角色:核心职责 Apr 08, 2025 pm 07:05 PM

HTML定义网页结构,CSS负责样式和布局,JavaScript赋予动态交互。三者在网页开发中各司其职,共同构建丰富多彩的网站。

HTML,CSS和JavaScript:Web开发人员的基本工具 HTML,CSS和JavaScript:Web开发人员的基本工具 Apr 09, 2025 am 12:12 AM

HTML、CSS和JavaScript是Web开发的三大支柱。1.HTML定义网页结构,使用标签如、等。2.CSS控制网页样式,使用选择器和属性如color、font-size等。3.JavaScript实现动态效果和交互,通过事件监听和DOM操作。

HTML:结构,CSS:样式,JavaScript:行为 HTML:结构,CSS:样式,JavaScript:行为 Apr 18, 2025 am 12:09 AM

HTML、CSS和JavaScript在Web开发中的作用分别是:1.HTML定义网页结构,2.CSS控制网页样式,3.JavaScript添加动态行为。它们共同构建了现代网站的框架、美观和交互性。

HTML的未来:网络设计的发展和趋势 HTML的未来:网络设计的发展和趋势 Apr 17, 2025 am 12:12 AM

HTML的未来充满了无限可能。1)新功能和标准将包括更多的语义化标签和WebComponents的普及。2)网页设计趋势将继续向响应式和无障碍设计发展。3)性能优化将通过响应式图片加载和延迟加载技术提升用户体验。

HTML,CSS和JavaScript的未来:网络开发趋势 HTML,CSS和JavaScript的未来:网络开发趋势 Apr 19, 2025 am 12:02 AM

HTML的未来趋势是语义化和Web组件,CSS的未来趋势是CSS-in-JS和CSSHoudini,JavaScript的未来趋势是WebAssembly和Serverless。1.HTML的语义化提高可访问性和SEO效果,Web组件提升开发效率但需注意浏览器兼容性。2.CSS-in-JS增强样式管理灵活性但可能增大文件体积,CSSHoudini允许直接操作CSS渲染。3.WebAssembly优化浏览器应用性能但学习曲线陡,Serverless简化开发但需优化冷启动问题。

HTML与CSS vs. JavaScript:比较概述 HTML与CSS vs. JavaScript:比较概述 Apr 16, 2025 am 12:04 AM

HTML、CSS和JavaScript在网页开发中的角色分别是:HTML负责内容结构,CSS负责样式,JavaScript负责动态行为。1.HTML通过标签定义网页结构和内容,确保语义化。2.CSS通过选择器和属性控制网页样式,使其美观易读。3.JavaScript通过脚本控制网页行为,实现动态和交互功能。

HTML:建立网页的结构 HTML:建立网页的结构 Apr 14, 2025 am 12:14 AM

HTML是构建网页结构的基石。1.HTML定义内容结构和语义,使用、、等标签。2.提供语义化标记,如、、等,提升SEO效果。3.通过标签实现用户交互,需注意表单验证。4.使用、等高级元素结合JavaScript实现动态效果。5.常见错误包括标签未闭合和属性值未加引号,需使用验证工具。6.优化策略包括减少HTTP请求、压缩HTML、使用语义化标签等。

See all articles