10 网页布局-浮动

浮动

传统网页布局的三种方式
CSS提供了三种传统布局方式(简单说, 就是盒子如何进行排列顺序)

  • 普通流(标准流/文档流)
    所谓的标准流: 就是标签按照规定好默认方式排列
  1. 块级元素会独占一行, 从上往下顺序排列
    常用元素: div hr p h1~h6 ul ol dl form table
  2. 行内元素会按照顺序, 从左到右排列, 碰到父元素边界会自动换行
    常用元素: span a i em
一. 标准流

标准流是最基本的布局方式
注意: 实际开发中, 一个页面基本都包含了这三种布局方式(后面移动端学习新的布局方式)

二. 浮动
1. 为什么需要浮动?

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vwfUrAHP-1611563026470)(index_files/3d36f501-fa84-4c4b-a30c-b9fc783b5194.jpg)]

行内块元素不能控制缝隙
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-z6whfOno-1611563026472)(index_files/aa41fb7b-cef4-4a94-a67b-4fe1fbf9b94b.jpg)]

总结:
有很多布局效果, 标准流没有办法完成, 此时就可以利用浮动完成布局. 因为浮动可以改变元素标签默认的排列方式
浮动最典型的应用: 可以让多个块级元素一行内排列显示
网页布局第一准则: 多个块级元素纵向排列找标准流, 多个块级元素横向排列找浮动

2. 什么是浮动?

float属性用于创建浮动框, 将其移动到一边, 知道左边缘或右边缘触及包含块或另一个浮动框的边缘
语法:`选择器 {float: 属性值;}

属性值描述
none元素不浮动
left元素向左浮动
right元素向右浮动
3. 浮动特性(难重点)

加了浮动之后的元素, 会具有很多特性, 需要掌握

  1. 浮动元素会脱离标准流(脱标)
    • 脱离标准普通流的控制(浮)移动到指定位置(动), (俗称脱标)
    • 浮动的盒子不再保留原先的位置
  2. 浮动元素会一行内显示并且元素顶部对齐
  3. 浮动的元素会具有行内块元素的特性
    • 如果块级盒子没有设置高度, 默认宽度和父级一样宽, 但是添加浮动后, 它的大小根据内容来决定
    • 浮动的盒子中间是没有缝隙的, 是紧挨着一起的
    • 行内元素同理(
      • 可以把行内元素变为行内块元素(有类似特性), 比如<span>
      • 行内元素有了浮动, 则不需要转换块级\行内块元素就可以直接给高度和宽度(行内块元素如果不设置宽度, 则宽度为内容的大小))
  4. 浮动的盒子不会有外边距合并/塌陷问题
4. 浮动元素经常和标准流父级搭配使用

为了约束浮动元素位置, 我们网页布局一般采取的策略是:

  • 先用标准流的父元素排列上下位置, 之后内部子元素采取浮动排列左右位置, 符合网页布局第一准则
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PnVazSZi-1611563026474)(index_files/888fd190-ea67-4a65-a7c1-20c2145741e3.jpg)]

  • 网页布局第二准则: 先设置盒子大小, 之后设置盒子的位置

5. 常见网页布局

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EWlr8nWd-1611563026476)(index_files/d67584ee-70ee-4cae-8119-73e0493fee98.jpg)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RWauVCRc-1611563026476)(index_files/1a79a3b1-4b51-426f-8619-c23f25552f1c.jpg)]

6. 浮动布局注意点
  • 浮动和标准流的父盒子搭配
    先用标准流的父元素排列上下位置, 之后内部子元素采取浮动排列左右位置
  • 一个元素浮动了, 理论上其余的兄弟元素也要浮动
    一个盒子里面有多个子盒子, 如果其中一个盒子浮动了, 那么其他兄弟也应该浮动, 以防引起问题
  • 浮动的盒子只会影响浮动盒子后面的标准流, 不会影响前面的标准流
    浮动的盒子总是贴着前面的标准流

大毛是标准流,二毛浮动,三毛标准
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gs6TMyUG-1611563026478)(index_files/775ac11f-fcb0-47d0-9b6c-622725c4640a.jpg)]

7. 思考题

我们前面浮动元素有一个标准流的父元素, 他们有一个共同的特点, 都是有高度的.
但是, 所有的父盒子都必须有高度吗?

  • 理想中, 让子盒子撑开父盒子, 有多少孩子, 父盒子就有多高
8. 清除浮动
  • 为什么要清除浮动?
    • 由于父级盒子在很多情况下, 不方便给高度, 但是子盒子浮动又不占有位置, 最后父级盒子高度为0时, 就会影响下面的标准流盒子
  • 清除浮动的本质
    • 清除浮动的本质是清除浮动元素造成的影响
    • 如果父盒子本身有高度, 则不需要清除浮动
    • 清除浮动后, 父级就会根据浮动的子盒子自动检测高度. 父级有了高度, 就不会影响下面的标准流了
  • 语法:
    选择器 {clear: 属性值;}
属性值描述
left不允许左侧有浮动元素(清除左侧浮动的影响)
right不允许右侧有浮动元素(清除右侧浮动的影响)
both同时清除左右两侧浮动的影响
  • 实际工作中, 几乎只用clear: both;

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

  • 清除浮动方法:

    1. ** 额外标签法**也称为隔墙法, 是W3C推荐的做法
    • 额外标签法会在浮动元素末尾添加一个空的块级元素标签. 例如<div style="clear: both"></div>, 或者其他标签(如<br/>等)
    • 优点: 通俗易懂, 书写方便
    • 缺点: 添加许多无意义的标签, 结构化较差
    1. .父级添加overflow属性
    • 可以給父级添加overflow属性, 将其属性值设置为hidden, autoscroll
    • 优点: 代码简洁
    • 缺点: 无法显示溢出的部分
      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cvjJuRTr-1611563026479)(index_files/86c3920c-20bc-49d8-b58b-4f1289a08195.jpg)]
    1. 父级添加after伪元素(常用)
    • :after方式是额外标签法的升级版. 也是给父元素添加
    • 固定代码:
    .clearfix:after {
        content: "";
        display: block;
        height: 0;
        clear: both;
        visibility: hidden;
    }
    .clearfix { /* IE6, 7专有 */
       *zoom: 1;
    }
    
    • 优点: 没有增加标签, 结构更简单
    • 缺点: 照顾低版本浏览器
    1. 父级添加双伪元素(常用)
    • 也是给父元素添加
    • 代码
    .clearfix:before, .clearfix:after {
        content: "";
        display: table;
    }
    .clearfix:after {
        clear: both;
    }
    .clearfix { /* IE6, 7专有 */
        *zoom: 1;
     }
    
    • 优点: 代码更简洁
    • 缺点: 照顾低版本浏览器
9. 清除浮动总结

为什么要清除浮动?

  • 父级没高度
  • 子盒子浮动了
  • 影响下面布局了, 我们就应该清除浮动了

|清除浮动的方法|优点|缺点|
|额外标签法(隔墙法)|通读易懂,书写方便|添加许多无意义的标签, 结构化较差|
|父级overflow: hidden;|书写简单|溢出隐藏|
|父级after伪元素|结构语义化明确|由于IE6-7不支持:after, 兼容性问题|
|父级双伪元素|结构语义化明确|由于IE6-7不支持:after, 兼容性问题|

三. 定位
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

旅泊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值