美丽的世界 發表於 2021-5-15 17:40:00

CSS学习11-盒子模型

<br>
<h2 id="盒子模型">盒子模型</h2>
<p>页面布局要学习三大核心,盒子模型,浮动和定位。学习好盒子模型能非常好的帮助我们布局页面。</p>
<br>
<h3 id="1-看透网页布局的本质">1. 看透网页布局的本质</h3>
<p>网页布局的过程:</p>
<ol>
<li>先准备好相关的网页元素,网页元素基本都是盒子Box</li>
<li>利用CSS设置好盒子样式,然后摆放到相应的位置。</li>
<li>往盒子里面装内容。</li>
</ol>
<p>网页布局的核心本质:就是利用CSS摆盒子。</p>
<br>
<h3 id="2-盒子模型--box-model--组成">2. 盒子模型 ( Box Model ) 组成</h3>
<p>所谓<font color="#dd0000">盒子模型</font>:就是把HTML页面中的布局元素看作是一个矩形的盒子,也就是一个盛装内容的容器。</p>
<p>CSS盒子模型本质上是一个盒子,封装周围的HTML元素,它包括:边框(border)、内边距(padding)、外边距(margin)和实际内容(content)。</p>
<p>下面的图片说明了盒子模型:</p>
<p><img src="https://i.loli.net/2021/05/14/1G385XsFTtZlkPy.png" alt="image-20210514153442602" loading="lazy"></p>
<p>不同部分的说明:</p>
<ul>
<li>盒子里面的文字和图片等元素是<strong>Content(内容)</strong></li>
<li>盒子的厚度 我们称为为盒子的<strong>Border(边框)</strong></li>
<li>盒子内容与边框的距离是<strong>Padding(内边距)</strong></li>
<li>盒子与盒子之间的距离是<strong>Margin(外边距)</strong></li>
</ul>
<br>
<h3 id="3-边框--border-">3. 边框 ( border )</h3>
<p><img src="https://i.loli.net/2021/05/14/krg4LKse8GTnvXx.png" alt="image-20210514154241249" loading="lazy"></p>
<p>border可以设置元素的边框。边框有三部分组成:边框宽度(粗细)、边框样式和边框颜色</p>
<p>语法:</p>
<pre><code class="language-html">border : border-width || border-style || border-color
</code></pre>
<table>
<thead>
<tr>
<th style="text-align: left">属性</th>
<th style="text-align: left">作用</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left">border-width</td>
<td style="text-align: left">定义边框粗细,单位是px</td>
</tr>
<tr>
<td style="text-align: left">border-style</td>
<td style="text-align: left">边框的样式</td>
</tr>
<tr>
<td style="text-align: left">border-color</td>
<td style="text-align: left">边框颜色</td>
</tr>
</tbody>
</table>
<p>示例代码</p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;

&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;meta http-equiv="X-UA-Compatible" content="IE=edge"&gt;
    &lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;
    &lt;title&gt;盒子模型之边框&lt;/title&gt;
    &lt;style&gt;
      div {
            width: 300px;
            height: 200px;
            /* border-width 边框的粗细 一般情况下都用 px */
            border-width: 5px;
            /* border-style 边框的样式 solid 实线边框dashed 虚线边框 dotted 点线边框 */
            border-style: solid;
            /* border-style: dashed; */
            /* border-style: dotted; */
            /* border-color 边框的颜色*/
            border-color: pink;

      }
    &lt;/style&gt;
&lt;/head&gt;

&lt;body&gt;
    &lt;div&gt;&lt;/div&gt;
&lt;/body&gt;

