浮动全解析 | 零基础学HTML(十八)

76 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第20天,点击查看活动详情

接上篇

  • height给标准流的父元素强制添加一个合适的高度

    • 解决:父元素有了高度,前面的浮动不能影响后面元素的标准流位置和贴边。

    • 问题:父元素的高度不是自适应的,一旦子元素高度变化,问题可能再次出现

  • clear属性:作用:清除标签元素自身受到的前面的浮动元素的影响

    • 属性值:left(清除前面左浮动带来的影响)right(清除前面右浮动带来的影响)both(清除前面所有浮动带来的影响)

    • 给标准流父元素添加clear属性,父元素不受前面浮动影响,不会再占有浮动让出的位置

    • 解决:浮动元素影响后面元素标准流位置和贴边

    • 问题:父元素不能高度自适应,两个父元素之间如果有margin效果不正确

  • 隔墙法:

    • 外墙法:在两个大的父盒子之间,添加一个空的<div>标签,标签上带有clear: both属性

      • 解决:浮动影响后面元素标准流位置和贴边,模拟父元素间的距离

      • 问题:父元素没有高度自适应 image.png

    • 内墙法:在父元素内部,所有的浮动子元素后面添加一个空的<div>元素,标签高度为0,添加clear属性

      • 解决:父元素高度自适应,浮动影响后面的元素位置和贴边

      • 缺点:浮动是css样式属性带来的问题,内墙法使用HTML结构去辅助解决问题,如果页面中浮动元素很多,需要添加多个没有语义的空标签,造成HTML结构的冗余 image.png

  • 伪类:本质是使用伪类方法利用css代码书写一堵内墙

    • 伪类选择器:通过选中的标签添加伪类,去选中标签的某个状态或位置

    • :after: 这个伪类表示选中的是某个标签内部的最后的位置

    • 书写方法:前面必须加普通的选择器,后面连续书写伪类名称

    • 将伪类添加给一个选中父盒子的选择器后面,一般给需要清除浮动的父盒子设置一个clearfix的类名

    • 解决:父元素高度自适应,浮动影响后面的元素位置和贴边

    • content属性值可以随意起一个名字,可以是任意字母

    • visibility: hidden;和display: none;的区别:前者可以隐藏内容但依旧保留位置与格式,后者将所有内容都隐藏

  • 溢出隐藏:给内部有浮动子元素的父元素添加溢出隐藏overflow: hidden; 可以解决浮动的所有问题(属于是小偏方)

    • overflow: hidden;是在元素设置高度后,将超过高度的部分直接隐藏

    • 如果元素不设置高度时,且同时设置了该属性,元素会自适应内容的宽度

    • 原理分析:

      • 高度自适应原因:一个元素没有设置高度,同时设置了溢出隐藏,浏览器在加载盒子尺寸时,遇到溢出隐藏,浏览器会强制性去检索内部的子元素的高度,不论子元素是标准流还是浮动,都会将最高的高度作为父盒子高度加载

      • 浮动影响后面的元素:父元素有了高度后,可以管理内部所有的浮动元素,不会延伸到后面标签中影响贴边 image.png image.png

  • 总结:如果父元素高度是固定的,建议使用height属性解决;如果父元素高度需要自适应,建议使用overflow属性解决浮动问题