[CSS]浮动(下)

简介: [CSS]浮动(下)

3.5.2 练习2

<style>
  /* 清除所有元素的内外边距 */
  * {
    padding: 0;
    margin: 0;
  }
  /* 清除 li 的默认样式 */
  li {
    list-style: none;
  }
  .box {
    width: 1226px;
    height: 285px;
    background-color: aquamarine;
    /* 水平居中 */
    margin: 0 auto;
  }
  .box li {
    width: 296px;
    height: 285px;
    background-color: burlywood;
    /* 左浮动 */
    float: left;
    /* 设置右外边距 */
    margin-right: 14px;
  }
  /* 取消最后一个 li 的右外边距 */
  /* 必须写 .box .last 权重不能低于 .box li */
  .box .last {
    margin-right: 0;
  }
</style>
<body>
  <ul class="box">
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <li class="last">4</li>
  </ul>
</body>

3.5.3 练习3

<style>
  .box {
    width: 1226px;
    height: 615px;
    background-color: bisque;
    /* 水平居中 */
    margin: 0 auto;
  }
  .left {
    /* 左浮动 */
    float: left;
    width: 234px;
    height: 615px;
    background-color: brown;
  }
  .right {
    /* 右浮动 */
    float: right;
    width: 992px;
    height: 615px;
    background-color: cadetblue;
  }
  /* 选择 .right 下子元素 div 避免影响 div 内的子元素 */
  .right>div {
    /* 左浮动 */
    float: left;
    width: 234px;
    height: 300px;
    background-color: burlywood;
    /* 设置左外边距 */
    margin-left: 14px;
    /* 设置下外边距 */
    margin-bottom: 14px;
  }
</style>
<body>
  <div class="box">
    <div class="left"></div>
    <div class="right">
      <div>1</div>
      <div>2</div>
      <div>3</div>
      <div>4</div>
      <div>5</div>
      <div>6</div>
      <div>7</div>
      <div>8</div>
    </div>
  </div>
</body>

下面的四个盒子不会撑大父级元素是因为设置浮动脱离的标准流,父级元素为标准流,不在同一个层次上。

4. 常见网页布局

5. 浮动布局注意点

5.1 浮动和标准流的父盒子搭配

先用标准流的父元素排列上下位置, 之后内部子元素采取浮动排列左右位置

5.2 一个元素浮动了,理论上其余的兄弟元素也要浮动

一个盒子里面有多个子盒子,如果其中一个盒子浮动了,那么其他兄弟也应该浮动,以防止引起问题。

5.3 浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流

浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流

<style>
.one {
  width: 100px;
  height: 100px;
  background-color: aquamarine;
}
.two {
  /* 左浮动 */
  float: left;
  width: 100px;
  height: 100px;
  background-color: red;
}
.three {
  width: 200px;
  height: 200px;
  background-color: pink;
}
</style>
<body>
  <div class="one"></div>
  <div class="two"></div>
  <div class="three"></div>
</body>

6. 清除浮动

6.1 为什么需要清除浮动

由于父级盒子很多情况下,不方便给高度(如子元素的个数不确定时),但是子盒子浮动,浮动元素不再占用原文档流的位置,最后父级盒子高度为 0 时,就会影响下面的标准流盒子,会对后面的元素排版产生影响。

6.2 清除浮动本质

清除浮动的本质是清除浮动元素脱离标准流造成的影响.

如果父盒子本身有高度,则不需要清除浮动

清除浮动之后,父级元素就会根据浮动的子盒子自动检测高度。父级有了高度,就不会影响下面的标准流了。

6.3 清除浮动语法

选择器{clear:属性值;}

我们实际工作中, 几乎只用 clear: both;

清除浮动的策略是: 闭合浮动。

闭合浮动,把子元素的浮动范围限制在父元素内,即只能在父元素内进行浮动,只让浮动在父盒子内部影响,不影响父盒子外面的其他盒子.

6.4 清除浮动方法

  1. 额外标签法也称为隔墙法,是 W3C 推荐的做法。
  2. 父级添加 overflow 属性
  3. 父级添加after伪元素
  4. 父级添加双伪元素

6.4.1 额外标签法

额外标签法也称为隔墙法,是 W3C 推荐的做法。