&lt;/html&gt;
</code></pre>
<p>运行效果</p>
<p><img src="https://i.loli.net/2021/05/14/BeTCpocxwOaYR3y.png" alt="image-20210514155637651" loading="lazy"></p>
<br>
<p>CSS边框属性允许你指定一个元素边框的<font color="#dd0000">样式</font>和<font color="#dd0000">颜色</font>。</p>
<p>边框简写:</p>
<pre><code class="language-html">border: 1px solid red;没有顺序要求
</code></pre>
<p>边框分开写法:</p>
<pre><code class="language-html">border-top: 1px solid red;/* 只设定上边框,其余同理 */
</code></pre>
<table>
<thead>
<tr>
<th style="text-align: left">上边框</th>
<th style="text-align: left">下边框</th>
<th style="text-align: left">左边框</th>
<th style="text-align: left">右边框</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left">border-top-style:样式;</td>
<td style="text-align: left">border-bottom-style:样式;</td>
<td style="text-align: left">border-left-style:样式;</td>
<td style="text-align: left">border-right-style:样式;</td>
</tr>
<tr>
<td style="text-align: left">border-top-width:宽度;</td>
<td style="text-align: left">border- bottom-width:宽度;</td>
<td style="text-align: left">border-left-width:宽度;</td>
<td style="text-align: left">border-right-width:宽度;</td>
</tr>
<tr>
<td style="text-align: left">border-top-color:颜色;</td>
<td style="text-align: left">border- bottom-color:颜色;</td>
<td style="text-align: left">border-left-color:颜色;</td>
<td style="text-align: left">border-right-color:颜色;</td>
</tr>
<tr>
<td style="text-align: left">border-top:宽度 样式 颜色;</td>
<td style="text-align: left">border-bottom:宽度 样式 颜色;</td>
<td style="text-align: left">border-left:宽度 样式 颜色;</td>
<td style="text-align: left">border-right:宽度 样式 颜色;</td>
</tr>
</tbody>
</table>
<p>示例代码1</p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;

&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;meta http-equiv="X-UA-Compatible" content="IE=edge"&gt;
    &lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;
    &lt;title&gt;边框的复合写法&lt;/title&gt;
    &lt;style&gt;
      div {
            width: 300px;
            height: 200px;
            /* border-width: 5px; */
            /* border-style: solid; */
            /* border-color: pink; */
            /* 边框的复合写法 简写 */
            /* border: 5px solid pink; */
            /* 上边框 */
            border-top: 5px solid pink;
            /* 下边框 */
            border-bottom: 10px dashed purple;
      }
    &lt;/style&gt;
&lt;/head&gt;

&lt;body&gt;
    &lt;div&gt;&lt;/div&gt;
&lt;/body&gt;

&lt;/html&gt;
</code></pre>
<p>运行效果</p>
<p><img src="https://i.loli.net/2021/05/14/Yl9qij2aohvtXeZ.png" alt="image-20210514155537004" loading="lazy"></p>
<br>
<p>示例代码2</p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;

&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;meta http-equiv="X-UA-Compatible" content="IE=edge"&gt;
    &lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;
    &lt;title&gt;边框的练习&lt;/title&gt;
    &lt;style&gt;
      /* 请给一个 200*200 的盒子,设置上边框为红色,其余边框为蓝色 */
      div {
            width: 200px;
            height: 200px;
            /* border包含四条边 */
            border: 1px solid blue;
            /* 层叠性 只是层叠了 上边框啊 */
            border-top: 1px solid red;
      }
    &lt;/style&gt;
&lt;/head&gt;

&lt;body&gt;
    &lt;div&gt;&lt;/div&gt;
&lt;/body&gt;

&lt;/html&gt;
</code></pre>
<p>运行效果</p>
<p><img src="https://i.loli.net/2021/05/14/IjdOmxQey8awZCz.png" alt="image-20210514155505913" loading="lazy"></p>
<br>
<h3 id="4-表格的细线边框">4. 表格的细线边框</h3>
<p><font color="#dd0000">border-collapse</font>属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框。</p>
<p>语法:</p>
<pre><code class="language-html">border-collapse:collapse;
</code></pre>
<ul>
<li><code>collapse</code> 单词是合并的意思</li>
<li><code>border-collapse: collapse;</code>表示相邻边框合并在一起</li>
</ul>
<p>示例代码</p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;

&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;meta http-equiv="X-UA-Compatible" content="IE=edge"&gt;
    &lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;
    &lt;title&gt;今日小说排行榜&lt;/title&gt;
    &lt;style&gt;
      table {
            width: 500px;
            height: 249px;
      }

      th {
            height: 35px;
      }

      table,
      td,
      th {
            border: 1px solid pink;
            /* 合并相邻的边框 */
            border-collapse: collapse;
            font-size: 14px;
            text-align: center;
      }
    &lt;/style&gt;
&lt;/head&gt;

