【玩转CSS】浮动(下)

446 阅读6分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

🔥 本文由 程序喵正在路上原创,在稀土掘金首发!
💖 系列专栏:HTML+CSS
🌠 首发时间:2022年9月5日
🦋 欢迎关注🖱点赞👍收藏🌟留言🐾
🌟 一以贯之的努力 不得懈怠的人生

学习目标

  • 能够说出为什么需要清除浮动
  • 能够写出至少 2 种清除浮动的方法
  • 能够利用 Photoshop 实现基本的切图
  • 能够利用 Photoshop 插件实现切图
  • 能够完成学成在线的页面布局

清除浮动

我们前面的浮动元素有一个标准流的父元素,它们有一个共同的特点,都是有高度的

但是,所有的父盒子都必须有高度吗?

理想中的状态,是让子盒子撑开父盒子,有多少子盒子,父盒子就有多高

但是不给父盒子高度会有问题吗?

1. 为什么要清除浮动?

由于父级盒子在很多情况下,不方便给高度,但是子盒子浮动又不占用位置,最后父级盒子高度为 0 时,就会影响下面的标准流盒子

  • 由于浮动元素不再占用原文档流的位置,所以它会对后面的元素排版产生影响

2. 清除浮动本质

  • 清除浮动的本质是清除浮动元素造成的影响
  • 如果父级盒子本身有高度,则不需要清除浮动
  • 清除浮动之后,父级盒子就会根据浮动的子盒子自动检测高度,父级有了高度,就不会影响下面的标准流盒子了

语法:

选择器 { clear: 属性值; }

属性值描述
left不允许左侧有浮动元素(清除左侧浮动的影响)
right不允许右侧有浮动元素(清除右侧浮动的影响)
both同时清除左右两侧浮动的影响

我们在实际开发中,几乎只用 clear: both;

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

3. 清除浮动方法

  1. 额外标签法也称为隔墙法,是 W3C 推荐的做法
  2. 父级添加 overflow 属性
  3. 父级添加 after 伪元素
  4. 父级添加双伪元素

4. 清除浮动 —— 额外标签法

额外标签法会在浮动元素末尾添加一个空的标签,例如 <div style="clear: both" ></div>,或者其他标签(如 <br/> 等),空标签里面添加清除浮动样式

  • 优点:通俗易懂,书写方便
  • 缺点:添加许多无意义的标签,结构化比较差

注意:要求这个新的空标签必须是块级元素

实际工作可能会遇到,但是不常用

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>额外标签法</title>
    <style>
        .box {
            width: 800px;
            border: 1px solid blue;
            margin: 0 auto;
        }

        .one {
            float: left;
            width: 200px;
            height: 200px;
            background-color: skyblue;
        }

        .two {
            float: left;
            width: 200px;
            height: 200px;
            background-color: pink;
        }

        .footer {
            height: 200px;
            background-color: black;
        }

        .clear {
            clear: both;
        }
    </style>
</head>

<body>
    <div class="box">
        <div class="one">1</div>
        <div class="two">2</div>
        <div class="clear"></div>
    </div>
    <div class="footer"></div>
</body>

</html>

image.png

5. 清除浮动 —— 父级添加 overflow

可以给父级元素添加 overflow 属性,将其属性值设置伪 hiddenautoscroll

  • 优点:代码简洁
  • 缺点:无法显示溢出的部分
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>父级添加overflow</title>
    <style>
        .box {
            /* 清除浮动 */
            overflow: hidden;
            width: 800px;
            border: 1px solid blue;
            margin: 0 auto;
        }

        .one {
            float: left;
            width: 200px;
            height: 200px;
            background-color: skyblue;
        }

        .two {
            float: left;
            width: 200px;
            height: 200px;
            background-color: pink;
        }

        .footer {
            height: 200px;
            background-color: black;
        }
    </style>
</head>

<body>
    <div class="box">
        <div class="one">1</div>
        <div class="two">2</div>
    </div>
    <div class="footer"></div>
</body>

</html>

6. 清除浮动 —— :after 伪元素法

