@charset "utf-8";
完整示例以下:css
.g-footer, .g-header { position: relative; } .g-content { background: linear-gradient(135deg,deeppink25%,transparent25%) -50px0, linear-gradient(225deg,deeppink25%,transparent25%) -50px0, linear-gradient(315deg,deeppink25%,transparent25%), linear-gradient(45deg,deeppink25%,transparent25%); } .g-content::before { content: ''; }
[強制]:class命名只能出現小寫英文和破折號 -鏈接 ,不容許下劃線_ 和 駝峯命名法 。(例: anole-btn)緣由以下:html
1.-符合英文語義化,- 標識連子符,_是強調符號;前端
2._underline 選擇器命名,在IE6中無效;node
3.駝峯和 都不利於SEO搜索引擎檢索切詞,駝峯沒法切成單詞, 谷歌會切漏關鍵詞;webpack
4.輸入的時候少按一個shift鍵,且Google、Yahoo、淘寶、豆瓣在他們的新CSS代碼規範中推薦使用 -做爲className分隔符。
[強制]:class 名稱應當儘量短,而且意義明確。
[建議]:基於最近的父 class 或基本(base) class 做爲新 class 的前綴。git
[建議]:少用#,少用*,少用標籤選擇器github
CSS的渲染方式是「從右往左」渲染的,就拿#header a{}舉例,先渲染頁面上全部的a籤,再去尋找id爲header的元素。web
[建議]:避免使用屬性選擇器編程
#header { height: 1rem; // 推薦用 .header 能夠複用,且#選擇器權重高,應按需使用,不能濫用 } #header *{ padding:0 .3rem; // 會去遍歷全部標籤,影響性能 } #header a { font-size:0.28rem; // 一樣會去遍歷全部<a>標籤,影響性能 }
[強制]:除去某些極特殊的狀況,儘可能不要不要使用 !important。json
!important 的存在會給後期維護以及多人協做帶來噩夢般的影響。
當存在的樣式覆蓋層疊時,若是你發現新定義的一個樣式沒法覆蓋一箇舊的樣式,只有加上 !important 才能生效時,是由於你新定義的選擇器的優先級不夠舊樣式選擇器的優先級高。因此,合理的書寫新樣式選擇器,是徹底能夠規避一些看似須要使用 !important 的狀況的。
1.Positioning Model (佈局方式、位置) 2.Box Model (盒模型) 3.Typographic (文本排版) 4. Visual (視覺外觀)
因爲定位(positioning)能夠從正常的文檔流中移除元素,而且還能覆蓋盒模型(box model)相關的樣式,所以排在首位。盒模型排在第二位,由於它決定了組件的尺寸和位置。
其餘屬性只是影響組件的內部(inside)或者是不影響前兩組屬性,所以排在後面。
.declaration-order { /* Positioning */ position: absolute; top: 0; right: 0; bottom: 0; left: 0; z-index: 100; /* Box-model */ display: block; float: right; margin: 10px; padding: 10px; overflow: hidden; width: 100px; height: 100px; /* Typography */ font: normal 13px "Helvetica Neue", sans-serif; line-height: 1.5; color: #333; text-align: center; word-wrap: nowrap; /* Visual */ background-color: #f5f5f5; border: 1px solid #e5e5e5; border-radius: 3px; list-style: none; transform: translateX(-50%); transition: top .4s ease; animation:mymove 5s infinite; /* Misc */ opacity: 1; cursor: pointer; }
font-weight | font-size | line-height | font-family font-style: normal; font-variant: small-caps; font-weight: bold; font-size: 14px; line-height: 1.5em; font-family: 'Microsoft YaHei','arial','verdana'; font:normal small-caps bold 14px/1.5em 'Microsoft YaHei','arial','verdana';
background-color: #F00; background-image: url(header_bg.gif); background-repeat: no-repeat; background-attachment: fixed; background-position: left top; background: #F00 url(header_bg.gif) no-repeat fixed left top;
margin: 8px; margin: 4px 0 1.5em -12px; padding: 1px 2px 3px;
list-style-type: square; list-style-position: outside; list-style-image: url(bullet.gif); list-style: square outside url(bullet.gif);
border-width :1px; border-style: solid; border-color: #CCC; border: 1px solid #CCC;
color: rgba(255, 255, 255, 0.5); color: rgba(255, 255, 255, .5);
margin: 0px auto; margin: 0 auto;
color: #ffcc00; color: #fc0;
在某些樣式中,會出現一些含有空格的關鍵字或者中文關鍵字。
body { font-family: 'Microsoft YaHei','黑體-簡','\5b8b\4f53'; }
div { background-image: url('...'); }
單行註釋
/* 表格隔行變色 */
多行註釋
/** * Sometimes you need to include optional context for the entire component. Do that up here if it's important enough. */
規則聲明塊內註釋
.g-footer { border: 0; // .... }
文件註釋
/** * @name: 文件名或模塊名 * @description: 文件或模塊描述 * @author: author-name(mail-name@domain.com) * author-name2(mail-name2@domain.com) * @update: 2018-08-08 10:08 */
@description爲文件或模塊描述。
@update爲可選項,建議每次改動都更新一下。
當該業務項目主要由固定的一個或多我的負責時,須要添加@author標識,一方面是尊重勞動成果,另外一方面方便在須要時快速定位責任人
@import (reference) "foo.less";
咱們用vd生成的項目,已經將CSS公共解決方案文件rework.less集成到node_modules中,以下調用
@import (reference) "~rework.less/rework"; @import "~sprite.less"; .placeholder { &-404 { h3 { .text-replace(); // 調用rework樣式 .sprite(@404-slogan); } }
除了提供一些經常使用樣式方案,rework.less中還包含了樣式重置,中文網頁排版樣式,詳情查閱源碼。
rework.less源碼地址:https://github.com/yincw/rework.less3.2
.bordered { border-top: dotted 1px black; border-bottom: solid 2px black; } #menu .list { color: #111; .bordered; } .post { color: red; .bordered; }
.bundle() { .button(@bg-color) { // 本樣式支持傳參 display: block; border: 1px solid black; background-color: @bg-color; } .tab { background-color: yellow } .citation { background-color: purple } } .header { color: orange; .bundle > .button(gray); // 也能夠寫做 .bundle .button(gray) }
.product { padding-top: .5rem; width: e("calc(100% - 0.6rem)"); // 混合計算編譯會忽略單位,解決方案1 .product-list { margin-bottom: .2rem; width: calc(~"100% - 0.6rem"); // 混合計算編譯會忽略單位,解決方案2 &:after { content: ""; display: block; visibility: hidden; clear: both; height: 0; line-height: 0; } } }
引用方法論是爲了讓CSS編碼具備更好的可讀性、維護性、擴展性、複用性。
.red-btn, .blue-btn, .gray-btn { width: 100px; height: 36px; border: 0; }
.f12 { font-size:12px } .size1of4 { width: 25% } .bgBlue { background:blue } <div className="f12 size1of4 bgBlue">OOCSS</div> <div className="f12 bgBlue">OOCSS</div>
1.Base Styles:基礎規範,它的定義不會用到class和ID。包含樣式重置css reset、工具樣式rework。
2.Layout Rules:佈局規範,佈局是一個網站的基本,SMACSS還約定了一個前綴 l-/layout- 來標識佈局的class。
.layout-header {} .layout-container {} .layout-sidebar {} .layout-content {} .layout-footer {}
3.Module Rules:模塊規範,將樣式模塊化就能達到複用和可維護的目的。SMACSS中的模塊具備本身的一個命名,下屬類皆有同一個前綴。
.todolist{} .todolist-title{} .todolist-image{} .todolist-article{}
4.State Rules:狀態規範,描述的是任一元素在特定狀態下的外觀。
// html <div class="is-hidden"> ... </div> // css .is-hidden{ display: none; }
5.Theme Rules:主題規範,描述了頁面主題外觀,通常是指顏色、背景圖。Theme Rules 能夠修改前面 4個類別的樣式,且應和前面4個類別分離開來(便於切換,也就是「換膚」)。
咱們引用主題規範的思想,可是沒必要使用它的代碼覆蓋的實現方式。咱們有更適合咱們簡便方式實現主題規範。
6.Changing State: 動態樣式規範,咱們靜態CSS完成後,會有一些動態交互樣式的覆蓋行爲。改變State Rules的樣式屬性。
1.在.vd文件夾中,project.json文件有配置主題樣式的對象,配置好後能夠全局引用。
project.json文件中定義主題樣式:
"theme": { "hd": "2px", "primary-color": "#1890ff", "border-radius": "4px", "brand-primary": "#0b87fd", "brand-primary-tap": "#0b87fd" }
button.less 文件直接引用,不須要import文件:
.anole { &-btn-primary { border-radius: @border-radius; background-color: @primary-color; } }
2.引用Theme.less中定義的變量樣式。
theme.less 文件定義:
@primary-color: #1890ff; @title-color: #000; @title-size: 0.36rem; @text-color: #333; @text-size: 0.28rem; @bg-color: #f6f6f6;
button.less 文件引用:
@import 'theme.less'; .anole { &-btn-primary { color: @text-color; background-color: @primary-color; } }
第一步:項目根目錄新建文件stylelint.config.js
module.exports = { "extends": "stylelint-config-standard", "parser": "babel-eslint", "env": { "browser": true, "node": true, "commonjs": true, "amd": true, "jest": true }, "plugins": [ // "stylelint-z-index-value-constraint", ], "rules": { // 縮進2個空格 "indentation": [4, { "except": ["value"], "severity": "warning", "message": "Please use 2 spaces for indentation. Tabs make The Architect grumpy." }], // 小數前面的 0 "number-leading-zero": "never", // 不容許空規則 "block-no-empty": true, "max-empty-lines": 2, "color-no-invalid-hex": true, // 註釋空行前 "comment-empty-line-before": ["always", { "ignore": ["stylelint-commands", "between-comments"], }], // 註釋空行後 "declaration-colon-space-after": "always", // 排除前面空行 "rule-empty-line-before": ["always", { "except": ["first-nested"], "ignore": ["after-comment"], }], // 單位白名單 "unit-whitelist": ["rem", "%", "s", "deg", "px", "em", "vh", "vm"], // z-index 等級範圍 // "plugin/z-index-value-constraint": { // "min": 0, // "max": 999 // } }, "root": true };
第二步:webpack.config.js中配置,安裝依賴包
yarn add stylelint-webpack-plugin
import StyleLintPlugin from 'stylelint-webpack-plugin'; ... plugins:[ ..., new StyleLintPlugin({ context: "src", configFile: join(__dirname, './stylelint.config.js'), files: '**/*.less', failOnError: false, quiet: true, syntax: 'less' }), ... ] ...
史上最全的CSS hack方式一覽:https://blog.csdn.net/freshlover/article/details/12132801
前端工程師手冊:https://leohxj.gitbooks.io/front-end-database/html-and-css-basic/css-write-and-name.html
如何規範 CSS 的命名和書寫?:https://www.zhihu.com/question/19586885
貓哥_kaiye | 編程筆記:http://www.cnblogs.com/kaiye/archive/2011/06/13/3039046.html
肯撲seoz928的博客: http://blog.sina.com.cn/s/blog_89aeb27f0100vk0o.html
參考連接:https://github.com/cssmagic/blog/issues/42
DRY CSS:http://vanseodesign.com/css/dry-principles/
OOCSS: http://oocss.org/
SMACSS:https://smacss.com/
參考Less.js中文網: http://lesscss.cn/features/#import-options-reference
web項目開發 之 前端規範 --- CSS編碼規範:https://blog.csdn.net/xllily_11/article/details/51249120
複雜應用的 CSS 性能分析和優化建議:http://www.orzpoint.com/profiling-css-and-optimization-notes/
精簡高效的CSS命名準則/方法:http://www.zhangxinxu.com/wordpress/2010/09/精簡高效的css命名準則方法
stylelint:https://github.com/stylelint/stylelint/blob/master/docs/user-guide/rules.md
在webpack中使用stylelint(一) Quick Start:https://www.jianshu.com/p/4ed317615152