開本系列,談談一些有趣的 CSS
題目,題目類型天馬行空,想到什麼說什麼,不只爲了拓寬一下解決問題的思路,更涉及一些容易忽視的 CSS 細節。css
解題不考慮兼容性,題目天馬行空,想到什麼說什麼,若是解題中有你感受到生僻的 CSS 屬性,趕忙去補習一下吧。html
不斷更新,不斷更新,不斷更新,重要的事情說三遍。git
談談一些有趣的CSS題目(一)-- 左邊豎條的實現方法github
談談一些有趣的CSS題目(二)-- 從條紋邊框的實現談盒子模型瀏覽器
談談一些有趣的CSS題目(三)-- 層疊順序與堆棧上下文知多少佈局
談談一些有趣的CSS題目(四)-- 從倒影提及,談談 CSS 繼承 inheritpost
談談一些有趣的CSS題目(五)-- 單行居中,兩行居左,超過兩行省略測試
談談一些有趣的CSS題目(六)-- 全兼容的多列均勻佈局問題url
全部題目彙總在個人 Github 。spa
看看下圖,常常會在一些導航欄中見到,要求每行中最後一列的右邊框消失,如何在全部瀏覽器中最便捷優雅的實現?
若是是不須要兼容 IE8-
,那麼使用 CSS3 新增的選擇器無疑是一種好方法。
// 使用僞類選擇器,選擇第 3n 個元素去掉邊框 li:nth-child(3n){ border-right:none; }
固然,若是個數肯定也很少,給須要去掉右邊框的元素直接添加一個特定的 class 也就完事。或者,使用 table 雖然繁瑣一點,不過也能實現。
不過這樣都不夠優雅。
這裏有個小技巧,就是經過添加反向邊框而且增長一個負的
margin
來實現。
首先,假定咱們的 ul
結構以下:
<div class="ul-container"> <ul> <li>測試</li> <li>消失</li> <li>邊界線</li> <li>右側</li> <li>邊界線</li> <li>消失</li> <li>測試</li> </ul> </div>
如圖中所示,假定每行排列 3 個 li
,每一個 li
寬 100px
,咱們的 ul 和 ul-container 寬度都設爲 300px
。
最重要的是,每一個 li
設置一個左邊框而不是右邊框:
.ul-container, ul{ width:300px; } li{ float:left; width:99px; border-left:1px solid #999; }
咱們會獲得以下這樣的結果:
接下來,咱們將容器 ul-container
設置爲 overflow:hidden
,而且將 ul
左移一個像素 margin-left:-1px
。
這樣 ul
中第一列的全部邊框都由於左移了一像素而且被 overflow:hidden
而消失了,形成了下一個 li
的右邊框看着像左邊框同樣,其實只是個障眼法:
.ul-container{ overflow:hidden; } ul{ margin-left:-1px; }
效果圖就如一開始圖示所示:
這種作法能夠適應不一樣 li
個數不一樣行數的全部狀況,由於每一個新添加的 li
,都會生成一個左邊框與上一個 li
元素分開,只是在視覺上看上去像是上一個 li
元素的右邊框。
全部題目彙總在個人 Github ,發到博客但願獲得更多的交流。
到此本文結束,若是還有什麼疑問或者建議,能夠多多交流,原創文章,文筆有限,才疏學淺,文中如有不正之處,萬望告知。