談談一些有趣的CSS題目(七)-- 消失的邊界線問題

開本系列,談談一些有趣的 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;
}

效果圖就如一開始圖示所示:

Demo戳我

這種作法能夠適應不一樣 li 個數不一樣行數的全部狀況,由於每一個新添加的 li ,都會生成一個左邊框與上一個 li 元素分開,只是在視覺上看上去像是上一個 li 元素的右邊框。

 

全部題目彙總在個人 Github ,發到博客但願獲得更多的交流。

到此本文結束,若是還有什麼疑問或者建議,能夠多多交流,原創文章,文筆有限,才疏學淺,文中如有不正之處,萬望告知。

相關文章
相關標籤/搜索