sibling選取器實現vertical margins的執行個體代碼

來源:互聯網
上載者:User
sibling選取器如何在完成複雜設計要求的同時,保持CSS可讀

這是web前端開發過程中開始簡單逐步變的複雜的例子之一:將一篇文章中的所有元素應用垂直邊距(vertical margins),例如由複雜markdown編譯來的部落格文章。

 大多數情況下,你必須要處理很多例外和相關,比如:標題和圖片上下通常需要更多空白,但是如果兩個圖片上下挨著,那兩圖間空白就改變少。h2標籤和h3標籤直接的距離要比兩個h2之間要小。

  當原作者幾年前剛開始做前端的時候,所有這些異常和依賴關係總是導致複雜的代碼,視覺不一致和意想不到的行為。google了好多回為啥margin-top不起作用。

第一步

  簡單的html如下:

<article class="article">  <h1>Hello World</h1>  <p>Lorem ipsum dolor sit amet</p>  <p>Lorem ipsum dolor sit amet</p>  <img src="…" alt="…">  <p>Lorem ipsum dolor sit amet</p>  <ul>    <li>Lorem</li>    <li>Ipsum</li>    <li>Dolor</li>  </ul>

  通常先拿出兩段來調整它們之間的垂直邊距,達到預期效果後,使用該值作為所有元素的基礎邊距。

.article > * + * {     margin-top: 1.5rem;}

  上述css代碼給.article中全部有相鄰兄弟元素的子項目添加margin-top。只給直系元素添加margin-top屬性避免了不想要的效果,比如上述html中ul將被添加margin-top,而不是li。

第二步

  在這一步中會添加更具體的css規則,如:

.article > img + * {     margin-top: 3rem;}

  img之後的任何元素都會接收到特定的margin-top,效果類似於直接向img應用margin-bottom。 但是使用相鄰的兄弟選取器和邊緣頂部有兩個優點:

  1.不必從最後一個子進程中刪除margin-bottom

  2.並避免摺疊邊距( collapsing margins.)

第三步

  在此步驟中,將規則添加到特定元素,例如:

.article > * + h2 {     margin-top: 4rem;}.article > * + img {     margin-top: 3rem;}

  有相鄰兄弟的h2和img,會收到一個特定的margin-top。

第四步

  在這最後一步中處理有特殊相關性的樣式

.article > img + img {     margin-top: 1rem; }

  改變相鄰圖片間的距離

  如果需要還可以添加精確的css選取器,如:

.article > img + img + img + h2 {     margin-top: 5rem;}

  如果一個h2排列在在連續三個映像,它會收到一個特定的margin-top。 幸運的是,這這隻是一個特殊案例, 但是很高興知道相鄰的兄弟選取器可以解決這種複雜的依賴問題。

進階使用

  為了提高可讀性,使用(SCSS)嵌套並將每條規則寫入一行。 不用對具有相同值的選取器進行分組,因為CSSO會在之後構建任務中處理它。

.article {    > * + * { margin-top: 1.5rem }    > h2 + * { margin-top: 1rem }    > img + * { margin-top: 3rem }    > * + h2 { margin-top: 4rem }    > * + h3 { margin-top: 3.5rem }    > * + img { margin-top: 3rem }    > img + img { margin-top: 1rem }    > h2 + h3 { margin-top: 4.5rem }}

這種技術也適用於SASS或CSS,例如基準網格。 如果所有margin都是是一個指定margin變數計算的,只需要更改該變數來增加或減少整體空白。

結論  

  一般開發的網站時會遇到非常複雜的文章,通常包括類別標題,簡介文本或嵌套布局等元素。使用相鄰的兄弟選取器和唯一的margin-top可以在解決複雜的設計要求的同時保持CSS可理解, 方便之後再添加或調整規則。

【相關推薦】

1. 免費css線上視頻教程

2. css線上手冊

3. php.cn獨孤九賤(2)-css視頻教程

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.