《CSS 揭秘》- Lea Verou 第一章

前言:
DRY 是 Don’t Repeat Yourself

第 1 章

盡量減少代碼重復(fù)

絕對值雖然容易掌控族操,但想修改的時候會比較麻煩

  • 行高要反映出它跟字號
font-size: 20px;
line-height: 1.5;//行高是字號的 1.5 倍
  • 字號最好不要定為絕對長度值
如果我們決定把父級的字號加大拟逮,就不得不修改每一處使用絕
對值作為字體尺寸的樣式。如果改用百分比或 em 單位就好多了
font-size: 125%; /* 假設(shè)父級的字號是 16px */
line-height: 1.5;

em和rem的區(qū)別
em 和 rem都是靈活、 可擴展的單位漓拾,由瀏覽器轉(zhuǎn)換為像素值听系,具體取決于您的設(shè)計中的字體大小設(shè)置。

  • em的特點
    • 瀏覽器默認1em=16px,所以0.75em=12px;
      我們經(jīng)常會在頁面上看到根元素寫的font-size:65%; 這樣em就成了16px*62.5=10em;這是顯示在頁面的字體大小是10px;
    • 字體大小是根據(jù)父元素字體大小設(shè)置的
    • em 單位的主要目的應(yīng)該是允許保持在一個特定的設(shè)計元素范圍內(nèi)的可擴展性
    • 但是如果嵌套了多個元素 要計算它的大小,是件很頭疼的事情
    • 這樣的情況下,就出現(xiàn)了rem
  • rem特點
    • rem的大小是根據(jù)html根目錄下的字體大小進行計算的
    • 當我們改變根目錄下的字體大小的時候芝此,下面字體都改變
    • rem不僅可以設(shè)置字體的大小憋肖,也可以設(shè)置元素寬、高等屬性
    • 根元素的字體大小 16px婚苹,10rem 將等同于 160px
    • 使用 rem 單位的主要目的應(yīng)該是確保無論用戶如何設(shè)置自己的瀏覽器岸更,我們的布局都能調(diào)整到合適大小。

HSLA(H,S,L,A)

H:
Hue(色調(diào))膊升。0(或360)表示紅色怎炊,120表示綠色,240表示藍色廓译,也可取其他數(shù)值來指定顏色评肆。取值為:0 - 360
S:
Saturation(飽和度)。取值為:0.0% - 100.0%
L:
Lightness(亮度)非区。取值為:0.0% - 100.0%
A:
Alpha透明度瓜挽。取值0~1之間。
推 薦 使 用 HSLA 而 不 是RGBA 來產(chǎn)生半透明的白色征绸,因為它的字符長度更短久橙,敲起來也更快。這歸功于它的重復(fù)度更低

background: #58a linear-gradient(hsla(0,0%,100%,.2),transparent);

例子:https://jsfiddle.net/noyanse/o4v7mvgu/66/

image.png

currentColor

從SVG 那里借鑒來的,這個關(guān)鍵字并沒有綁定到一個固定的顏色值管怠,而是一直被解析為 color 淆衷。實際上,這個特性讓它成為了 CSS 中有史以來的第一個變量 渤弛。如果你沒有給邊框指定顏色祝拯,它就會自動地從文本顏色那里得到顏色。
例子:假設(shè)我們想讓所有的水平分割線(所有 hr 元素)自動與文本的顏色保持一致

hr {
height: .5em;
background: currentColor;
}

例子:
更改顏色:https://jsfiddle.net/noyanse/zb2cxLrf/5/

image.png

<style>
    .icon{
        display: inline-block;
        width: 20px;
        height: 20px;
  //圖標把圖標部分刪除她肯,周圍用白色背景填充佳头,可以很省事。
        background-image: url(sprite_icons.png);
        background-position: 0 0;
        background-color: currentColor;/*圖標隨著字體的顏色變化而變化*/
    }
    .link:hover{
        color: red;
    }
</style>
</head>
<body>
    <a href="##" class="link"><i class="icon icon1"></i>返回</a>
</body>
image.png

image.png

繼承inherit

inherit 可以用在任何 CSS 屬性中辕宏,而且它總是綁定到父元素的計
算值(對偽元素來說畜晰,則會取生成該偽元素的宿主元素)
如:要把表單元素的字體設(shè)定為與頁面的其他部分相同,你并不需要重復(fù)指定字體屬性瑞筐,只需利用 inherit 的特性即可https://jsfiddle.net/noyanse/5w99qq18/2/

image.png

inherit 關(guān)鍵字對于背景色同樣非常有用https://jsfiddle.net/noyanse/5judagt8/4/

image.png

相信你的眼睛凄鼻,而不是數(shù)字