&lt;body&gt;
    &lt;table align="center" cellspacing="0"&gt;
      &lt;thead&gt;
            &lt;tr&gt;
                &lt;th&gt;排名&lt;/th&gt;
                &lt;th&gt;关键词&lt;/th&gt;
                &lt;th&gt;趋势&lt;/th&gt;
                &lt;th&gt;进入搜索&lt;/th&gt;
                &lt;th&gt;最近七日&lt;/th&gt;
                &lt;th&gt;相关链接&lt;/th&gt;
            &lt;/tr&gt;
      &lt;/thead&gt;

      &lt;tbody&gt;
            &lt;tr&gt;
                &lt;td&gt;1&lt;/td&gt;
                &lt;td&gt;鬼吹灯&lt;/td&gt;
                &lt;td&gt;&lt;img src="down.jpg"&gt;&lt;/td&gt;
                &lt;td&gt;456&lt;/td&gt;
                &lt;td&gt;123&lt;/td&gt;
                &lt;td&gt;&lt;a href="#"&gt;贴吧&lt;/a&gt; &lt;a href="#"&gt;图片&lt;/a&gt; &lt;a href="#"&gt;百科&lt;/a&gt; &lt;/td&gt;
            &lt;/tr&gt;

            &lt;tr&gt;
                &lt;td&gt;2&lt;/td&gt;
                &lt;td&gt;盗墓笔记&lt;/td&gt;
                &lt;td&gt;&lt;img src="down.jpg"&gt;&lt;/td&gt;
                &lt;td&gt;124&lt;/td&gt;
                &lt;td&gt;675432&lt;/td&gt;
                &lt;td&gt;&lt;a href="#"&gt;贴吧&lt;/a&gt; &lt;a href="#"&gt;图片&lt;/a&gt; &lt;a href="#"&gt;百科&lt;/a&gt; &lt;/td&gt;
            &lt;/tr&gt;

            &lt;tr&gt;
                &lt;td&gt;3&lt;/td&gt;
                &lt;td&gt;西游记&lt;/td&gt;
                &lt;td&gt;&lt;img src="up.jpg"&gt;&lt;/td&gt;
                &lt;td&gt;212&lt;/td&gt;
                &lt;td&gt;7654&lt;/td&gt;
                &lt;td&gt;&lt;a href="#"&gt;贴吧&lt;/a&gt; &lt;a href="#"&gt;图片&lt;/a&gt; &lt;a href="#"&gt;百科&lt;/a&gt; &lt;/td&gt;
            &lt;/tr&gt;

            &lt;tr&gt;
                &lt;td&gt;4&lt;/td&gt;
                &lt;td&gt;东游记&lt;/td&gt;
                &lt;td&gt;&lt;img src="up.jpg"&gt;&lt;/td&gt;
                &lt;td&gt;23&lt;/td&gt;
                &lt;td&gt;75645&lt;/td&gt;
                &lt;td&gt;&lt;a href="#"&gt;贴吧&lt;/a&gt; &lt;a href="#"&gt;图片&lt;/a&gt; &lt;a href="#"&gt;百科&lt;/a&gt; &lt;/td&gt;
            &lt;/tr&gt;

            &lt;tr&gt;
                &lt;td&gt;5&lt;/td&gt;
                &lt;td&gt;甄嬛传&lt;/td&gt;
                &lt;td&gt;&lt;img src="down.jpg"&gt;&lt;/td&gt;
                &lt;td&gt;121&lt;/td&gt;
                &lt;td&gt;7676&lt;/td&gt;
                &lt;td&gt;&lt;a href="#"&gt;贴吧&lt;/a&gt; &lt;a href="#"&gt;图片&lt;/a&gt; &lt;a href="#"&gt;百科&lt;/a&gt; &lt;/td&gt;
            &lt;/tr&gt;

            &lt;tr&gt;
                &lt;td&gt;6&lt;/td&gt;
                &lt;td&gt;水浒传&lt;/td&gt;
                &lt;td&gt;&lt;img src="up.jpg"&gt;&lt;/td&gt;
                &lt;td&gt;576576&lt;/td&gt;
                &lt;td&gt;1231421&lt;/td&gt;
                &lt;td&gt;&lt;a href="#"&gt;贴吧&lt;/a&gt; &lt;a href="#"&gt;图片&lt;/a&gt; &lt;a href="#"&gt;百科&lt;/a&gt; &lt;/td&gt;
            &lt;/tr&gt;

            &lt;tr&gt;
                &lt;td&gt;7&lt;/td&gt;
                &lt;td&gt;三国演义&lt;/td&gt;
                &lt;td&gt;&lt;img src="up.jpg"&gt;&lt;/td&gt;
                &lt;td&gt;234&lt;/td&gt;
                &lt;td&gt;7686&lt;/td&gt;
                &lt;td&gt;&lt;a href="#"&gt;贴吧&lt;/a&gt; &lt;a href="#"&gt;图片&lt;/a&gt; &lt;a href="#"&gt;百科&lt;/a&gt; &lt;/td&gt;
            &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
