多方法解決設置width:100%再設置margin或padding溢出的問題

當設置了父元素的寬度,子元素設置寬度爲100%後再在加上子元素上添加padding或margin值就會溢出。舉個例子:css

<!-- 示例 -->

<!-- html -->
<div class="parent">
    <div class="child"></div>
</div>

<!-- css -->
.parent {
    width: 500px;
    height: 50px;
    background-color: green;
    border: 1px solid #E74D4D;
}
.child {
    width: 100%;
    height: 30px;
    margin: 20px;
    background-color: pink;
}

示例html

這是由於設置了width: 100%;後已經將父元素佔滿,再添加margin值就會溢出(默認溢出值爲左側的margin值)css3

解決方法:瀏覽器

  1. 父元素設置padding
<!-- 弊端是增長了parent佔用的寬度 -->
.parent {
      width: 500px;
      height: 50px;
      padding: 20px;
      background-color: green;
      border: 1px solid #E74D4D;
}
.child {
      width: 100%;
      height: 30px;
      background-color: pink;
}
  1. [ 推薦 ]利用css3中的box-sizing: border-box; 屬性解釋連接
    設置他之後,至關於以怪異模式解析,borderpadding全會在你設置的寬度內部。
.parent {
      width: 500px;
      height: 50px;
      padding:20px;
      background-color: green;
      border: 1px solid #E74D4D;
      box-sizing: border-box;
}
.child {
      width: 100%;
      height: 30px;
      background-color: pink;
}
  1. 子元素外添加一個div
<div class="parent">
      <div class="child2">    <!-- 設置margin: 20px; -->
          <div class="child"></div>
      </div>
</div>

** end **spa


下面是彩蛋。。。.net

我在舉這個例子的時候發現了一個css hack(針對不一樣的瀏覽器/不一樣版本寫相應的CSS code的過程):父元素與子元素之間的margin-top問題
html代碼ssr

<div class="box1"> 
    <div class="box2"></div> 
</div>

css樣式code

.box1{height:200px;width:200px;background:gray;} 
.box2{height:100px;width:100px;background:gold;margin-top:50px;}

結果htm

示例blog

 

父元素的盒子包含一個子元素盒子,給子元素盒子一個垂直外邊距margin-top,父元素盒子也會往下走margin-top的值,而子元素和父元素的邊距則沒有發生變化。

解決方法:

  1. 修改父元素的高度,增長padding-top樣式模擬(padding-top:1px;經常使用)
  2. 爲父元素添加overflow:hidden;樣式便可(完美)
  3. 爲父元素或者子元素聲明浮動(float:left;可用)
  4. 爲父元素添加border(border:1px solid transparent可用)
  5. 爲父元素或者子元素聲明絕對定位

 

ps:

子元素設置margin-top後,父元素跟隨下移的問題

https://www.cnblogs.com/bluey/p/6417922.html

css中hack是什麼

https://www.cnblogs.com/Renyi-Fan/p/9006084.html

相關文章
相關標籤/搜索