1. 程式人生 > 實用技巧 >web十三講,CSS框模型

web十三講,CSS框模型

CSS框模型

  • CSS框模型(Box Model)規定了元素框處理元素內容、內邊距、邊框和外邊距的方式。

  • 元素框的最內部是實際的內容,直接包圍內容的是內邊距。內邊距呈現了元素的背景。內邊距的邊緣是邊框。邊框外面是外邊距,外邊距預設是透明的,因此不會遮擋其後的任何元素。

  • padding內邊距

    • 內邊距、邊框和外邊距都是可選的,預設值是零。

      * {
          margin:0;
          padding:0;
      }
      
    • width和height

      • 在CSS中,width和height指的是內容區域的寬度和高度。增加內邊距、邊框和外邊距不會影響內容區域的尺寸,但會增加元素框的總尺寸。

      • 例如:假設框的每個邊上有10個畫素的外邊距和5個畫素的內邊距。如果希望這個元素框達到100個畫素,就需要將內容的寬度設定為70畫素,請看下圖:

        # box {
            width:70px;
            margin:10px;
            padding:5px;
        }
        

+ 提示:內邊距、邊框和外邊距可以作用於一個元素的所有邊,也可以作用於單獨的邊。
+ 提示:外邊距可以是負值,而且在很多情況下都要使用負值的外邊距。
  • 內邊距邊距屬性

    屬性 描述
    padding 設定元素的內邊距屬性。
    padding-bottom 設定下內邊距
    padding-left 設定左內邊距
    padding-right 設定右內邊距
    padding-top 設定上內邊距
    • CSS padding屬性定義內邊距,padding接受長度值或百分比值,但不允許使用負值。

    • 例如:

      • 所有h1元素的各邊都有10畫素的內邊距。

        h1 {padding:10px;}
        
      • 還可以按照上、右、下、左的順序,分別設定各邊的內邊距,各邊均可以使用不同的單位或百分比值。

        h1 {padding:10px 0.25em 2ex 20%;}
        
        • 假設給padding3個值,那麼第一個值是上內邊距、第二個值是右邊距和左邊距、第三個值是下邊距。
        • 假設給padding2個值,那麼第一個值是上邊距、下內邊距,第二個值是左內邊距、右內邊距。
        • 假設只給padding1個值,那麼所有的內邊距都使用這個值。
    • 內邊距的百分比數值

      • 可以為元素的內邊距設定百分比數值。百分比數值是相當於父元素的width計算的,這一點與外邊距一樣。所以,若父元素的width改變,它們也會改變。

      • 注意:上下內邊距和左右內邊距一致,即上下內邊距的百分比數值會相對於父元素寬度設定,而不是相當於高度。

      • 例如:若一個段落的父元素是div,那麼它的內邊距要根據div的width計算。

        <div style="width:200px;"
        <p> This paragraph is contained within a DIV that has a width of 200 pixels.</p>
        </div>
        
    • 單邊內邊距屬性

      • 通過使用下面四個單獨的屬性,分別設定上、右、下、左內邊距:

        • padding-top

        • padding-right

        • padding-bottom

        • padding-left

          h1{
              padding-top:10px;  /* px 是畫素,相對於顯示器螢幕解析度而言。 */
              padding-right:0.25em;  /* em 是相對長度,相對於當前元素內文字的字型尺寸 */
              padding-bottom:2ex;  /* ex 相對長度單位。相對於字元“x”的高度。此高度通常為字型尺寸的一半 */
              padding-left:20%;
          }
          
  • 案例

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <style type="text/css">
            .test1 {
                padding: 1.5cm;
            }
    
            .test2 {
                padding: 1.5cm 0.5cm;
            }
    
            .test3{
                padding:0px 10px 20px 40px;
            }
        </style>
        <title>內邊距</title>
    </head>
    
    <body>
        <table border="1">
            <tr>
                <td class="test1">
                    這個表格單元的每個邊擁有相等的內邊距1.5cm。
                </td>
            </tr>
        </table>
        <br />
        <table border="1">
            <tr>
                <td class="test2">
                    這個表格單元的上和下內邊距是 1.5cm,左和右內邊距是 0.5cm。
                </td>
            </tr>
        </table>
        <br />
        <table border="1">
            <tr>
                <td class="test3">
                    這個表格單元的上和下內邊距相同。
                </td>
            </tr>
        </table>
    </body>
    
    </html>
    

  • border邊框

    • 樣式border-style,邊框樣式有以下這些種類:

      • none:無邊框,預設值

      • hidden:隱藏邊框,常用於解決邊框衝突。

      • dotted:點線邊框,在很多瀏覽器中會呈現實線。

      • dashed:虛線邊框,在很多瀏覽器中會呈現實線。

      • solid:實線邊框。

      • double:雙線邊框。

      • groove:定義3D凹槽邊框,效果和border-color、border-width值相關。

      • ridge:定義3D壟狀邊框,效果和border-color、border-width值相關。

      • inset,定義3D inset邊框,效果和border-color、border-width值相關。

      • outset,定義3D outset邊框,效果和border-color、border-width值相關。

      • inherit,從父元素繼承邊框樣式。

      • 邊框風格可以分別定義,順序是上、右、下、左,案例如下:

        p.aside{border-style:solid dotted dashed double;}  /* 上實線,右點線 下虛線 左雙線 */
        
      • 定義單邊樣式:

        • border-top-style
        • border-right-style
        • border-bottom-style
        • border-left-style
    • 寬度border-width

      • 通過border-width屬性為邊框指定寬度。

      • 可定義單邊寬度

        • 按照top-right-bottom-left的順序設定元素的各邊邊框。
      • 也可以通過屬性分別設定邊框的寬度

        • bordder-top-width

        • bordder-right-width

        • bordder-bottom-width

        • bordder-left-width

          案例:

          p{
              border-style:solid;
              bordder-top-width:15px;
              bordder-right-width:5px;
              bordder-bottom-width:15px;
              bordder-left-width:5px;
          }
          
      • 注意:如果沒指定邊框樣式,那就沒有寬度。若希望邊框出現,就必須宣告一個邊框樣式。例如:

        • p {border-style:none;border-width:50px}
          
        • 儘管給邊框指定了寬度為50px,但由於邊框樣式為none,此時不僅邊框樣式不存在且寬度也會變成0——即邊框消失了。

    • 顏色border-color

      • CSS使用一個簡單的border-color屬性,它一次可接受最多4個顏色值,即上、右、下、左這四條邊的顏色。

        p{
            border-style:solid;
            border-color:blue rgb(25%,35%,45%) #909090 red;
        }
        
      • 定義單邊顏色。

        • bordder-top-color

        • bordder-right-color

        • bordder-bottom-color

        • bordder-left-color

          h1{
              border-style:solid;
              border-color:black;
              border-right-color:red;
          }
          
      • 透明邊框:transparent。這個顏色用於建立有寬度的不可見邊框。

        a:link,a:visited{
            border-stye:solid;
            border-width:5px;
            border-color:transparent;
        }
        a:hove {border-color:gray;}
        
  • margin外邊距

    • 圍繞在元素邊框的空白區域是外邊距。

    • 圍繞外邊距會在元素外建立額外的“空白”

    • 設定外邊距的最簡單方法是使用margin屬性,這個屬性接受任何長度單位、百分比數值設定負值。

    • 設定規則:

      • 若缺少左外邊距的值,則使用右外邊距的。
      • 若缺少下外邊距的值,則使用上外邊距的。
    • 單邊外邊距屬性:

      • margin-top

      • margin-right

      • margin-bottom

      • margin-left

        h2{
            margin-top:20px;
            margin-right:30px;
            margin-bottom:30px;
            margin-left:20px;
        }
        
    • CSS外邊距合併

      • 外邊距合併指的是,當一個元素出現在另一個元素上面時,第一個元素的下外邊距與第二個元素的上外邊距會發生合併。

      • 合併後外邊距的高度等於兩個發生合併的外邊距的高度中較大者。

+ 當一個元素包含在另一個元素中時(假設沒有內邊距或邊框把外邊距分隔開),它們的上外邊距和下外邊距也會發生合併。

  • 外邊距合併的意義

    • 若沒有外邊距合併,後續所有段落之間的外邊距都將是相鄰上外邊距和下外邊距的和。這意味著段落之間的空間是頁面頂部的兩倍。

    • 若外邊距合併,段落之間的上外邊距和下外邊距就合併在一起,這樣各處的距離就一致了。

+ 只有普通文件流中塊框的垂直外邊距才會發生外邊距合併。行內框、浮動框或絕對定位之間的外邊距不會合並。

小結

  • CSS盒模型,把頁面元素當作“盒子”,則元素有:
    • 邊界(margin)、
    • 邊框(border)、
    • 填充(padding)、
    • 元素內容(content)
  • 盒子具有4條邊,所以這些屬性都各有4個單邊子屬性,在使用時可以直接對某一條邊應用單邊子屬性設定其樣式,也可以按照一定順序依次設定各邊的樣式,設定方式比較靈活。