&lt;/body&gt;

&lt;/html&gt;
</code></pre>
<p>运行效果</p>
<p><img src="https://i.loli.net/2021/05/14/gZcdDeyv1KxSAwQ.png" alt="image-20210514155431186" loading="lazy"></p>
<br>
<h3 id="5-边框会影响盒子实际大小">5. 边框会影响盒子实际大小</h3>
<p>边框会额外增加盒子的实际大小。因此我们有两种方案解决:</p>
<ol>
<li>测量盒子大小的时候,不量边框</li>
<li>如果测量的时候包含了边框,则需要 width/height 减去边框宽度</li>
</ol>
<p>示例代码</p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;

&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;meta http-equiv="X-UA-Compatible" content="IE=edge"&gt;
    &lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;
    &lt;title&gt;边框会影响盒子的实际大小&lt;/title&gt;
    &lt;style&gt;
      /* 我们需要一个200*200的盒子,但是这个盒子有10像素的红色边框 */
      div {
            width: 180px;
            height: 180px;
            background-color: pink;
            border: 10px solid red;
      }
    &lt;/style&gt;
&lt;/head&gt;

&lt;body&gt;
    &lt;div&gt;&lt;/div&gt;
&lt;/body&gt;

&lt;/html&gt;
</code></pre>
<p>运行效果</p>
<p><img src="https://i.loli.net/2021/05/14/JA3ZTkbIGogtyzr.png" alt="image-20210514160008998" loading="lazy"></p>
<br>
<h3 id="6-内边距--padding-">6. 内边距 ( padding )</h3>
<p><font color="#dd0000">padding</font>属性用于设置内边距。是指边框与内容之间的距离。</p>
<table>
<thead>
<tr>
<th style="text-align: left">属性</th>
<th style="text-align: left">作用</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left">padding-left</td>
<td style="text-align: left">左内边距</td>
</tr>
<tr>
<td style="text-align: left">padding-right</td>
<td style="text-align: left">右内边距</td>
</tr>
<tr>
<td style="text-align: left">padding-top</td>
<td style="text-align: left">上内边距</td>
</tr>
<tr>
<td style="text-align: left">padding-bottom</td>
<td style="text-align: left">下内边距</td>
</tr>
</tbody>
</table>
<p>示例代码</p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;

&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;meta http-equiv="X-UA-Compatible" content="IE=edge"&gt;
    &lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;
    &lt;title&gt;盒子模型之内边距&lt;/title&gt;
    &lt;style&gt;
      div {
            width: 200px;
            height: 200px;
            background-color: pink;
            padding-left: 20px;
            padding-top: 30px;
      }
    &lt;/style&gt;
&lt;/head&gt;

&lt;body&gt;
    &lt;div&gt;
      盒子内容是content盒子内容是content盒子内容是content盒子内容是content
    &lt;/div&gt;
&lt;/body&gt;

&lt;/html&gt;
</code></pre>
<p>运行效果</p>
<p><img src="https://i.loli.net/2021/05/15/ENaBR9PZgAYDdqU.png" alt="image-20210515162723236" loading="lazy"></p>
<br>
<p><font color="#dd0000">padding</font>属性 ( 简写属性 ) 可以有 1 到 4 个值。</p>
<table>
<thead>
<tr>
<th style="text-align: left">值的个数</th>
<th style="text-align: left">表达意思</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left">padding: 5px;</td>
<td style="text-align: left">padding:上下左右内边距;</td>
</tr>
<tr>
<td style="text-align: left">padding: 5px 10px;</td>
<td style="text-align: left">padding: 上下内边距   左右内边距 ;</td>
</tr>
<tr>
<td style="text-align: left">padding: 5px 10px 20px;</td>
<td style="text-align: left">padding:上内边距左右内边距下内边距;</td>
</tr>
<tr>
<td style="text-align: left">padding: 5px 10px 20px 30px;</td>
<td style="text-align: left">padding: 上内边距 右内边距 下内边距 左内边距 ;(顺时针)</td>
</tr>
</tbody>
</table>
<p>以上4种情况,我们再实际开发中都会遇到。</p>
<p>示例代码</p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;