额外标签法会在浮动元素末尾添加一个空的标签,同时为该标签添加清除浮动影响的属性。例如 <div style=”clear:both”></div>,或者其他标签(如<br />等)。

<style>
    .box {
      width: 500px;
      /* height: 200px; */
      border: 2px solid black;
      margin: 0 auto;
    }
    .box .one {
      float: left;
      width: 200px;
      height: 200px;
      background-color: aquamarine;
    }
    .box .two {
      float: right;
      width: 200px;
      height: 200px;
      background-color: blueviolet;
    }
    .three {
      height: 300px;
      background-color: brown;
    }
    .clear {
      clear: both;
    }
  </style>
  <body>
    <div class="box">
      <div class="one"></div>
      <div class="two"></div>
      <!-- 浮动元素末尾添加空标签 -->
      <!-- 为该标签添加清除浮动影响的属性 -->
      <!-- 清除左右浮动对该标签的影响 -->
      <div class="clear"></div>
    </div>
    <div class="three"></div>
  </body>

优点: 通俗易懂,书写方便

缺点: 添加许多无意义的标签,结构化较差

注意: 要求这个新的空标签必须是块级元素

6.4.2 父级添加 overflow 属性

可以给父级添加 overflow 属性,将其属性值设置为 hidden、 auto 或 scroll 。

子不教,父之过,注意是给父元素添加代码。子元素浮动对父元素外其他元素造成影响是父元素没有管理好子元素。

优点:代码简洁

缺点:无法显示溢出的部分

<style>
    .box {
      /* 清除浮动 */
      overflow: hidden;
      width: 500px;
      /* height: 200px; */
      border: 2px solid black;
      margin: 0 auto;
    }
    .box .one {
      float: left;
      width: 200px;
      height: 200px;
      background-color: aquamarine;
    }
    .box .two {
      float: right;
      width: 200px;
      height: 200px;
      background-color: blueviolet;
    }
    .three {
      height: 300px;
      background-color: brown;
    }
  </style>
  <body>
    <div class="box">
      <div class="one"></div>
      <div class="two"></div>
    </div>
    <div class="three"></div>
  </body>

6.4.3 父级添加after伪元素

:after 方式是额外标签法的升级版。

给父元素添加:

/* 为父元素添加如下属性 */ 
.clearfix:after { 
  /* after 伪元素必须有content属性 */ 
  content: ""; 
  /* 默认是行内元素,需要转化为块元素 */ 
  display: block; 
  height: 0; 
  /* 清除左右浮动的影响 */ 
  clear: both; 
  visibility: hidden; 
} 
.clearfix { /* IE6、7 专有,兼容ie */ 
 *zoom: 1;
}

优点:没有增加标签,结构更简单

缺点:需要照顾低版本浏览器

<style>
    /* 为父元素添加如下属性 */
    /* 会在指定的盒子内的最后添加一个盒子,该盒子默认为行内元素 */
    .clearfix:after {
      /* after 伪元素必须有content属性 */
      content: '';
      /* 默认是行内元素,需要转化为块元素 */
      display: block;
      height: 0;
      /* 清除左右浮动的影响 */
      clear: both;
      visibility: hidden;
    }
    .clearfix {
      /* IE6、7 专有,兼容ie */
      *zoom: 1;
    }
    .box {
      width: 500px;
      /* height: 200px; */
      border: 2px solid black;
      margin: 0 auto;
    }
    .box .one {
      float: left;
      width: 200px;
      height: 200px;
      background-color: aquamarine;
    }
    .box .two {
      float: right;
      width: 200px;
      height: 200px;
      background-color: blueviolet;
    }
    .three {
      height: 300px;
      background-color: brown;
    }
  </style>
  <body>
    <div class="box clearfix">
      <div class="one"></div>
      <div class="two"></div>
    </div>
    <div class="three"></div>
  </body>

6.4.4 父级添加双伪元素

也是给给父元素添加:

/* 在父盒子的最前面添加一个盒子,最后添加一个盒子 */
.clearfix:before,.clearfix:after {
  content:"";
  display:table; 
}
.clearfix:after {
  clear:both;
}
/* 兼容ie */
.clearfix {
  *zoom:1;
}