人的眼睛并不是一臺完美的輸入設(shè)備。有時候精準的尺度看起來并不精準聚假,而我們的設(shè)計需要順應(yīng)這種偏差块蚌。舉一個在視覺設(shè)計領(lǐng)域廣為人知的例子吧,我們的眼睛在看到一個完美垂直居中的物體時膘格,會感覺它并不居中峭范。實際上,我們應(yīng)該把這個物體從幾何學(xué)的中心點再稍微向上挪一點才能取得理想的視覺效果瘪贱。

關(guān)于響應(yīng)式網(wǎng)頁設(shè)計

比較常見的實踐是用多種分辨率來測試一個網(wǎng)站纱控,然后添加越來越多的媒體查詢(Media Query)規(guī)則來修補網(wǎng)站在這些分辨率下出現(xiàn)的問題辆毡。然而對于今后的 CSS 改動來說,每個媒體查詢都會增加成本甜害,而這種成本是不應(yīng)輕易上升的舶掖。你添加的媒體查詢越多,你的 CSS代碼就會變得越來越經(jīng)不起折騰尔店。



這并不是說媒體查詢是一種不良實踐眨攘。只要用對了,它就是利器嚣州。但是鲫售,你只應(yīng)該把它作為最后的手段
媒體查詢的斷點不應(yīng)該由具體的設(shè)備來決定该肴,而應(yīng)該根據(jù)設(shè)計自身來決定情竹。這不僅是因為我們的網(wǎng)站需要面向的設(shè)備太多了(尤其是考慮到未來的設(shè)備時),還因為一個網(wǎng)站在桌面端可能會以任意尺寸的窗口來顯示沙庐。如果你有信心自己的設(shè)計在任何可能出現(xiàn)的視口尺寸下都能良好工作鲤妥,誰關(guān)心這些設(shè)備的分辨率具體是多少呢?

下面還有一些建議拱雏,可能會幫你避免不必要的媒體查詢:
  • 使用百分比長度來取代固定長度。如果實在做不到這一點底扳,也應(yīng)該
    嘗試使用與視口相關(guān)的單位( vw 铸抑、 vh 、 vmin 和 vmax )衷模,它們的值解析為視口寬度或高度的百分比鹊汛。
  • 當你需要在較大分辨率下得到固定寬度時,使用** max-width** 而不是width 阱冶,因為它可以適應(yīng)較小的分辨率刁憋,而無需使用媒體查詢。
  • 不要忘記為替換元素(比如 img 木蹬、 object 至耻、 video 、 iframe 等)設(shè)置一個 max-width 镊叁,值為 100% 尘颓。
  • 假如背景圖片需要完整地鋪滿一個容器晦譬,不管容器的尺寸如何變化,background-size: cover 這個屬性都可以做到敛腌。但是惫皱,我們也要時刻牢記——帶寬并不是無限的,因此在移動網(wǎng)頁中通過 CSS 把一張大圖縮小顯示往往是不太明智的尤莺。
  • 當圖片(或其他元素)以行列式進行布局時逸吵,讓視口的寬度來決定
    列的數(shù)量缝裁。彈性盒布局(即 Flexbox)或者 display: inline-block加上常規(guī)的文本折行行為,都可以實現(xiàn)這一點捷绑。
  • 在使用多列文本時韩脑,指定 column-width (列寬)而不是指定column-count (列數(shù)),這樣它就可以在較小的屏幕上自動顯示為單列布局粹污。

盡最大努力實現(xiàn)彈性可伸縮的布局,并在媒體查詢的各個斷點區(qū)間內(nèi)指定相應(yīng)的尺寸壮吩。
如果你發(fā)現(xiàn)自己需要一大堆媒體查詢才能讓設(shè)計適應(yīng)大大小小的屏幕,那么不妨后退一步觉啊,重新審視你的代碼結(jié)構(gòu)沈贝。因為在所有的情況下,響應(yīng)式都不是唯一需要考慮的問題宋下。

合理使用簡寫

不要害怕使用簡寫屬性。合理使用簡寫是一種良好的防衛(wèi)性編碼方式学歧,可以抵御未來的風(fēng)險。

(/)分割是為了消除歧義袁铐, 
top right 顯然是 background-position 伺帘,而 2em 2em 是background-size ,
不管它們的順序如何伪嫁。但是,請設(shè)想一下 50% 50% 這樣的值帝洪,它到底是 background-size 還是background-position 呢?
當你在使用展開式屬性時砚哗,CSS 解析器明白你的意圖砰奕;
而當你使用簡寫屬性時蛛芥,解析器需要在沒有屬性名提示的情況下
弄清楚 50% 50% 到底指什么。這就是需要引入斜杠的原因仅淑。
background: url(tr.png) no-repeat top right / 2em 2em,
             url(br.png) no-repeat bottom right / 2em 2em,
             url(bl.png) no-repeat bottom left / 2em 2em;