&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;meta http-equiv="X-UA-Compatible" content="IE=edge"&gt;
    &lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;
    &lt;title&gt;盒子模型之内边距&lt;/title&gt;
    &lt;style&gt;
      div {
            width: 200px;
            height: 200px;
            background-color: pink;
            /* padding-left: 5px;
            padding-top: 5px;
            padding-bottom: 5px;
            padding-right: 5px; */
            /* 内边距复合写法(简写) */
            /* padding: 5px; */
            /* padding: 5px 10px; */
            /* padding: 5px 10px 20px; */
            padding: 5px 10px 20px 30px;
      }
    &lt;/style&gt;
&lt;/head&gt;

&lt;body&gt;
    &lt;div&gt;
      盒子内容是content盒子内容是content盒子内容是content盒子内容是content
    &lt;/div&gt;
&lt;/body&gt;

&lt;/html&gt;
</code></pre>
<br>
<p>当我们给盒子指定<font color="#dd0000">padding</font>值之后,发生了2件事情:</p>
<ol>
<li>内容和边框有了距离,添加了内边距。</li>
<li>padding影响了盒子实际大小</li>
</ol>
<p>也就是说,如果盒子已经有了宽度和高度,此时再指定内边框,会撑大盒子。</p>
<p><strong>解决方案:</strong></p>
<p>如果要保证盒子跟效果图大小一致,则让<font color="#dd0000">width/height减去多出来的内边距大小</font>即可。</p>
<p>示例代码</p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;

&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;meta http-equiv="X-UA-Compatible" content="IE=edge"&gt;
    &lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;
    &lt;title&gt;内边距会影响盒子实际大小&lt;/title&gt;
    &lt;style&gt;
      div {
            width: 160px;
            height: 160px;
            background-color: pink;
            padding: 20px;
      }
    &lt;/style&gt;
&lt;/head&gt;

&lt;body&gt;
    &lt;div&gt;
      padding会影响盒子实际大小padding会影响盒子实际大小padding会影响盒子实际大小padding会影响盒子实际大小
    &lt;/div&gt;

&lt;/body&gt;

&lt;/html&gt;
</code></pre>
<br>
<p><strong>padding不影响盒子大小情况:</strong>如果盒子本身没有指定width/height属性,则此时padding不会撑开盒子大小。</p>
<p>示例代码</p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;

&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;meta http-equiv="X-UA-Compatible" content="IE=edge"&gt;
    &lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;
    &lt;title&gt;padding不会影响盒子大小的情况&lt;/title&gt;
    &lt;style&gt;
      h1 {
            /* width: 100%; */
            height: 200px;
            background-color: pink;
            padding: 30px;
      }

      div {
            width: 300px;
            height: 100px;
            background-color: purple;

      }

      div p {
            /* width: 100%; */
            padding: 30px;
            background-color: skyblue;
      }
    &lt;/style&gt;
&lt;/head&gt;

&lt;body&gt;
    &lt;h1&gt;&lt;/h1&gt;
    &lt;div&gt;
      &lt;p&gt;

      &lt;/p&gt;
    &lt;/div&gt;
&lt;/body&gt;

&lt;/html&gt;
</code></pre>
<p>运行结果</p>
<p><img src="https://i.loli.net/2021/05/15/jAHDrCpUcEFYdXN.png" alt="image-20210515164946237" loading="lazy"></p>
<br>
<h3 id="7-外边距--margin-">7. 外边距 ( margin )</h3>
<p><font color="#dd0000">margin</font>属性用于设置外边距,即控制盒子和盒子之间的距离。</p>
<table>
<thead>
<tr>
<th style="text-align: left">属性</th>
<th style="text-align: left">作用</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left">margin-left</td>
<td style="text-align: left">左外边距</td>
</tr>
<tr>
<td style="text-align: left">margin-right</td>
<td style="text-align: left">右外边距</td>
</tr>
<tr>
<td style="text-align: left">margin-top</td>
<td style="text-align: left">上外边距</td>
</tr>
<tr>
<td style="text-align: left">margin-bottom</td>
<td style="text-align: left">下外边距</td>
</tr>
</tbody>
</table>
<p>margin 简写方式 (复合写法)代表的意思跟 padding 完全一致。</p>
<p>示例代码</p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;

