zoukankan      html  css  js  c++  java
  • css清除浮动

      初学css,一直被清除浮动困扰。好多不一样解决方案,却说不清解决的是什么。看罢《CSS权威指南》,总算有点头绪了。将3.3.2文章粘贴如下:

      浮动元素脱离了文档流,其父元素也看不到它了,因而也不会包围它。这种情况有
    时候并非我们想要的,本节向大家传授三种围住浮动子元素的方法。记住,这三种
    方法你都得掌握,这样才能审时度势,选择最合适的一种。


      为了演示浮动元素的行为,这种行为对布局会产生什么影响,以及解决这个问题的
    三种方法,我们首先要从一张带标题的图片开始。图片和标签包含在一个 section
    元素中,而 section 元素后面跟着一个 footer 元素。可以把这个 footer 元素想象成
    很多网页底部都会有的与页面同宽的页脚。
    <section>
    <img src="images/rubber_duck2.jpg">
    <p>It's fun to float.</p>
    </section>
    <footer> Here is the footer element that runs across the bottom of the
    page.

    </footer>

      这样,你才会知道究竟会发生什么。应用以下规则后的 section 和
    footer 的元素盒子。
    section {border:1px solid blue; margin:0 0 10px 0;}
    /*删除默认的上下外边距*/
    p {margin 0;}
    /*为简明起见,省略了字体声明*/
    footer {border:1px solid red;}
      可以看到页面中的两个块级元素 section 和 footer,前者包含一张图片及标题,
    后者在常规文档流中位于前者下方

      现在我们看到的是常规文档流,即块级元素包围着所有子元素,而且在页面中自上
    而下相互堆叠在一起。假设我们想让图片标题位于图片右侧,而不是像现在这样位
    于下方。运用刚刚学到的知识,我们知道实现这个目标最简单的方式就是浮动图片。
    试试看吧。
    section {border:1px solid blue; margin:0 0 10px 0;}
    img {float:left;}
    footer {border:1px solid red;}
    浮动图片后标题跑到了右边,但父元素 section 也收缩到只包含文本的高度高度
    定位元素
    妈呀!标题倒是跑到右边了,可 section 也不再包围浮动元素了,它只包围非浮动的
    元素。于是,footer 被提了上来,紧挨着前一个块级元素——section。这样是没错
    儿,可结果呢,不是我们想要的。
    方法一:为父元素添加 overflow:hidden
    第一个方法很简单,缺点是不太直观,即为父元素应用 overflow:hidden,以强制它
    包围浮动元素。
    section {border:1px solid blue; margin:0 0 10px 0; overflow:hidden;}
    img {float:left;}
    p {border:1px solid red;}
    把 overflow:hidden 声明应用到容器元素后,footer 又回到了我们期望的位置,如图
    3-20 所示。
    图 3-20 给容器元素应用 overflow:hidden 声明后,它又包围了浮动元素
    实际上,overflow:hidden 声明的真正用途是防止包含元素被超大内容撑大。应用
    overflow:hidden 之后,包含元素依然保持其设定的宽度,而超大的子内容则会被容
    器剪切掉。除此之外,overflow:hidden 还有另一个作用,即它能可靠地迫使父元素
    包含其浮动的子元素。
    方法二:同时浮动父元素
    第二种促使父元素包围其浮动子元素的方法,是也让父元素浮动起来。
    section {border:1px solid blue; float:left; 100%;}
    img {float:left;}
    footer {border:1px solid red; clear:left;}
    浮动 section 以后,不管其子元素是否浮动,它都会紧紧地包围(也称收缩包裹)住

    浮动与清除
    它的子元素。因此,需要用 100%再让 section 与浏览器容器同宽。另外,由

    于 section 现在也浮动了,所以 footer 会努力往上挤到它旁边去。为了强制 footer
    依然呆在 section 下方,
    要给它应用 clear:left。
    被清除的元素不会被提升到浮动元
    素的旁边。以上代码能得到与图 3-20 相同的效果。

    方法三:添加非浮动的清除元素
    第三种强制父元素包含其浮动子元素的方法,就是给父元素的最后添加一个非浮动的
    子元素,然后清除该子元素。由于包含元素一定会包围非浮动的子元素,而且清除会
    让这个子元素位于(清除一侧)浮动元素的下方,因此包含元素一定会包含这个子元
    素——以及前面的浮动元素。在包含元素最后添加子元素作为清除元素的方式有两种。

    第一种方式不太理想,也就是简单地在 HTML 标记中添加一个子元素,并给它应用
    clear 属性。由于没有默认的样式,不会引入多余空间,div 元素很适合这个目的。

    <section>
    <img src="images/rubber_duck.jpg">
    <p>It's fun to float.</p>
    <div class="clear_me"></div>
    </section>
    <footer> Here is the footer element...</footer>

    在此,我为 div 添加了一个类,以便于在 CSS 中添加它。
    section {border:1px solid blue;}
    img {float:left;}
    .clear_me {clear:left;}
    footer {border:1px solid red;}

    这样,浮动的元素被父元素包围住了,结果如图 3-20 所示。如果你特别不想添加这
    个纯表现性元素,我再告诉你一个用 CSS 来添加这个清除元素的方法。首先,要给
    section 添加一个类。

    <section class="clearfix">
    <img src="images/rubber_duck.jpg">
    <p>It's fun to float.</p>
    </section>
    <footer> Here is the footer element...</footer>

    然后,再使用这个神奇的 clearfix 规则!

  • 相关阅读:
    UIView的常见属性
    Object-C-Foundation-反射
    Object-C-自定义类型归档
    Java集合:HashMap源码剖析
    spring-boot-2.0.3之quartz集成,数据源问题,源码探究
    杂谈篇之我是怎么读源码的,授之以渔
    ElasticSearch 从零到入门
    java实现图片上传功能,并返回图片保存路径
    quartz定时任务及时间设置
    笛子初学者吹什么曲子
  • 原文地址:https://www.cnblogs.com/qiuyeyaozhuai/p/3555643.html
Copyright © 2011-2022 走看看