Firefox 微软 google Android wordpress shell Ubuntu 云计算 程序员 linux 开源 java php 编程 apache Windows mysql Python nginx centos

CSS 專業技巧收集

一些CSS技巧的收集,能夠幫助你提升專業水平。

1. 使用 :not() 為導航添加/取消邊框

很多人會這樣給導航添加邊框,然後給最後一個取消掉:

1    /* add border */
2    .nav li {
3      border-right: 1px solid #666;
4    }
5    
6    /* remove border */
7    .nav li:last-child {
8      border-right: none;
9    }
其實,用CSS的 :not() 可以簡化為下面的代碼:

1    .nav li:not(:last-child) {
2      border-right: 1px solid #666;
3    }
當然,你也可以使用 .nav li + li 甚至 .nav li:first-child ~ li,但是使用 :not() 可以使意圖更加明確。

2. 給 body 添加 line-height 屬性

你不需要為 <p>、<h*> 分別添加 line-height 屬性,相反的,只需要添加到 body 上即可:

1    body {
2      line-height: 1;
3    }
這樣,文本元素就可以很容易的從 body 繼承該屬性。

3. 垂直居中

這並不是什麽魔法,你可以垂直居中任何元素:

01    html, body {
02      height: 100%;
03      margin: 0;
04    }
05    
06    body {
07      -webkit-align-items: center; 
08      -ms-flex-align: center; 
09      align-items: center;
10      display: -webkit-flex;
11      display: flex;
12    }
還需要其他的?水平居中、垂直居中,在任何時間、任何地方?可以看看CSS-Tricks的這篇文章。

註意:flexbox 在 IE11 下存在一些bug。

4. 使用逗號分割列表

使列表看起來像是用逗號分割的:

1    ul > li:not(:last-child)::after {
2      content: ",";
3    }
通過 :not() 偽類去掉最後一個元素後面的逗號。

5. 使用負的 nth-child 選取元素

使用負的 nth-child 在 1 到 n 之間選擇元素:

1    li {
2      display: none;
3    }
4    
5    /* 選擇第1到3個元素並顯示它們 */
6    li:nth-child(-n+3) {
7      display: block;
8    }
當然,如果你了解 :not() 的話,還可以這麽做:

1    li:not(:nth-child(-n+3)) {
2      display: none;
3    }
是不是非常簡單?

6. 使用 SVG 作 icon 圖標

沒什麽理由不使用 SVG 作 icon 圖標:

1    .logo {
2      background: url("logo.svg");
3    }
SVG 對於任何分辨率的縮放效果都很好,並且支持 IE9+所有瀏覽器,所以,放棄使用 .png、.jpg、.gif文件吧。

註:以下代碼對於使用輔助設備上網的用戶可以提升可訪問性:

1    .no-svg .icon-only:after {
2      content: attr(aria-label);
3    }
7. 文本展示優化

有時候字體並不是對於所有設備都顯示為最佳效果,所以使用瀏覽器來幫忙吧:

1    html {
2      -moz-osx-font-smoothing: grayscale;
3      -webkit-font-smoothing: antialiased;
4      text-rendering: optimizeLegibility;
5    }
8. 使用 max-height 實現純CSS幻燈片

使用 max-height 與超出隱藏實現純CSS的幻燈片:

1    .slider ul {
2      max-height: 0;
3      overlow: hidden;
4    }
5    
6    .slider:hover ul {
7      max-height: 1000px;
8      transition: .3s ease; /* animate to max-height */
9    }
9. 繼承 box-sizing

讓 box-sizing 繼承自 html :

1    html {
2      box-sizing: border-box;
3    }
4    
5    *, *:before, *:after {
6      box-sizing: inherit;
7    }
這使得在插件或者其他組件中修改 box-sizing 屬性變得更加容易。

10. 設置表格相同寬度

1    .calendar {
2      table-layout: fixed;
3    }
11. 使用 Flexbox 來避免 Margin Hacks

在做多列布局的時候,可以通過 Flexbox 的 space-between 屬性來避免nth-、first-、 last-child 等 hacks:

1    .list {
2      display: flex;
3      justify-content: space-between;
4    }
5    
6    .list .person {
7      flex-basis: 23%;
8    }
這樣,列之間的空白就會被均勻的填滿。

13. 對空鏈接使用屬性選擇器

當  <a> 中沒有文本而 href 不為空的時候,顯示其鏈接:

view source

print?

1    a[href^="http"]:empty::before {
2      content: attr(href);
3    }

延伸阅读

    评论