&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;meta http-equiv="X-UA-Compatible" content="IE=edge"&gt;
    &lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;
    &lt;title&gt;盒子模型之外边距margin&lt;/title&gt;
    &lt;style&gt;
      div {
            width: 200px;
            height: 200px;
            background-color: pink;
      }

      /* .one {
            margin-bottom: 20px;
      } */
      .two {
            /* margin-top: 20px; */
            margin: 30px 50px;
      }
    &lt;/style&gt;
&lt;/head&gt;

&lt;body&gt;
    &lt;div class="one"&gt;1&lt;/div&gt;
    &lt;div class="two"&gt;2&lt;/div&gt;
&lt;/body&gt;

&lt;/html&gt;
</code></pre>
<p>运行结果</p>
<p><img src="https://i.loli.net/2021/05/15/A5dlst3qoyIgNLU.png" alt="image-20210515165417412" loading="lazy"></p>
<br>
<p><strong>外边距典型应用</strong></p>
<p>外边距可以让块级盒子<font color="#dd0000"><strong>水平居中</strong>,</font>但是必须满足两个条件:</p>
<ol>
<li>盒子必须指定了宽度 ( width ) 。</li>
<li>盒子<font color="#dd0000">左右的外边距</font>都设置为auto 。</li>
</ol>
<pre><code class="language-html">.header{ width: 960px; margin: 0 auto;}
</code></pre>
<p>常见的写法,以下三种都可以:</p>
<ul>
<li>margin-left: auto;margin-right: auto;</li>
<li>margin: auto;</li>
<li>margin: 0 auto;</li>
</ul>
<p>示例代码</p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;

&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;meta http-equiv="X-UA-Compatible" content="IE=edge"&gt;
    &lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;
    &lt;title&gt;块级盒子水平居中对齐&lt;/title&gt;
    &lt;style&gt;
      .header {
            width: 900px;
            height: 200px;
            background-color: pink;
            margin: 100px auto;
      }
    &lt;/style&gt;
&lt;/head&gt;

&lt;body&gt;
    &lt;div class="header"&gt;&lt;/div&gt;
&lt;/body&gt;

&lt;/html&gt;
</code></pre>
<br>
<p><font color="#dd0000"><strong>注意:</strong></font>以上方法让块级元素水平居中,<font color="#dd0000">行内元素或者行内块元素给其父元素添加 text-align: center即可</font>。</p>
<p>示例代码</p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;

&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;meta http-equiv="X-UA-Compatible" content="IE=edge"&gt;
    &lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;
    &lt;title&gt;行内元素/行内块元素水平居中对齐&lt;/title&gt;
    &lt;style&gt;
      .header {
            width: 900px;
            height: 200px;
            background-color: pink;
            margin: 100px auto;
            text-align: center;
      }

      /* 要想行内元素或者行内块元素水平居中只需给其父元素添加 text-align: center 即可 */
    &lt;/style&gt;
&lt;/head&gt;

&lt;body&gt;
    &lt;div class="header"&gt;
      &lt;span&gt;里面的文字&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class="header"&gt;
      &lt;img src="down.jpg" alt=""&gt;
    &lt;/div&gt;
&lt;/body&gt;

&lt;/html&gt;
</code></pre>
<br>
<h3 id="8-外边距合并">8. 外边距合并</h3>
<p>使用<font color="#dd0000">margin</font>定义块元素的<font color="#dd0000">垂直外边距</font>(指 margin-top 和 margin-bottom )时,可能会出现外边距的合并。</p>
<p>主要有两种情况:</p>
<p><strong>1. 相邻块元素垂直外边距的合并</strong></p>
<p><strong>2. 嵌套块元素垂直外边距的塌陷</strong></p>
<br>
<h4 id="81-相邻块元素垂直外边距的合并">8.1 相邻块元素垂直外边距的合并</h4>
<p>当上下相邻的两个块元素 ( 兄弟关系 ) 相遇时,如果上面的元素有下外边距margin-bottom,下面的元素有上外边距margin-top,则他们之间的垂直间距不是margin-bottom与margin-top之和。<font color="#dd0000">取两个值中的较大者这种现象被称为<strong>相邻块元素垂直外边距的合并</strong></font>。</p>
<p><img src="https://i.loli.net/2021/05/15/lNqMP6fbxGeSUgQ.png" alt="image-20210515173104333" loading="lazy"></p>
<p><strong>解决方案:</strong><font color="#dd0000">尽量只给一个盒子添加 margin 值。</font></p>
<p>示例代码:</p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;

