首頁 > web前端 > css教學 > CSS的inherit與auto

CSS的inherit與auto

高洛峰
發布: 2017-02-10 16:21:04
原創
1178 人瀏覽過

一個很顯淺的寓言,千禧年老樹,電打雷劈,屹立不倒,卻毀於螻蟻的侵襲之下。自以為精通CSS的人,常常被一些小問題搞到頭暈腦脹。通常是一個很小的數值,經過層層放大扭曲後,整個佈局就走形了。 CSS是一門很簡單的語言,易學易用,但也最容易出垃圾程式碼。這是沒有深入研究這門語言所致。本人認為,CSS是由以下三大塊構成的:預設值,繼承系統與加權系統。預設值,也就是瀏覽器在使用者沒有設定屬性的情況下,預設指定的屬性。 CSS框架基本上都有一個叫reset.css 的文件,就是對其進行重設,消除各瀏覽器的差異的。繼承系統就是下面要重點討論的東西。加權系統,也就是優先順序的問題,不在本文的討論範疇,不說了。

在CSS中,許多屬性都是可以繼承的,如某個段落的字體設定為白色,其元素的字體不用設定或設定為inhert,它就是白色。這些屬性稱為inherited property,它會從父元素取得對應屬性的經過計算與轉換的值(computed value),如果父元素和它的情形一樣,它就繼續往上找,最後沒有就使用瀏覽器的預設值。

下面是inherited properties的一覽表:

  • border-collapse

  • border-spacing

  • caption-side

  • color

  • cursor

  • direction

  • empty -cells

  • font

  • font-family

  • font-stretch

  • font-size

    font-stretch
  • font-size
  • font-strp
  • font-style

  • font- variant

  • font-weight

  • letter-spacing

  • line-height

  • -glist -image
  • list-style -type
  • quotes
  • text-align
  • text-indent
  • http:// www.php.cn/
  • 我們為父元素設定了字體的樣式,沒有設定子元素的,當取出子元素的時,發現其值轉換為rgb格式(當然IE除外啦!)
  • 不過,在IE7及其之前的版本,是不支援用inhert來設定direction與visibility以外的樣式屬性。具體可參考這裡與這裡

    在IE8中,原本是inherited property的text-align在th中失效。
 <table>
  <tr>
    <th>Ruby</th>
    <th>Rouvre</th>
  </tr>
  <tr>
    <td>By</td>
    <td>司徒正美</td>
  </tr>
</table>
登入後複製
 
  table, tr, td, th {
    border-collapse: collapse;
    border: 1px solid #000;
  }
  table {
    text-align: right;
  } 
  td, th {
    width: 100px;
  }
登入後複製
  • 本來th應該會從table中繼承文本向右對齊的設置,但失效了…

  • 解決IE8這個弱智Bug也很容易,就是顯式地設置inhert。

     
      table, tr, td, th {
        border-collapse: collapse;
        border: 1px solid #000;
      }
      table {
        text-align: right;
      }
      td, th {
        width: 100px;
      }
      th {
        text-align: inherit;
      }
    登入後複製
  • 此外還有一些CSS屬性是不能繼承的,最經典如border系列。它被稱為non-inherited property,如果我們不為它設置,我們只能取得瀏覽器的預設值,預設值在火狐中稱為 initial value 。一個相關的好消息是,預設值在火狐也可以指定了,這樣我們就不用reset樣式了!

    下面是non-inherited property的一覽表:

    background

    border

    float

    height

    • left

    • margin

    • outline

    • overflow

    • padding

      top
    • visibility
    • width
    • z-index
    • 我們為父元素設定了背景顏色,沒有設定子元素的,這時會取得瀏覽器的預設值transparent(W3C那一方好像只要是顏色都會轉換為rgb格式,多出的a為Alpha)

      接著我們來看auto,這是一個含糊不清但是有長度概念的值。適用於以下屬性:
    • overflow
    • cursor
    • height
    • margin-* (left|bottom|top |right|start|end)

    • top

    • bottom

    • left

    • -

    -moz-column- width

    languages
    • 在區塊級元素的可度量的屬性中(如width,height),如果不設定值,其預設值是auto,但它很容易會被父級元素的值覆蓋,也就是隱式地成為了inhert了。在內聯元素中,由於不具備盒子模型,如果不設置,就算是火狐也原本奉還它,這對於精確計算元素的寬度與高度是非常不利的。 auto還有對稱性,這個在居中佈局我們常常運用到它。在非度量的屬性中,如overflow,就要具體情況具體分析了。
    • 更多CSS的inherit與auto 相關文章請關注PHP中文網!

    相關標籤:
    來源:php.cn
    本網站聲明
    本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
    熱門教學
    更多>
    最新下載
    更多>
    網站特效
    網站源碼
    網站素材
    前端模板