HTML-CSS布局-4

HTML-CSS布局相關元素小心得

<pre>
在這里分享給大家一些HTML-CSS的相關知識,供新人學習,老人查閱,共勉。
------DanlV
</pre>

標準文檔流

網頁在解析的時候,遵循從上向下,從左向右的一個順序,而這個順序就是標準文檔流。 標準文檔流 -- 》 定義了標簽的特性以及網頁的解析順序 。標準文本流 -- 》 指的是網頁中文字
如果想要讓行內元素和塊級元素不再遵循本身的特性,除了轉換 (display)以外,還可以通過float和position來實現。*因為通過float(浮動) 和 position(定位) 可以讓元素脫離"標準文檔流"。
TIPS:
1. position 定位可以讓元素即擴里文檔流,也脫離文本流
2.float 讓元素脫離了標準文檔流,但是沒有讓元素脫離標準文本流

遵循規則

  • 網頁解析順序 :上 - > 下 左 -> 右
  • 塊級元素和行內元素的規則:
    1.塊級元素自己霸占一行 ,不能與其他元素并列顯示;可以設置寬度和高度;如果不設置寬度,塊級元素會默認沾滿整個父元素的寬;
    2.行內元素能夠與其他的行內元素并排顯示;不能夠設置寬度和高度,寬度是內容的寬度,高度是內容的高度;
  • 高矮不齊,底邊對其
  • 單詞寫滿一行,自動換行
  • 如果單詞沒有寫完(沒有空格),那么單詞不換行
  • 一個元素擺脫標準文檔流限制的三種方式
    1.浮動
    2.絕對定位
    3.固定定位

盒子模型

CSS盒子模型就是在網頁設計中經常用到的CSS技術所使用的一種思維模型。
我們把網頁中任意一個元素都稱之為盒子模型。

原理

內容(content)、填充(padding)、邊框(border)、邊界(margin), CSS盒子模式都具備這些屬性。
這些屬性我們可以把它轉移到我們日常生活中的盒子(箱子)上來理解,日常生活中所見的盒子也就是能裝東西的一種箱子,也具有這些屬性,所以叫它盒子模式。

屬性

1.width、height指的是盒子中內容的寬度和高度
2.padding--內邊距指的是內容距離盒子邊框的距離 (在寫css代碼的時候,能夠使用簡寫就不要使用其他的寫法。)

width: 300px;
height: 300px;
border: 2px solid purple;
background-color: orange;
margin: 1px;
/*上下左右內邊距都死10px*/
padding: 10px;
/*上下為10px 左右為20px*/
padding: 10px 20px;
/*上為10px 左右為20px 下為30px*/
padding: 10px 20px 30px;
/*上為10px 左為20px 下為30px 右為40px*/
padding: 10px 20px 30px 40px;

3.margin塌陷現象:兩個盒子分別設置左邊距,右邊距,顯示的結果顯示值大的一個邊距。

div {
    width: 300px;
    height: 200px;
    /*display: inline-block;*/
    float: left;
}
.d1 {
    background-color: red;
    /*margin-bottom: 20px;*/
    margin-right: 20px;
}
.d2 {
    background-color: blue;
    /*margin-top: 30px;*/
    margin-left: 10px;
}

<div class="d1"></div>
<div class="d2"></div>

4.盒子居中
.test {
width: 300px;
height: 300px;
background-color: red;
margin: 100px auto;/將左右的margin設置為auto將會居中/
}
<div class="test"></div>

浮動

浮動,讓元素脫離標準文檔流,float:left/right。

浮動的特性

  • 元素脫離標準文檔流
  • 存在相互貼靠的效果
  • 字圍

清除浮動方案

因為浮動會使當前標簽產生向上浮的效果,同時會影響到前后標簽、父級標簽的位置及 width height 屬性。
而且同樣的代碼,在各種瀏覽器中顯示效果也有可能不相同,這樣讓清除浮動更難了。
解決浮動引起的問題有多種方法,但有些方法在瀏覽器兼容性方面還有問題。

  • 父級定義height,只適合高度固定的布局,要給出精確的高度,如果高度和父級div不一樣時,會產生問題

  • 父級元素結尾處加空div標簽設屬性clear:both(內墻法)

  • 父級元素之后加空div標簽設屬性clear:both(外墻法)

    <style>
    li {
    list-style: none;
    }

          .box1 ul li {
              float: left;
              width: 30px;
              height: 40px;
              margin-left: 10px;
              background-color: orange;
          }
          
          .clear {
              clear: both;
          }
      </style>
    

    </head>
    <body>
    <div class="box1">
    <ul>
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <li>4</li>
    </ul>


    </div>

    <div class="clear"></div>

      <div class="box2">
          <ul>
              <li>11</li>
              <li>22</li>
              <li>33</li>
              <li>44</li>
          </ul>
      </div>
    

    </body>

  • 父級div定義偽類:after和zoom
     <style type="text/css"> 
       .div1 {
            background: #000080;
            border: 1px solid red;
            }
       .div2 {
            background: #800080;
            border: 1px solid red;
            height: 100px;
            margin-top: 10px
            }
       .left {
            float: left;
            width: 20%;
            height: 200px;
            background: #DDD
            }
       .right {
            float: right;
            width: 30%;
            height: 80px;
            background: #DDD
            }
       
       /*清除浮動代碼*/
       .clearfloat:after{
            display: block;
            clear: both;
            content: "";
            visibility: hidden;
            height: 0
            }
       .clearfloat { 
            zoom: 1
            }
       </style> 
    <div class="div1 clearfloat"> 
    <div class="left">Left</div> 
    <div class="right">Right</div> 
    </div>
    <div class="div2">
       div2
    </div>
  • 父級div定義overflow:hidden,不能和position配合使用,因為超出的尺寸的會被隱藏

  • 父級div定義overflow:auto,內部寬高超過父級div時,會出現滾動條

  • 父級div也一起浮動,可能會產生新的浮動問題

  • 父級div定義display:table,將div屬性變成表格,可能產生新的未知問題

      <style type="text/css"> 
         .div1 {
          background: #000080;
          border: 1px solid red;
          width: 98%;
          /*解決代碼*/
          display: table;
          margin-bottom: 10px;
          }
         .div2 {
          background: #800080;
          border: 1px solid red;
          height: 100px;
          width: 98%;
         }
         
         .left {
          float: left;
          width: 20%;
          height: 200px;
          background: #DDD
         }
      
         .right {
          float:  right;
          width: 30%;
          height: 80px;
          background: #DDD
         }
         </style> 
      <div class="div1"> 
      <div class="left">Left</div> 
      <div class="right">Right</div>
      </div>
      <div class="div2">
         div2
      </div>
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標簽默認的外補...
    _Yfling閱讀 13,796評論 1 92
  • 一、在什么場景下會出現外邊距合并?如何合并?如何不讓相鄰元素外邊距合并?給個父子外邊距合并的范例 在CSS當中,相...
    dengpan閱讀 597評論 0 0
  • 前言: 1.HTML5的發展非常迅速,可以說已經是前端開發人員的標配,在電商類型的APP中更是運用廣泛,這個系列的...
    珍此良辰閱讀 1,937評論 2 15
  • 1.行內元素和塊級元素?img算什么?行內元素怎么轉化為塊級元素? 行內元素:和有他元素都在一行上,高度、行高及外...
    極樂君閱讀 2,452評論 0 20
  • 今天吳春花老師上了一堂研討課《巨人的花園》,將語文課堂教學滲透心理學知識,首先這種探索的勇氣令我敬佩。 ...
    美廷閱讀 235評論 0 2