&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;meta http-equiv="X-UA-Compatible" content="IE=edge"&gt;
    &lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;
    &lt;title&gt;外边距合并-相邻块级元素垂直外边距合并&lt;/title&gt;
    &lt;style&gt;
      .damao,
      .ermao {
            width: 200px;
            height: 200px;
            background-color: pink;
      }

      .damao {
            margin-bottom: 100px;
      }

      .ermao {
            margin-top: 200px;
      }
    &lt;/style&gt;
&lt;/head&gt;

&lt;body&gt;
    &lt;div class="damao"&gt;大毛&lt;/div&gt;
    &lt;div class="ermao"&gt;二毛&lt;/div&gt;
&lt;/body&gt;

&lt;/html&gt;
</code></pre>
<br>
<h4 id="82--嵌套块元素垂直外边距的塌陷">8.2嵌套块元素垂直外边距的塌陷</h4>
<p>对于两个嵌套关系 ( 父子关系 ) 的块元素,父元素有上外内边距同时子元素也有上外边距,此时父元素会塌陷较大的外边距值。</p>
<p><img src="https://i.loli.net/2021/05/15/LPzfTRhWkd69ZKY.png" alt="image-20210515173025771" loading="lazy"></p>
<p><strong>解决方案:</strong></p>
<ol>
<li>可以为父元素定义上边框。</li>
<li>可以为父元素定义上内边距。</li>
<li>可以为父元素添加overflow: hidden。</li>
</ol>
<p>还有其他方法,比如浮动、固定、绝对定位的盒子不会有问题,后面咱们再总结。</p>
<p>示例代码</p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;

&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;meta http-equiv="X-UA-Compatible" content="IE=edge"&gt;
    &lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;
    &lt;title&gt;外边距合并-嵌套块级元素垂直外边距塌陷&lt;/title&gt;
    &lt;style&gt;
      .father {
            width: 400px;
            height: 400px;
            background-color: purple;
            margin-top: 50px;
            /* border: 1px solid red; */
            /* border: 1px solid transparent; */
            /* padding: 1px; */
            overflow: hidden;
      }

      .son {
            width: 200px;
            height: 200px;
            background-color: pink;
            margin-top: 100px;
      }
    &lt;/style&gt;
&lt;/head&gt;

&lt;body&gt;
    &lt;div class="father"&gt;
      &lt;div class="son"&gt;&lt;/div&gt;
    &lt;/div&gt;
&lt;/body&gt;

&lt;/html&gt;
</code></pre>
<p>运行结果</p>
<p><img src="https://i.loli.net/2021/05/15/IgT83lYvhF19xtV.png" alt="image-20210515173328879" loading="lazy"></p>
<br>
<h3 id="9-清除内外边距">9. 清除内外边距</h3>
<p>网页元素很多都带有默认的内外边距,而且不同浏览器默认的也不一致。因此我们再布局前,首先要清除下网页元素的内外边距。</p>
<pre><code class="language-html">* {
   padding:0;         /* 清除内边距 */
   margin:0;          /* 清除外边距 */
}
</code></pre>
<p><font color="#dd0000"><strong>注意:</strong></font><font color="#dd0000">行内元素为了照顾兼容性,尽量只设置左右内外边距,不要设置上下内外边距。</font></p>
<p>示例代码</p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;

&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;meta http-equiv="X-UA-Compatible" content="IE=edge"&gt;
    &lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;
    &lt;title&gt;清除内外边距&lt;/title&gt;
    &lt;style&gt;
      /* 这句话也是我们CSS 的第一行代码 */
      * {
            margin: 0;
            padding: 0;
      }

      span {
            background-color: pink;
            margin: 20px;
      }
    &lt;/style&gt;
&lt;/head&gt;

&lt;body&gt;
    123
    &lt;ul&gt;
      &lt;li&gt;abcd&lt;/li&gt;
    &lt;/ul&gt;
    &lt;span&gt;行内元素尽量只设置左右的内外边距&lt;/span&gt;
&lt;/body&gt;

&lt;/html&gt;
</code></pre>
<p>运行结果</p>
<p><img src="https://i.loli.net/2021/05/15/ezCFHtR47SoBQsa.png" alt="image-20210515173919411" loading="lazy"></p><br><br>
来源:https://www.cnblogs.com/brianxq/p/14772116.html
頁: [1]
查看完整版本: CSS学习11-盒子模型