-------------------------------------------------------------------------------------------
background: url(tr.png) top right,
              url(br.png) bottom right,
              url(bl.png) bottom left;
background-size: 2em 2em;
background-repeat: no-repeat;

我應(yīng)該使用預(yù)處理器嗎

如果使用得當胸哥,它們在大型項目中可以讓代碼更加靈活
但也有缺點。

很多受預(yù)處理器啟發(fā)的特性都已經(jīng)以各種方式融入到原生 CSS 中了庐船。

這些原生特性通常比預(yù)處理器提供的版本要強大得多嘲更,因為它們是動態(tài)的。

  • CSS 值與單位(第三版)中的 calc() 函數(shù)盗棵,不僅在處理運算時非常
    強大北发,而且已經(jīng)得到了廣泛的支持喷屋,當下可用。
  • CSS 顏色(第四版)(http://dev.w3.org/csswg/css-color)引入的 color()函數(shù)會提供顏色運算方法屯曹。
    舉個例子,預(yù)處理器完全不知道如何完成100% - 50px 這樣的計算密任,因為在頁面真正被渲染之前偷俭,百分比值是無法解析的。但是淹遵,原生CSS 的 calc() 在計算這樣的表達式時沒有任何壓力。
    變量玩法:
ul { --accent-color: #ccc; }
ol { --accent-color: rebeccapurple; }
li { background: var(--accent-color); }
image.png

建議是济炎,在每個項目開始時使用純 CSS辐真,只有當代碼開始變得無法保持 DRY 時,才切換到預(yù)處理器的方案侍咱。為了避免可能發(fā)生的“依賴”或“濫用”,在引入預(yù)處理器的問題上需要冷靜決策咙咽,不應(yīng)該在每個項目一開始時就不動腦筋順著慣性來淤年。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末麸粮,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子弄诲,更是在濱河造成了極大的恐慌,老刑警劉巖寂玲,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件梗摇,死亡現(xiàn)場離奇詭異,居然都是意外死亡断序,警方通過查閱死者的電腦和手機糜烹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來诸迟,“玉大人,你說我怎么就攤上這事亮蒋。” “怎么了贮尖?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵趁怔,是天一觀的道長润努。 經(jīng)常有香客問我,道長铺浇,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任丁稀,我火速辦了婚禮倚聚,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘授账。我一直安慰自己惨驶,他們只是感情好,可當我...
    茶點故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布棘捣。 她就那樣靜靜地躺著休建,像睡著了一般评疗。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上百匆,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天,我揣著相機與錄音存璃,去河邊找鬼。 笑死粘招,一個胖子當著我的面吹牛偎球,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播衰絮,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼猫牡,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了淌友?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤症虑,失蹤者是張志新(化名)和其女友劉穎归薛,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體习贫,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡千元,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年幸海,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片物独。...
    茶點故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡挡篓,死狀恐怖帚称,靈堂內(nèi)的尸體忽然破棺而出秽澳,到底是詐尸還是另有隱情,我是刑警寧澤担神,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布杏瞻,位于F島的核電站,受9級特大地震影響捞挥,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜斩披,卻給世界環(huán)境...
    茶點故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一讹俊、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧仍劈,春花似錦、人聲如沸讹弯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽臭胜。三九已至癞尚,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間浇揩,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留膜廊,地道東北人。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓蹬跃,卻偏偏與公主長得像铆铆,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子薄货,可洞房花燭夜當晚...
    茶點故事閱讀 45,060評論 2 355

推薦閱讀更多精彩內(nèi)容

  • rljs by sennchi Timeline of History Part One The Cognitiv...
    sennchi閱讀 7,334評論 0 10
  • 盡量減少代碼重復(fù) 在軟件開發(fā)中谅猾,保持代碼的DRY 和可維護性是最大的挑戰(zhàn)之一,而這句話對CSS 也是適用的坐搔。在實踐...
    圖靈教育閱讀 1,202評論 0 14
  • 我的青春是一段腐朽的木偶敬矩,是擁有與幻想被包容的一切無法定義的浪漫旅程,是自己制造的黑暗吞噬了自己的靈魂弧岳。被自己麻木...
    美人魚的海洋閱讀 359評論 0 3
  • 以前寫作文總想寫“故鄉(xiāng)”這個詞缩筛,小學(xué)一般的年級,十一二歲瞎抛,用喜歡模仿臺灣的作家懷念小時候在大陸的生活√コ罚總覺得以后自...
    喜樹街閱讀 84評論 0 1
  • 小時候断凶,幸福是一顆糖;長大后认烁,幸福是一次玩耍介汹;現(xiàn)在舶沛,幸福是一種感覺。閉上眼如庭,聽風(fēng)拂過耳畔,才恍然大悟骤竹,幸福原來那么...
    執(zhí)筆溢情閱讀 535評論 0 3