父元素如何围住浮动子元素

当元素使用float属性,将脱离文档流,因此父元素便不会包围它。

<section>
      <div class="左栏">
        我是左栏
        我是左栏
        我是左栏
        我是左栏
      </div>
      <div class="右栏">
        我是右栏
      </div>
</section>
<footer>我是页脚</footer>

CSS样式如下:

section{
  border: 1px solid #333333;
  margin:0 0 10px 0;
}
.左栏{
  width: 100px;
  border: 1px solid #333333;
}
footer{
  border: 1px solid #333333;
}

此时浏览器中显示:

图1.这是常规文档流,可以看到块级元素section包围左栏和右栏元素,页面自上而下堆叠在一起

当对左栏加入css样式:float:left;浏览器中显示变为

图2.浮动左栏后,父元素section只能包住右栏,因为左栏已经脱离了文档流,于是footer也被提了上来,紧挨着前一个块级元素section

如果想父元素仍然要包围浮动的子元素,有三种方法:

  1. 为父元素设置overflow:hidden
    将section设置为:

    section{
       border: 1px solid #333333;
       margin:0 0 100px 0;
       overflow: hidden;
    }

图3.给父元素应用了overflow:hidden后,父元素又包围了浮动的左栏

这是overflow除了常规应用的另一个作用,它可靠的迫使父元素包含其浮动的子元素。
2.同时浮动父元素
第二种促使父元素包围子元素的方法是让父元素也浮动起来

section{
      border: 1px solid #333333;
      margin:0 0 10px 0;
      float:left;
      width: 100%;
}

????浮动section后,不管子元素是否浮动,它都会紧紧包围住自己的子元素。因此,需要用width:100%再让section与浏览器同宽。
????此时由于section也脱离了文档流,footer会努力向上挤到它旁边,因此给footer应用clear:left;这样即可和第一种方法取到同样的效果。
3.添加非浮动的清除元素
????第三种方法是给父元素最后添加一个非浮动的子元素,然后清除该子元素。由于父元素一定会包含非浮动的子元素,通过把这个子元素放在浮动元素的下方,就可以保证父元素一定会包住这个元素,同时也会包住前面的浮动元素。

<section>
      <div class="左栏">
        我是左栏
        我是左栏
        我是左栏
        我是左栏
      </div>
      <div class="右栏">
        我是右栏
      </div>
      <div class="clear_me">
      </div>
</section>
<footer>我是页脚</footer>

给新添加的元素添加CSS样式:

.clear_me{
  clear:left;
}

这样,浮动的元素就被父元素包围住了,如图3所示。

如果不想添加这个纯表现性的元素,还有一个用CSS来添加这个清除元素的方法。
首先,给section添加一个类

<section class="clearfix">
      <div class="左栏">
        我是左栏
        我是左栏
        我是左栏
        我是左栏
      </div>
      <div class="右栏">
        我是右栏
      </div>
</section>

接着给这个clearfix类使用这个规则:

.clearfix:after{
    content: ".";
    display: block;
    height: 0;
    visibility: hidden;
    clear: both;
}

这样,浮动的元素又像图1一样被父元素包住了。这个clearfix规则最早是由程序员Tony Aslett发明的,它只添加了一个内容为句点的元素(句点是最小的内容)。

总结一下
强迫父元素包含其浮动子元素的方法有三种:

  1. 为父元素设置overflow:hidden;
  2. 浮动父元素,并且设置宽度width:100%;其后的元素要设置clear:both;
  3. 父元素内容末尾添加非浮动子元素,可以直接加一个空元素,也可以使用clearfix伪类添加。
时间: 2024-10-14 03:40:52

父元素如何围住浮动子元素的相关文章

二、vue学习--父元素如何获取子元素的值,子元素如何获取父元素的值

下图是父元素: 下图是子元素,获取父元素的值,使用props定义属性,这样就可以获取到父元素上传过来的set .place.type,拿到值就可以做一些自己的逻辑处理 二.子元素给父元素传值? 下图为子元素将值传递出去的方式,使用emit将值公布给父元素,见下图: 父元素需要接受子元素给的值,在父元素中相应的要有propMethods属性,这个属性可以使用v-on的方式绑定,也可以使用@propMethods的方式,见下图: 上图中的login是处理事件,这里点击按钮时需要子元素来触发事件,所以

LinearLayout的gravity属性以及其子元素的layout_gravity何时有效;RelativeLayout如何调整其子元素位置只能用子元素中的属性来控制,用RelativeLayout中的gravity无法控制!!!

LinearLayout的gravity属性以及其子元素的layout_gravity何时有效 转自:http://www.cnblogs.com/xiaoran1129/archive/2013/03/26/2982733.html 相信对于Android的初学者来说,大家都曾经被layout里这两个极其相似的属性迷惑过. 简单使用一下搜索工具,我们就不难找到下面这样的答案: layout_gravity 表示组件自身在父组件中的位置 gravity             表示组件的子组件在

【父元素parent】【子元素children】【同胞siblings】【过滤】

1.父元素 $("span").parent()           //定位到span的父元素 $("span").parents()          //定位到span的所有父元素 $("span").parents("ul")          //定位到span的ul父元素 $("span").parentsUntil("div");              //指定span

css 父元素的宽度随子元素的宽度变化

当最外面的层想要设置一个 overflow: hidden,但子元素又想他们能滚动,像今日头条的滚动导航一样: html: <div id="wrapper"> <ul id="scroll"> <li>cell 1</li> <li>cell 2</li> <li>cell 3</li> <li>cell 4</li> <li>cel

父边框浮动实现完全包围浮动子元素

.wrapper{ border:3px solid red; float: left;}.content{ width: 100px; height: 100px; background: black; color: #fff; float: left;}</style></head><body><div class="wrapper"> <div class="content">11</div&g

css父元素背景覆盖其子元素背景

1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title></title> 6 <style> 7 8 .test1{ 9 width: 100px; 10 height: 100px; 11 border: 1px solid green; 12 background: green; 13 position: absol

父元素给定背景,子元素添加内容时背景改变了,怎嘛解决?

<div class="mui-scroll agree-main"> //用agree-main加了背景色 <div class="mui-content" style="background-color: transparent!important;"> //用style="background-color: transparent!important;"可以解决问题 <div class=&

怎样在当前节点的第一个子元素节点之前增加子元素节点或子文本节点

使用: ParentNode.prepend(); var parent = document.body; // 添加元素子节点 var p = document.createElement('p'); parent.prepend(p); // 添加文本子节点 parent.prepend('Hello'); // 添加多个元素子节点 var p1 = document.createElement('p'); var p2 = document.createElement('p'); pare

CSS子元素浮动之后如何撑开父元素

(1)在浮动子元素后面添加 <div style="clear:both;"></div> (2)父元素CSS添加 z-index:1; overflow:hidden; (3)绝对定位/静止定位(absolute/fixed); (4)父元素也跟着浮动 (5)父元素设定高度 (6)最佳方案: 父元素CSS添加: overflow:auto;_height:1%;