整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          CSS基礎-盒模型

          有的HTML標簽都可以看成矩形盒子,由width,height,padding,border構成,稱為盒模型

          盒子的總寬度 = width + 左右padding + 左右border

          盒子的總高度 = height + 上下pading + 上下border

          width

          表示盒子內容的寬度。

          width屬性的單位通常是px,也會涉及到 百分數、rem等單位。

          當塊級元素(div,h系列,li 等)沒有設置width屬性的時候,它將自動撐滿,但這并不意味著width可以被繼承。

          height

          表示盒子內容的高度

          height屬性的單位通常是px,也會涉及到 百分數、rem等單位

          當塊級元素(div,h系列,li 等)沒有設置height屬性的時候,它將自動撐滿,但這并不意味著height可以被繼承。

          padding

          padding 是盒子的那邊距,即盒子邊框內壁到內部文字(或者子元素)的距離

          四個方向的padding,可以分別用小屬性進行設置

          小屬性

          意義

          padding-top

          上padding

          padding-right

          右padding

          padding-bottom

          下padding

          padding-left

          左padding


          <!--小屬性demo-->
          <style>
          
          
              .box1 {
                  width: 200px;
                  height: 200px;
                  background-color: red;
                  padding-left: 20px;
                  padding-top: 30px;
                  padding-bottom: 40px;
                  padding-right: 50px;
              }
          </style>
          
          
          
          
          <div class="box1"></div>


          padding 合并寫法

          <!--padding合并寫法-->
          <!--      上   右   下   左-->
          padding: 10px 10px 10px 10px;
          
          
          <!--      上  左右  下-->
          padding: 10px 20px 10px;
          
          
          
          
          <!--     上下 左右 -->
          padding: 10px 20px


          margin

          margin 是盒子的外邊距,即盒子和其他盒子間的距離。

          margin 的四個方向

          屬性名稱

          解釋

          margin-top

          上 margin,向上擴展

          margin-right

          右margin, 向右擴展

          margin-bottom

          下margin, 向下擴展

          margin-left

          左margin, 向左擴展

          兩個盒子之間的,margin 不會疊加,只以大的margin的值為準。


          一些元素都有默認的margin,在開始制作網頁的時候,要清除他們,比如 body、ul、p等


          實踐:盒子實現水平居中的實現方式

          <!-- 主要是 auto屬性-->
          .box1 {
              margin: 10px auto;
          }


          box-sizing 屬性

          默認值為 content-box , 此時的width和height 表示的是去除掉 邊框和內邊距后剩余的空間。


          如上圖,一個盒子 默認情況下, 它留給子元素的空間就是 寬300像素,高200像素的可用面積。即 width 和 height屬性的區域。


          box-sizing: border-box


          如果添加了 如上的屬性后,此時留給子元素的可用空間只有 寬270px 、高170px了。可用面積 面積 = (width - pading * 2 - border * 2) * (height - pading * 2 - border* 2) 。

          也就是 width和height 就是 盒子的全部高度和寬度

          <!--小屬性demo, 此時留給孩子的實際可用面積是 寬270px = (300px-(10px*2)-(5px*2)) 高 170px = (200px-(10px*2)-(5px*2)) 了-->
          <style>
          
          
              .box1 {
                  width: 300px;
                  height: 200px;
                  padding: 10px;
                  border: 5px solid red;
                  margin: auto;
                  box-sizing: border-box;
              }
          </style>
          <div class="box1">
          </div>


          display 屬性


          塊級元素

          • 獨占一行,并且有寬高的區域。
          • 特點:如果不設置寬高,會被內容元素自動撐滿。
          • 例如:div、section等。

          行內元素

          • 可以和其他的行內元素并排顯示。
          • 特點:無法設置寬高。
          • 例如 span 等。


          行內塊

          img 是特殊的行內塊,他們既能設置寬度和高度,也能并排顯示。


          行內元素和塊級元素的相互轉換

          元素

          規則

          display:block

          將元素轉為塊級元素

          display:inline

          將元素轉為行內元素,轉為行內元素的情況并不多見

          display:inline-block

          將元素轉為行內塊

          display:none

          隱藏元素,元素會把位置也放棄


          將行內元素轉塊級元素

          <!--一個將行內元素轉為塊級元素的例子-->
          .clickA {
              display: block;
              width:200px;
              height: 200px;
              background-color: red;
          }
          
          
          <a href="#" class="clickA">我是點擊</a>


          隱藏元素的兩種寫法

          天帶大家快速理解盒子模型,直接上代碼:

          <!doctype html><html>
              <head>
                  <meta charset="utf-8" />
                  <title>css盒子</title>
                  <meta name="keywords" content="關鍵詞,關鍵詞" />
                  <meta name="description" content="" />
                  <link rel="stylesheet" href="css/index.css" />
              </head>
              <body>
                  <div>我的css盒子測試模型</div>
              </body></html>
          

          上面代碼沒有任何難度,只是寫了一個div標簽,大家已經知道,div標簽是塊級元素,所以會占滿一行:

          但是我們也注意到了圖片的左側其實還是有一些間隙的:

          這個間隙在我們預期中是不應該存在的,這種間隙基本上就是出在margin或者padding或者border上。

          我們先看開發者工具的右側:

          上面有一個element.style{},下面有一個div標簽的屬性,默認display: block。上面那個是干什么用的呢?我們修改一下代碼:

          <div style="border: 1px solid red">我的css盒子測試模型</div>
          

          然后再刷新頁面看:

          這下我們就知道了,這個element.style就是我們寫在代碼里的屬性。但是我們一般不會這么寫,也就是大家在寫代碼的時候把所有屬性都放到css文件中為好,不要讓這個element.style有任何內容。

          下面還有一個方框:

          這個框就是目前這個css盒子的具體屬性,比如寬度等信息。

          • margin:外邊距
          • border:邊框
          • padding:內邊距

          也就是說一個完整的盒子模型大小是由這三個參數值共同決定的。現在我們修改代碼:

          lesson4.html

          <div id="mydiv">我的css盒子測試模型</div>
          

          原代碼不變,只是給div加一個id。

          index.css

          *{}#mydiv{    width: 100px;    height: 100px;        background-color: #000;        color:#fff;}
          

          然后我們刷新頁面:

          下面盒子區域也會隨之變化:

          我們看到內容區域大小變成了100*100,而padding、border、margin都為0,我們來修改這三個值,再看效果:

          *{}#mydiv{    width: 100px;        height: 100px;        background-color: #000;        color:#fff;        padding: 10px;}
          

          盒子大小由原來的100*100變為120*120了。

          padding為內邊距,我們看到文字和邊緣有了10像素的距離:

          從上面圖片看到,padding屬性也是分為上下左右的,所以這個padding其實是分為padding-left、padding-right、padding-top、padding-bottom。

          如果四個方向邊距都不一樣,我們寫四個有點太累贅了,所以我們可以這樣寫:

          padding: 10px 20px 30px 40px;
          

          可以看到,四個值從左到右分別代表:上、右、下、左,也就是順時針走的邊距。只要這樣寫的方式,都是這種順時針代表的。

          如果你寫

          padding: 10px 20px;
          

          就代表上下10px,左右20px。

          這些大家試一下就知道了。

          border代表邊框。

          #mydiv{    width: 100px;        height: 100px;        background-color: #000;        color:#fff;        padding: 10px 20px;        border: 10px solid red;}
          

          border: 10px solid red;代表上下左右都是10像素、實線、紅色。如果要四個邊框不一樣就只能一個一個寫了:

          #mydiv{    width: 100px;        height: 100px;        background-color: #000;        color:#fff;        padding: 10px 20px;        border-top: 10px solid #f00;        border-left: 10px solid #0f0;        border-right: 10px solid #00f;        border-bottom: 10px solid #bbb;}
          

          增加了border以后盒子大小也會變化:

          由于現在瀏覽器有可能會自動給你的代碼加上margin或者padding,我們經常在css文件中先設置一下這兩個屬性值為0:

          html, body{
              margin: 0px;
              padding: 0px;
          }
          

          此時,我們再看一下,樣式:

          lesson4.html

          <!DOCTYPE html><html><head>
              <meta charset="utf-8">
              <title>Css盒子模型</title>
              <meta name="keywords" content="key1, key2">
              <meta name="description" content="">
              <link rel="stylesheet" type="text/css" href="css/index.css"></head><body>
              <div id="mydiv">我的css盒子測試模型</div></body></html>
          

          index.css

          *{}html, body{    margin: 0px;        padding: 0px;}#mydiv{    width: 100px;        height: 100px;        background-color: #000;        color:#fff;        padding: 10px 20px;        border-top: 10px solid #f00;        border-left: 10px solid #0f0;        border-right: 10px solid #00f;        border-bottom: 10px solid #bbb;}
          

          此時,樣式就會緊貼著瀏覽器邊緣了:


          有時候我們也會這樣寫:

          index.css

          *{
              margin: 0px;
              padding: 0px;
          }
          
          html,body{
              width: 100%;
              height: 100%;
          }
          
          #mydiv{
              width: 100px;
              height: 100px;
              background-color: #000;
              color:#fff;
              padding: 10px 20px;
              border-top: 10px solid #f00;
              border-left: 10px solid #0f0;
              border-right: 10px solid #00f;
              border-bottom: 10px solid #bbb;
          }
          

          這樣一來,我們盒子模型的大小就會隨著瀏覽器窗口的大小而自適應了。再來說一下外邊距——margin,我們修改我們的代碼為:

          lesson4.html

          <!DOCTYPE html><html><head>
              <meta charset="utf-8">
              <title>Css盒子模型</title>
              <meta name="keywords" content="key1, key2">
              <meta name="description" content="">
              <link rel="stylesheet" type="text/css" href="css/index.css"></head><body>
              <div class="mydiv">我的css盒子測試模型1</div>
              <div class="mydiv">我的css盒子測試模型2</div></body></html>
          

          index.css

          *{
              margin: 0px;
              padding: 0px;
          }
          
          html,body{
              width: 100%;
              height: 100%;
          }
          
          div.mydiv{
              width: 100px;
              height: 100px;
              background-color: #000;
              color:#fff;
              padding: 10px 20px;
              border-top: 10px solid #f00;
              border-left: 10px solid #0f0;
              border-right: 10px solid #00f;
              border-bottom: 10px solid #bbb;
          }
          

          我們看一下效果:

          兩個盒子分別在兩行出現,那么如果我想把這兩個盒子放到一行,我要怎么辦呢?我的第一個想法是把display屬性改為inline,但是發現改后樣式變為:

          這是因為行內元素是不能修改寬和高的,這時候我們用display: inline-block就可以了:

          現在又出現了另一個問題,就是大家發現上面兩個盒子中間多了一個空白的地方,而且空白地方無法選中,說實話如果你用inline-block那么中間這個間距就是默認自帶的了(如果非要去掉就要加float: left或者margin: -10;)。

          現在我們盒子和瀏覽器邊緣是沒有間距的,現在我們希望它離瀏覽器有一段距離,我們加一個margin: 10px;屬性,然后再看:

          我們看到它和瀏覽器之間有了邊距,我們再來看一下現在盒子的大小:

          盒子現在的大小是160*140

          可以看到盒子的大小是沒有計算最外層的margin屬性的也就是

          160=100+202+102;140=100+102+102

          所以說margin是盒子的外邊距,在盒子外面,不算做盒子大小的。

          現在大家就掌握了盒子模型的所有基礎概念了。

          如果對接口、性能、自動化測試、面試經驗交流等感興趣的,可以關注我的頭條號,我會不定期的發放免費的資料,這些資料都是從各個技術網站搜集、整理出來的,如果你有好的學習資料可以私聊發我,我會注明出處之后分享給大家。歡迎分享,歡迎評論,歡迎轉發。需要資料的同學可以關注小編+轉發文章+私信【測試資料】

          種盒模型

          我們在盒模型的屬性中提到過標準盒模型, 這是因為除了標準盒模型外, 還有在IE瀏覽器中使用的怪異盒模型。我們現在用一段代碼分別演示這兩種盒模型。

          <html>
          <head>
          <style>
          div{
              width: 200px;
              height: 100px;
              padding: 10px;
              border: 1px solid #000;
              margin: 20px;
          }
          .content-box{
              box-sizing: content-box;
          }
          .border-box{
              box-sizing: border-box;
          }
          </style>
          </head>
          <body>
          <!-- 標準盒模型 -->
          <div class="content-box">
          我是content-box
          </div>
          <!-- 怪異盒模型 -->
          <div class="border-box">
          我是border-box
          </div>
          </body>
          </html>

          這兩個盒子中, 使用了 box-sizing:content-box; 屬性的就是標準模式, 用了 box-sizing:border-box; 屬性的就是怪異模式。

          標準盒模型, 標準盒模型這個標準是由 W3C 組織制定的, 現在除了低版本IE以外, 基本所有瀏覽器都遵循這個標準。

          標準盒模型中, width 和 height 屬性所指定的寬高就是實際內容區的大小,

          而盒子實際大小是: 橫向空間:width + padding寬度 + border寬度

          縱向空間:height + padding寬度 + border寬度




          怪異盒模型, 怪異盒模型是微軟在 IE6、7、8 中使用的一種盒模型, 所以也把怪異盒模型叫做 IE盒模型。

          在怪異模式下,width 和 height 做指定的寬高就是盒子的實際寬高, 而它內容區部分的大小是在 width 或 height 指定尺寸的基礎上, 再減去 border 和 padding 所占的寬度。

          頁面的加載和渲染全過程 當我們在瀏覽器里輸入一個 URL 后, 最終會呈現一個完整的網頁。

          這中間會經歷如下的過程:

          1 HTML 的加載

          輸入 URL 后, 最先拿到的是 HTML 文件。HTML是一個網頁的基礎, 所以要在最開始的時候下載它。

          HTML下載完成以后就會開始對它進行解析。

          2 其他靜態資源下載

          HTML 在解析的過程中, 如果發現 HTML 文本里面夾雜的一些外部的資源鏈接, 比如 CSS、JS 和圖片等時, 會立即啟用別的線程下載這些靜態資源。

          這里有個特殊的是 JS 文件, 當遇到 JS 文件的時候,HTML 的解析會停下來, 等 JS 文件下載結束并且執行完, HTML 的解析工作再接著來。

          這樣做是因為 JS 里可能會出現修改已經完成的解析結果, 有白白浪費資源的風險,所以 HTML 解析器干脆等 JS 折騰完了再干。

          3 DOM 樹構建

          在 HTML 解析的同時, 解析器會把解析完的HTML轉化成DOM 對象, 再進一步構建 DOM 樹。

          4 CSSOM 樹構建

          當 CSS 下載完, CSS 解析器就開始對 CSS 進行解析, 把 CSS 解析成 CSS 對象, 然后把這些 CSS 對象組裝起來, 構建出一棵 CSSOM 樹。

          5 渲染樹構建

          DOM 樹和 CSSOM 樹都構建完成以后, 瀏覽器會根據這兩棵樹構建出一棵渲染樹。

          6 布局計算

          渲染樹構建完成以后,所有元素的位置關系和需要應用的樣式就確定了。這時候瀏覽器會計算出所有元素的大小和絕對位置。

          7 渲染

          布局計算完成以后,瀏覽器就可以在頁面上渲染元素了。比如從 (x1, y1) 到 (x2, y2)的正方形區域渲染成藍色。經過渲染引擎的處理后,整個頁面就顯示在了屏幕上。

          內聯樣式的權重是1000

          ID 選擇器里樣式的權重是100

          類選擇器、屬性選擇器和偽類選擇器里樣式的權重是10

          標簽選擇器里樣式的權重是1

          通用選擇器直接忽略


          主站蜘蛛池模板: 久久精品一区二区国产| 亚洲一区二区三区免费视频| 亚洲bt加勒比一区二区| 亚洲AV本道一区二区三区四区| 国产一在线精品一区在线观看| 91麻豆精品国产自产在线观看一区| 国产精品日本一区二区在线播放| 国产电影一区二区| 国产成人精品一区二三区在线观看| 相泽亚洲一区中文字幕| 秋霞日韩一区二区三区在线观看| 日本免费一区二区久久人人澡| 精品国产一区二区三区不卡| 精品少妇一区二区三区在线| 精品少妇人妻AV一区二区| 人体内射精一区二区三区| 国产91一区二区在线播放不卡| 国产丝袜美女一区二区三区| 久久se精品一区精品二区国产| 国产亚洲综合精品一区二区三区 | 国产99精品一区二区三区免费 | 中文字幕在线观看一区二区三区| 麻豆果冻传媒2021精品传媒一区下载 | 另类一区二区三区| 久久免费视频一区| 国产精品免费一区二区三区四区| 久久精品无码一区二区日韩AV | 中日av乱码一区二区三区乱码| 日本一区二区三区在线视频观看免费 | 国产精品综合一区二区三区| 无码人妻精品一区二区三区久久久 | 国产91久久精品一区二区| 日韩精品乱码AV一区二区| 日本内射精品一区二区视频| 无码国产精品一区二区免费式影视| 亚洲AV无码一区二区一二区| 麻豆精品一区二区综合av| 一区二区视频在线| 国产一区二区三区乱码在线观看| 国产在线精品一区二区在线看| 国产精品香蕉在线一区|