:after 方式是额外标签法的升级版,也是给父元素添加(先不同理解

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

.clearfix {	/* IE6、7专有 */
	*zoom: 1;
}
  • 优点:没有增加标签,结构更简单
  • 缺点:照顾低版本浏览器
  • 代表网站:百度、淘宝网、网易等
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>伪元素清除浮动</title>
    <style>
        .clearfix:after {
            content: "";
            display: block;
            height: 0;
            clear: both;
            visibility: hidden;
        }

        .clearfix {
            /* IE6、7专有 */
            *zoom: 1;
        }

        .box {
            width: 800px;
            border: 1px solid blue;
            margin: 0 auto;
        }

        .one {
            float: left;
            width: 200px;
            height: 200px;
            background-color: skyblue;
        }

        .two {
            float: left;
            width: 200px;
            height: 200px;
            background-color: pink;
        }

        .footer {
            height: 200px;
            background-color: black;
        }
    </style>
</head>

<body>
    <div class="box clearfix">
        <div class="one">1</div>
        <div class="two">2</div>
    </div>
    <div class="footer"></div>
</body>

</html>

7. 清除浮动 —— 双伪元素清除浮动

此方法也是给父元素添加

.clearfix:before, clearfix:after {
	content: "";
	display: table;
}
.clearfix:after {
	clear: both;
}
.clearfix {
	*zoom: 1;
}
  • 优点:代码更简洁
  • 缺点:照顾低版本浏览器
  • 代表网站:小米、腾讯等
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>双伪元素清除浮动</title>
    <style>
        .clearfix:before,
        .clearfix:after {
            content: "";
            display: table;
        }

        .clearfix:after {
            clear: both;
        }

        .clearfix {
            *zoom: 1;
        }

        .box {
            width: 800px;
            border: 1px solid blue;
            margin: 0 auto;
        }

        .one {
            float: left;
            width: 200px;
            height: 200px;
            background-color: skyblue;
        }

        .two {
            float: left;
            width: 200px;
            height: 200px;
            background-color: pink;
        }

        .footer {
            height: 200px;
            background-color: black;
        }
    </style>
</head>

<body>
    <div class="box clearfix">
        <div class="one">1</div>
        <div class="two">2</div>
    </div>
    <div class="footer"></div>
</body>

</html>

8. 清除浮动总结

为什么需要清除浮动?

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

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

PS 切图

1. 常见的图片格式

  1. jpg 图像格式:JPEG (JPG) 对色彩的信息保留较好,高清,颜色较多,我们产品类的图片经常用 jpg 格式的
  2. gif 图像格式:GIF 格式最多只能储存 256 色,所以通常用来显示简单图片及字体,但是可以保存透明背景和动画效果,实际经常用于一些图片小动画效果
  3. png 图像格式是一种新兴的网络图形格式,结合了 GIFJPEG 的优点,具有存储形式丰富的特点,能够保持透明背景,如果想要切成背景透明的图片,请选择 png 格式
  4. PSD 图像格式:PSD 格式是 Photoshop 的专用格式,里面可以存放图层、通道、遮罩等多种设计稿,对前端人员来说,最大的优点就是,我们可以直接从上面复制文字、获得图片,还可以测量大小和距离

切图是前端人员的必备技能,PS 有很多的切图方式:图层切图、切片切图、PS 插件切图等

2. 图层切图

最简单的切图方式:PSD 图像格式下,右击图层 ➝ 快速导出为 PNG

但是很多情况下,我们需要合并图层再导出:

  1. 选中需要的图层:图层菜单 ➝ 合并图层(Ctrl + E
  2. 右击 ➝ 快速导出为 PNG

最好的方法:和美工mm沟通一下

3. 切片切图

1、利用切片选中图片

  • 利用切片工具手动划出

2、导出选中的图片

文件菜单 ➝ 导出 ➝ 存储为 web 设备所用格式 ➝ 选择我们要的图片格式 ➝ 存储 ➝ 选中的切片 ➝ 保存

4. PS 插件切图

Cutterman 是一款运行在 Photoshop 中的插件,能够自动将你需要的图层进行输出,以替代传统的手工 “导出 web 所用格式” 以及使用切片工具进行挨个切图的繁琐流程

Cutterman - 最好用的切图工具(点我下载)

下载完打开 PS,随便注册个 cutterman 账号登录即可使用插件

注意:Cutterman 插件要求你的 PS 必须是完整版,不能是绿色版