찾다
웹 프론트엔드HTML 튜토리얼使用stylelint对CSS/Sass做代码审查_html/css_WEB-ITnose

对样式审查?很少人会这么做吧,但实际上开发者应该有这样的态度,尤其是不同团队多人开发时,这一点尤为重要。

在本文中,我将陈述两点:一是为什么我们需要对样式进行审查,二是如何将审查工具融合到整体的构建流程中(适用于 CSS,也适用于 Sass)。

简介

什么是代码审查

代码审查是一个检查代码是否符合编程规范以及查找代码错误的过程,如果要做个比喻,那么它就是编程语言的拼写检查工具。代码审查可以帮助独立开发者更好的维护代码,但它更大的能力是帮助团队维护代码。

为什么我们需要审查样式

对样式进行审查的原因有很多,比如它可以维护代码的一致性,解析代码中的错误,减少冗余代码等等。

下面让我们看几个示例:

.no-space-after-colon {    display:block;}           ⬆.no-semicolon {    position: relative ⬅}

代码审查工具可以有效指出上述代码中的不规范之处。在审查工具中规定代码的规范写法虽然不是必要的,但这种做法有助于维护代码的一致性。此外,在团体开发中彼此不熟悉,如果我看到上述的代码会感到很恼火。

.invalid-hex {    color: #FFF00G;}                ⬆

代码审查工具也可以指出无效的颜色值,抛出一个类型错误。如果疏漏了这种错误,往往会导致页面上严重的视觉错误。

.unnecessary-prefixes {    -webkit-border-radius: 5px;    -moz-border-radius: 5px;    border-radius: 5px;}

随着浏览器的升级换代,有一些 CSS3 属性的浏览器前缀已经没有意义了。代码审查工具可以指出这些无意义前缀,此外,将它和 Autoprefixer 搭配起来,可以更加有效。

.duplicate-rule {    display: block;    transition: opacity .2s;    color: #444;    background-color: #eee;    transition: background-color .4s; ⬅}

样式重复是一个常见的错误,就上面的代码而言,这里的 transition 值到底是 opacity 还是 background-color 呢?显而易见, background-color 会替代 opacity 。

代码审查是不是很有用呢?如果这还不够打动你,请继续阅读。

stylelint 简介

stylelint 是一个基于 Javascript 的代码审查工具,它易于扩展,支持最新的 CSS 语法,也理解类似 CSS 的语法。此外,因为它是基于 JavaScript,所以比起 Ruby 开发的 scss-lint 速度更快。

stylelint 是一个强大和现代的 CSS 审查工具,有助于开发者推行统一的代码规范,避免样式错误。

stylelint 由PostCSS 提供技术支持,所以它也可以理解 PostCSS 解析的语法,比如 SCSS。

PostCSS 是一个使用 JS 解析样式的插件集合,它可以用来审查 CSS 代码,也可以增强 CSS 的语法(比如变量和混合宏),还支持未来的 CSS 语法、行内图片等等。

PostCSS 的哲学是专注于处理一件事,并做到极致,目前它已经有了 200 多个插件,由于它们都是基于 JavaScript 编写的,所以运行速度非常快。

PostCSS 和 stylelint 就是我们接下来将要介绍的代码审查工具。

安装

stylelint 的强大之处就在于它非常灵活,无需花费过多的时间过滤各种规则,只需配置需要的规则即可完成 stylelint 的初始化。 stylelint 的配置文档 非常适用于初学者了解相关的审查规则。此外,他们还提供了一份 标准配置文件 用作参考。

在本文中,我将带领大家从一份更友好、简洁的配置开始。就我个人而言,我认为它比官方提供的配置文件更加灵活:

"rules": {  "block-no-empty": true,  "color-no-invalid-hex": true,  "declaration-colon-space-after": "always",  "declaration-colon-space-before": "never",  "function-comma-space-after": "always",  "function-url-quotes": "double",  "media-feature-colon-space-after": "always",  "media-feature-colon-space-before": "never",  "media-feature-name-no-vendor-prefix": true,  "max-empty-lines": 5,  "number-leading-zero": "never",  "number-no-trailing-zeros": true,  "property-no-vendor-prefix": true,  "rule-no-duplicate-properties": true,  "declaration-block-no-single-line": true,  "rule-trailing-semicolon": "always",  "selector-list-comma-space-before": "never",  "selector-list-comma-newline-after": "always",  "selector-no-id": true,  "string-quotes": "double",  "value-no-vendor-prefix": true}

最后,建议读一下 stylelint 的官方配置文档 ,在其基础上做一些个性化的设置。接下来,让我们将这些审查规则融入到构建流程中。

如何审查 CSS

首先,让我们先来审查 CSS 代码。配置审查工具的过程非常简单,你只需要安装 gulp-postcss / postcss-reporter 和 stylelint 即可:

npm install gulp-postcss postcss-reporter stylelint --save-dev

接下来是 gulp 的配置文件 gulpfile.js :

/** * Linting CSS stylesheets with Stylelint * http://www.creativenightly.com/2016/02/How-to-lint-your-css-with-stylelint/ */var gulp        = require('gulp');var postcss     = require('gulp-postcss');var reporter    = require('postcss-reporter');var stylelint   = require('stylelint');gulp.task("css-lint", function() {  // Stylelint config rules  var stylelintConfig = {    "rules": {      "block-no-empty": true,      "color-no-invalid-hex": true,      "declaration-colon-space-after": "always",      "declaration-colon-space-before": "never",      "function-comma-space-after": "always",      "function-url-quotes": "double",      "media-feature-colon-space-after": "always",      "media-feature-colon-space-before": "never",      "media-feature-name-no-vendor-prefix": true,      "max-empty-lines": 5,      "number-leading-zero": "never",      "number-no-trailing-zeros": true,      "property-no-vendor-prefix": true,      "rule-no-duplicate-properties": true,      "declaration-block-no-single-line": true,      "rule-trailing-semicolon": "always",      "selector-list-comma-space-before": "never",      "selector-list-comma-newline-after": "always",      "selector-no-id": true,      "string-quotes": "double",      "value-no-vendor-prefix": true    }  }  var processors = [    stylelint(stylelintConfig),    // Pretty reporting config    reporter({      clearMessages: true,      throwError: true    })  ];  return gulp.src(      // Stylesheet source:      ['app/assets/css/**/*.css',      // Ignore linting vendor assets:      // (Useful if you have bower components)      '!app/assets/css/vendor/**/*.css']    )    .pipe(postcss(processors));});

上面短短五十行代码包含了审查规则和文件路径,请确保资源路径与上面的代码相匹配。

更令人惊奇的是,只需改动一小段代码就可以同时支持 Sass,让我们来修改一下吧。

如何审查 Sass

使用 PostCSS 审查 Sass 代码非常简单,与审查 CSS 代码唯一不同的地方就在于,你需要让 PostCSS 识别 .scss 语法。这一问题可以通过安装 postcss-scss 插件来完成,安装插件后,修改一下配置文件:

npm install postcss-scss --save-dev

修改配置文件:

  //[...]  return gulp.src(      ['app/assets/css/**/*.css',      '!app/assets/css/vendor/**/*.css']    )    .pipe(postcss(processors), {syntax: syntax_scss}); ⬅});

以上就是 gulp 配置文件的全部内容了。总结起来,你需要安装以下工具:

npm install gulp-postcss postcss-reporter stylelint postcss-scss --save-dev
/** * Linting Sass stylesheets with Stylelint * http://www.creativenightly.com/2016/02/How-to-lint-your-css-with-stylelint/ */var gulp        = require('gulp');var postcss     = require('gulp-postcss');var reporter    = require('postcss-reporter');var syntax_scss = require('postcss-scss');var stylelint   = require('stylelint');gulp.task("scss-lint", function() {  // Stylelint config rules  var stylelintConfig = {    "rules": {      "block-no-empty": true,      "color-no-invalid-hex": true,      "declaration-colon-space-after": "always",      "declaration-colon-space-before": "never",      "function-comma-space-after": "always",      "function-url-quotes": "double",      "media-feature-colon-space-after": "always",      "media-feature-colon-space-before": "never",      "media-feature-name-no-vendor-prefix": true,      "max-empty-lines": 5,      "number-leading-zero": "never",      "number-no-trailing-zeros": true,      "property-no-vendor-prefix": true,      "rule-no-duplicate-properties": true,      "declaration-block-no-single-line": true,      "rule-trailing-semicolon": "always",      "selector-list-comma-space-before": "never",      "selector-list-comma-newline-after": "always",      "selector-no-id": true,      "string-quotes": "double",      "value-no-vendor-prefix": true    }  }  var processors = [    stylelint(stylelintConfig),    reporter({      clearMessages: true,      throwError: true    })  ];  return gulp.src(      ['app/assets/css/**/*.css',      // Ignore linting vendor assets      // Useful if you have bower components      '!app/assets/css/vendor/**/*.css']    )    .pipe(postcss(processors), {syntax: syntax_scss});});

如果你想了解如何使用插件扩展 stylelint,那么就请继续阅读后续内容

扩展 stylelint

和 PostCSS 一样,Stylelint 也可以通过插件进行扩展。接下来让我们通过一些实例学习如何使用审查工具改善代码的可读性和可维护性。

实战演练

话说有个产品经理新接了个 web app 的活,项目正处于紧张的开发中,为了减少一些开发时间,他决定增加一个特性来替代之前的一揽子方案,这个特性是这样的:给组件本身添加一个鼠标悬停时的 box-shadow 效果,同时给组件的内部的链接增加一个鼠标悬停样式。

下面是这个产品经理增加的代码段:

.component {  position: relative;  //[...]  &:hover { ⬅    box-shadow: 1px 1px 5px 0px rgba(0,0,0,0.75);    .component__child { ⬅      ul { ⬅        li { ⬅          a { ⬅            &:hover { ⬅              text-decoration: underline;            }          }        }      }    }  }}

真是惨不忍睹!

选择器嵌套是 Sass 最容易被误用的特性,合理使用它可以提高开发效率,滥用则会毁掉整个项目。嵌套往往是由偷懒引起的,这些代码往往难以阅读。上面的 &:hover{...} 的嵌套层级太深,很容易混淆其他开发者对这段代码的理解。最重要的是,这段嵌套在这里完全是没有必要的。

这就是上面的嵌套代码编译生成的 CSS:

.component:hover .component_child ul li a:hover {}/* What the heck is this?! */

如果后续接手项目的开发者想要覆盖这段级联样式,那真是大工程。所以有一点值得牢记,那就是除非你非常确定嵌套是必要的,否则不要使用它。

幸运的是,我们有插件来阻止这种情况的发生!我们可以安装 stylelint-statement-max-nesting-depth 插件,设置最大嵌套层级来避免过渡嵌套的现象:

npm install stylelint-statement-max-nesting-depth --save-dev

在 gulp 的排位置文件中增加 scss-lint 相关的任务信息:

gulp.task("scss-lint", function() {  var stylelintConfig = {    "plugins": [      "stylelint-statement-max-nesting-depth"    ],    "rules": {      //[...]      "statement-max-nesting-depth": [3, { countAtRules: false }],    }  }  //[..]});

为了增强团队的共建意识,我在这里将 limit 设置为了 3 。由于有嵌套层级的限制,所以产品经理就会来自 stylelint 的重构提示。产品经理没怎么细想,就改成了下面这样:

.component:hover {  box-shadow: 1px 1px 5px 0px rgba(0, 0, 0, 0.75);  .component__child {    ul {      li {        a:hover {          text-decoration: underline;        }      }    }  }  }

这个重构之后的版本看起来可读性好多了,但仍然有不少缺陷。事实上,上面代码中的嵌套是完全没有必要的。stylelint 可以检测出这一点,并会强制产品经理重新思考样式代码。

.component:hover {  box-shadow: 1px 1px 5px 0px rgba(0, 0, 0, 0.75);}.component__child {  a:hover {    text-decoration: underline;  }}  

现在,代码更加健壮了!stylelint 已经接受了代码,不会再提出异议了。虽然上面的代码没有问题,但我们其实可以做的更好。如果你希望严格要求团队的每一个成员,那么可以禁用嵌套,这会让团队成员,包括产品经理,更加严谨地编写代码。

.component:hover {  box-shadow: 1px 1px 5px 0px rgba(0, 0, 0, 0.75);}.component__link:hover {  text-decoration: underline;}

通过以上介绍和实战演练,希望我已经说服了你:样式审查是非常值得投入的一项流程。代码审查应该成为我们的朋友,只需投入一点时间,就可以收获代码整体的可读性、可维护性。

本文根据 @Scotty Vernon 的《 How to lint your Sass/CSS properly with Stylelint 》所译,整个译文带有我们自己的理解与思想,如果译得不好或有不对之处还请同行朋友指点。如需转载此译文,需注明英文出处: http://www.creativenightly.com/2016/02/How-to-lint-your-css-with-stylelint/ 。

南北

前端开发者,关注性能优化和动效设计,活跃于 Github @pinggod 、微博@ping4god 和博客 pinggod.com ,替身众多。如果你沉醉于 Kairosoft、午时三刻工作室的游戏,请来和我做朋友:)。

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
HTML : 구조, CSS : 스타일, 자바 스크립트 : 동작HTML : 구조, CSS : 스타일, 자바 스크립트 : 동작Apr 18, 2025 am 12:09 AM

웹 개발에서 HTML, CSS 및 JavaScript의 역할은 다음과 같습니다. 1. HTML은 웹 페이지 구조를 정의하고, 2. CSS는 웹 페이지 스타일을 제어하고 3. JavaScript는 동적 동작을 추가합니다. 그들은 함께 현대 웹 사이트의 프레임 워크, 미학 및 상호 작용을 구축합니다.

HTML의 미래 : 웹 디자인의 진화 및 트렌드HTML의 미래 : 웹 디자인의 진화 및 트렌드Apr 17, 2025 am 12:12 AM

HTML의 미래는 무한한 가능성으로 가득합니다. 1) 새로운 기능과 표준에는 더 많은 의미 론적 태그와 WebComponents의 인기가 포함됩니다. 2) 웹 디자인 트렌드는 반응적이고 접근 가능한 디자인을 향해 계속 발전 할 것입니다. 3) 성능 최적화는 반응 형 이미지 로딩 및 게으른로드 기술을 통해 사용자 경험을 향상시킬 것입니다.

HTML vs. CSS vs. JavaScript : 비교 개요HTML vs. 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 15, 2025 am 12:13 AM

Htmlisnotaprogramminglanguage; itisamarkuplanguage.1) htmlstructuresandformatswebcontentusingtags.2) itworksporstylingandjavaScriptOfforIncincivity, WebDevelopment 향상.

HTML : 웹 페이지 구조 구축HTML : 웹 페이지 구조 구축Apr 14, 2025 am 12:14 AM

HTML은 웹 페이지 구조를 구축하는 초석입니다. 1. HTML은 컨텐츠 구조와 의미론 및 사용 등을 정의합니다. 태그. 2. SEO 효과를 향상시키기 위해 시맨틱 마커 등을 제공합니다. 3. 태그를 통한 사용자 상호 작용을 실현하려면 형식 검증에주의를 기울이십시오. 4. 자바 스크립트와 결합하여 동적 효과를 달성하기 위해 고급 요소를 사용하십시오. 5. 일반적인 오류에는 탈수 된 레이블과 인용되지 않은 속성 값이 포함되며 검증 도구가 필요합니다. 6. 최적화 전략에는 HTTP 요청 감소, HTML 압축, 시맨틱 태그 사용 등이 포함됩니다.

텍스트에서 웹 사이트로 : HTML의 힘텍스트에서 웹 사이트로 : HTML의 힘Apr 13, 2025 am 12:07 AM

HTML은 웹 페이지를 작성하는 데 사용되는 언어로, 태그 및 속성을 통해 웹 페이지 구조 및 컨텐츠를 정의합니다. 1) HTML과 같은 태그를 통해 문서 구조를 구성합니다. 2) 브라우저는 HTML을 구문 분석하여 DOM을 빌드하고 웹 페이지를 렌더링합니다. 3) 멀티미디어 기능을 향상시키는 HTML5의 새로운 기능. 4) 일반적인 오류에는 탈수 된 레이블과 인용되지 않은 속성 값이 포함됩니다. 5) 최적화 제안에는 시맨틱 태그 사용 및 파일 크기 감소가 포함됩니다.

