開本系列,談一些有趣的 CSS
題目,題目類型天馬行空,想到什麼,不僅為了拓寬一下解決問題的思路,更涉及一些容易忽略的 CSS 細節。
解題不考慮相容性,題目天馬行空,想到什麼說什麼,如果解題中有你感覺到生僻的 CSS 屬性,趕緊去補習一下吧。
不斷更新,不斷更新,不斷更新,重要的事情說三次。
談一些有趣的CSS題目(一)-- 左邊豎條的實作方法
談談一些有趣的CSS題目(二)-- 從條紋邊框的實現談盒子模型
談一些有趣的CSS題目(三)-- 層疊順序與堆疊上下文知多少
談一些有趣的CSS題目(四)-- 從倒影說起,談談 CSS 繼承 inherit
談一些有趣的CSS題目(五)-- 單行居中,兩行居左,超過兩行省略
談談一些有趣的CSS題目(六)-- 全相容的多列均勻佈局問題
所有題目總結在我的 Github 。
看看下圖,經常會在一些導航欄中見到,要求每行中最後一列的右邊框消失,如何在所有瀏覽器中最便捷優雅的實現?
如果是不需要相容 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 和
最重要的是,每個 li 設定一個左邊框而不是右邊框:
.ul-container, ul{ width:300px; } li{ float:left; width:99px; border-left:1px solid #999; }
接下來,我們將容器
ul-container 設定為 overflow:hidden
,並且將 ul
左移一個像素 gin-left:-1px
這樣
中第一列的所有邊框都因為左移了一像素並且被 overflow:hidden 效果圖如一開始圖示所示: Demo戳我
這個做法可以適應不同 所有題目總結在我的 Github ,發到博客希望得到更多的交流。 到此本文結束,如果還有什麼疑問或建議,可以多多交流,原創文章,文筆有限,才疏學淺,文中若有不正之處,萬望告知。 而消失了,造成了下一個
li 的右邊框看著像左邊框一樣,其實只是左邊框個障眼法:
.ul-container{
overflow:hidden;
}
ul{
margin-left:-1px;
}
li
個數不同行數的所有情況,因為每個新加入的 li
,都會產生一個左邊框與上一個 li
元素分開,只是在視覺上 看起來像是上一個 li
元素的右邊框。