浮动元素的相关问题

浮动元素特征

脱离文档流,允许文本和内联元素环绕它。该元素从网页的正常流动(文档流)中移除,尽管仍然保持部分的流动性。也就是说,如果一个父盒子中有两个子元素,其中一个子元素浮动,若另一个元素为块级元素,则会无视浮动元素,被浮动元素覆盖;若另一个元素为内联元素,则会环绕浮动元素。

修改元素display属性

注意 !!!由于float意味着使用块布局,它在某些情况下修改display值。
行内元素会转换为块级元素。

布局变化
浮动元素的兄弟元素为块级元素:
<div id="div1">111
    <div id="div2">222</div>
    <div id="div3">333</div>
</div>
  #div1{
           background: #6666FF;
           /*overflow: hidden;*/
       }
       #div2{
           background: #FF6666;
           width: 200px;
           height: 200px;
           float: left;
       }
       #div3{
           background: #999999;
           width: 300px;
           height: 100px;
       }

效果展示:


注意此时兄弟元素被浮动元素覆盖了,但文字环绕浮动元素。

浮动元素的兄弟元素为内联元素

将div3的cssdisplay样式修改

#div3{
          background: #999999;
          width: 300px;
          height: 100px;
          display: inline;
      }

效果展示:


image.png

清除float浮动问题的方法

从以上案例可以看出,如果不给父元素设置高度,会导致父元素高度塌陷。在CSS规范中,浮动定位不属于正常的页面流(page flow),是独立定位的。所以,只含有浮动元素的父容器,在显示时不考虑子元素的位置,就当它们不存在一样。这就造成了显示出来,父容器好像空容器。

以下清除浮动方法实质:

可以分为两类:
一.利用clear属性
二.触发父元素BFC

解决方法一:添加空元素

就是在浮动元素下方添加一个非浮动元素

<div style="clear:both;"></div>

原理:
父容器现在必须考虑非浮动子元素的位置,而后者肯定出现在浮动元素下方,所以显示出来,父容器就把所有子元素都包括进去了。

缺点:
要在页面中增加冗余标签,违背了语义化的原则。

解决方法二:浮动的父容器

将父容器也改成浮动定位

<div id="div1" style="float:left">111
    <div id="div2">222</div>
    <div id="div3">333</div>
</div>

优点:
不用修改HTML代码
缺点:
父容器变成浮动以后,会影响到后面元素的定位,而且有时候,父容器是定位死的,无法变成浮动。

解决方法三:浮动元素的自动clearing
<div id="div1" style="overflow: hidden;">111
    <div id="div2">222</div>
    <div id="div3">333</div>
</div>

缺点:
一旦子元素的大小超过父容器的大小,就会出显示问题。

解决方法四: after伪选择符

通过CSS语句添加子元素,这样就不用修改HTML代码。CSS语句中有一个:after伪选择符,就可以在父容器的尾部(包含在父容器中,为父容器的子元素)自动创建一个子元素,这正好符合我们的需要。

 #div1::after{
           content:""
           display: block;
           clear: both;
       }
       #div1{
           zoom: 1;
       }

其中的"div1"是父容器的class名称,"content:"";"是在父容器的结尾处放一个空字符,"height: 0;"是让这个这个空字符不显示出来,"display: block; clear: both;"是确保这个空白字符是非浮动的独立区块。

但是,:after选择符IE 6不支持,也就是说上面的这段代码在IE 6中无效,这怎么办?

我们添加一条IE 6的独有命令"zoom:1;"就行了,这条命令的作用是激活父元素的"hasLayout"属性,让父元素拥有自己的布局。

什么是hasLayout

IE使用Layout概念来控制元素的尺寸和位置。如果一个元素有Layout,它就有自身的尺寸和位置;如果没有,它的尺寸和位置由最近的拥有布局的祖先元素控制。

在默认情况下,拥有Layout的元素包括:

<html>, <body>
<table>, <tr>, <th>, <td>
<img>
<input>, <button>, <select>, <textarea>, <fieldset>, <legend>
<iframe>, <embed>, <object>, <applet>

!!!注意,<p>和<div>默认不拥有Layout

凡是具有以下CSS属性的元素,也会拥有布局:

position: absolute
float: left|right
display: inline-block
width: any value other than 'auto'
height: any value other than 'auto'
zoom: any value other than 'normal' (IE专用属性)
writing-mode: tb-rl(IE专用属性)
overflow: hidden|scroll|auto(只对IE 7及以上版本有效)

hasLayout是IE特有的属性,不是CSS属性。可以用Javascript函数hasLayout查看一个元素是否拥有Layout。如果有,这个函数就返回true;否则返回false。hasLayout是一个只读属性,所以无法使用Javascript进行设置。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,980评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,178评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,868评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,498评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,492评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,521评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,910评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,569评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,793评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,559评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,639评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,342评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,931评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,904评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,144评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,833评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,350评论 2 342

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,722评论 1 92
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 27,400评论 1 45
  • 这篇文章极好,以至于让我受益良多,就一字没有改动的转发过来一丝冰凉老师的文章 需要注意的是,display:tab...
    新晋小牛牛阅读 1,030评论 0 2
  • 前端开发面试题 面试题目: 根据你的等级和职位的变化,入门级到专家级,广度和深度都会有所增加。 题目类型: 理论知...
    怡宝丶阅读 2,567评论 0 7
  • 像以前一样 决定做个有志气,有骨气的人 只是这一次 比往常更坚定
    余三澈阅读 105评论 0 0