HTML, CSS 및 JavaScript 이해 : 초보자 안내서HTML, CSS 및 JavaScript 이해 : 초보자 안내서Apr 12, 2025 am 12:02 AM

WebDevelopmentReliesonHtml, CSS 및 JavaScript : 1) HtmlStructuresContent, 2) CSSSTYLESIT, 및 3) JAVASCRIPTADDSINGINTERACTIVITY, BASISOFMODERNWEBEXPERIENCES를 형성합니다.

HTML의 역할 : 웹 컨텐츠 구조HTML의 역할 : 웹 컨텐츠 구조Apr 11, 2025 am 12:12 AM

HTML의 역할은 태그 및 속성을 통해 웹 페이지의 구조와 내용을 정의하는 것입니다. 1. HTML은 읽기 쉽고 이해하기 쉽게하는 태그를 통해 컨텐츠를 구성합니다. 2. 접근성 및 SEO와 같은 시맨틱 태그 등을 사용하십시오. 3. HTML 코드를 최적화하면 웹 페이지로드 속도 및 사용자 경험이 향상 될 수 있습니다.

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

WebStorm Mac 버전

WebStorm Mac 버전

유용한 JavaScript 개발 도구

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기

DVWA

DVWA

DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

SublimeText3 영어 버전

SublimeText3 영어 버전

권장 사항: Win 버전, 코드 프롬프트 지원!

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)