优点:代码更简洁

缺点:需要照顾低版本浏览器

<style>
    /* 在父盒子的最前面添加一个盒子,最后添加一个盒子 */
    .clearfix:before,
    .clearfix:after {
      content: '';
      display: table;
    }
    .clearfix:after {
      clear: both;
    }
    /* 兼容ie */
    .clearfix {
      *zoom: 1;
    }
    .box {
      width: 500px;
      /* height: 200px; */
      border: 2px solid black;
      margin: 0 auto;
    }
    .box .one {
      float: left;
      width: 200px;
      height: 200px;
      background-color: aquamarine;
    }
    .box .two {
      float: right;
      width: 200px;
      height: 200px;
      background-color: blueviolet;
    }
    .three {
      height: 300px;
      background-color: brown;
    }
  </style>
  <body>
    <div class="box clearfix">
      <div class="one"></div>
      <div class="two"></div>
    </div>
    <div class="three"></div>
  </body>

6.5 清除浮动总结

相关文章
|
8月前
|
前端开发
【前端|CSS系列第3篇】CSS盒模型、浮动及定位
【前端|CSS系列第3篇】CSS盒模型、浮动及定位
130 1
|
6月前
|
前端开发
5.CSS学习(浮动)
【7月更文挑战第29天】
46 4
|
2月前
|
前端开发
CSS 浮动属性讲解和使用
本文介绍了CSS中的浮动(float)属性,包括其基本功能、属性选项及其在网页布局中的应用。浮动使元素脱离文档流,向左或右排列,周围元素随之调整。文章还详细讲解了清除浮动的方法,如使用clear属性、设置父元素高度、利用overflow属性、伪元素等,以解决因浮动导致的布局问题。最后,强调了浮动在创建复杂布局时的作用,并预告后续内容。
56 2
|
7月前
|
前端开发 容器
CSS基础-浮动:float与清除浮动
【6月更文挑战第9天】本文介绍了CSS中的`float`属性,用于创建多列布局和图文混排,但会导致浮动塌陷和元素重叠问题。为解决这些问题,文章探讨了`clear`属性的四种清除浮动方法,包括`clear`属性、空元素、伪元素和`overflow`方法。随着Flexbox和Grid布局的兴起,它们在某些场景下替代了浮动,但理解浮动原理仍是布局基础。掌握浮动和清除浮动技巧对构建稳定布局至关重要。
87 5
|
4月前
|
前端开发
【前端web入门第六天】01 CSS浮动
这是关于CSS布局第六天学习目标的介绍,主要解决多个`&lt;div&gt;`标签在同一行显示的问题,即一个在左边,另一个在右边。文中介绍了标准流、浮动及flex布局的概念,重点推荐使用flex布局。文章详细讲解了浮动的基本使用、布局技巧及清除浮动的方法,包括额外标签法、单伪元素法、双伪元素法和`overflow`隐藏法,并提供了示例代码帮助理解。
|
5月前
|
前端开发 容器
前端面试热门问题--浮动和清除浮动(CSS)
前端面试热门问题--浮动和清除浮动(CSS)
|
7月前
|
前端开发 UED 容器
纯CSS画浮动卡通蓝天白云草坪动画效果
【6月更文挑战第1天】网页设计中,通过创新技巧,可以使用HTML和CSS模拟云朵漂浮和草地动画效果,提升用户体验。背景实现采用线性渐变动画,使背景颜色从浅青至白平滑过渡并循环移动。云朵效果通过多个不同大小和位置的`<div>`元素,结合CSS的`position: absolute;`和`@keyframes`动画实现浮动。草的动画则是通过三角形形状及`::before`和`::after`伪元素创造,配合不同动画速度和角度模拟自然摆动。完整代码可在提供的链接中下载。
117 1
|
6月前
|
前端开发
CSS:浮动
CSS:浮动
|
7月前
|
前端开发 容器
CSS浮动(如果想知道CSS有关浮动的知识点,那么只看这一篇就足够了!)
CSS浮动(如果想知道CSS有关浮动的知识点,那么只看这一篇就足够了!)
|
8月前
|
人工智能 前端开发 容器
CSS 浮动
CSS 浮动
70 1