前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >元素的浮动

元素的浮动

作者头像
云叶知秋
发布2023-10-16 20:53:28
1650
发布2023-10-16 20:53:28
举报
文章被收录于专栏:Unity3D学习笔记Unity3D学习笔记

一、浮动

HTML元素的浮动是通过css来设定的,css中的float属性可以让元素左浮动或者右浮动,具体设置参数如下

代码语言:javascript
复制
float: left;	/*左浮动*/
float: right;	/*右浮动*/
float: none;	/*不浮动*/

我们通过一些例子来增进对浮动的理解

代码语言:javascript
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .box1, .box2, .box3{
            width: 100px;
            height: 100px;
            border: 1px solid #000;
        }
        .box1{
            background-color: orange;
        }
        .box2{
            width: 200px;
            background-color: pink;
        }
        .box3{
            height: 300px;
            background-color: green;
        }
    </style>
</head>
<body>
    <div class="box1">box1</div>
    <div class="box2">box2</div>
    <div class="box3">box3</div>
</body>
</html>

预览效果如下图

在这里插入图片描述
在这里插入图片描述

这是未设置浮动之前的效果,接下来我们对box1设置一下左浮动,代码如下

代码语言:javascript
复制
.box1{
	float: left;
}

效果如下

在这里插入图片描述
在这里插入图片描述

发现box1脱离了普通文档流,因box2还是属于普通文档流,所以直接顶上去,占据了box1元素原先的位置,接下来我们设置box1右浮动

代码语言:javascript
复制
.box1{
	float: right;
}

效果如下:

在这里插入图片描述
在这里插入图片描述

我们发现box1浮动到右侧,元素原先占有的位置不在保留,box2顶上去,占有了元素box1原来占有的位置

接下来我们把box1和box2都左浮动

代码语言:javascript
复制
.box1{
	float: left;
}
.box2{
	float: left;
}

效果如下:

在这里插入图片描述
在这里插入图片描述

我们发现box1和box2从左往右依次排列,box2被box1的边界阻挡

接下来把box1、box2和box3都设置左浮动

代码语言:javascript
复制
.box1{
	float: left;
}
.box2{
	float: left;
}
.box3{
	float: left;
}

效果如下:box1,box2,box3依次从左往右排列

在这里插入图片描述
在这里插入图片描述

接下来我们在box3后面再增加一个内容

代码语言:javascript
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .box1, .box2, .box3{
            width: 100px;
            height: 100px;
            border: 1px solid #000;
        }
        .box1{
            background-color: orange;
            float: left;
        }
        .box2{
            float: left;
            width: 200px;
            background-color: pink;
        }
        .box3{
            float: left;
            height: 300px;
            background-color: green;
        }
    </style>
</head>
<body>
    <div class="box1">box1</div>
    <div class="box2">box2</div>
    <div class="box3">box3</div>
    asdfasdfdsaf
</body>
</html>

通过浏览器打开查看下效果

在这里插入图片描述
在这里插入图片描述

可以发现文字不是在新的一行,而是紧跟着html元素,这就导致布局无法按照我们预期的方式展现,这就是接下来我们要说的高度塌陷问题,那这个问题该如何解决呢,以及解决方式都有哪些,接下来我将罗列目前已知的几种处理方式,大家可以根据实际情况选择使用

二、高度塌陷的处理方式

在讲高度塌陷的处理方式时,我们先来举一个例子,这个例子是用ul 和li实现的菜单,源代码如下

代码语言:javascript
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        ul {
            margin: 0;
            padding: 0;
            list-style: none;
            width: 300px;
        }
        ul li{
            float: left;
            font-size: 12px;
            line-height: 12px;
            padding: 0 6px;
            border-right: 1px solid #666;
        }
        li.no_line{
            border: none;
        }
    </style>
</head>
<body>
    <ul>
        <li>首页</li>
        <li>注册</li>
        <li>购物车</li>
        <li>我的收藏</li>
        <li>消息</li>
        <li class="no_line">商城小程序</li>
    </ul>
</body>
</html>

效果如下

在这里插入图片描述
在这里插入图片描述

接下来给ul设定背景色和边框

代码语言:javascript
复制
ul{
	background-color: #ddd;
	border: 1px solid #000;
}

效果如下:

在这里插入图片描述
在这里插入图片描述

我们会看到上图这奇怪的现象,其实上图就是因为没有给ul指定高度,而ul的子元素li全部浮动后导致的ul高度塌陷。

3.1 给父级元素设定高度

当然我们可以通过给ul设置高度,代码如下

代码语言:javascript
复制
ul{
	height: 24px;
}

效果如下

在这里插入图片描述
在这里插入图片描述

但是这种方式会影响布局,需要手动再次去调整子元素的布局,实际情况下用得很少

3.2 给父级元素设置overflow

可通过css的属性overflow来出发元素的bfc,从而让元素来清除浮动,比如我们在父元素ul上增加overflow属性

代码语言:javascript
复制
ul{
	overflow: hidden;
}

页面显示效果如下

在这里插入图片描述
在这里插入图片描述

可以看到这种效果比第一种的好,而且比第一种简单,但是overflow的本义并不是为了解决高度塌陷的,所以用在这里也是有点奇怪

3.3 给父级元素也设置浮动

给父元素ul设置css属性float

代码语言:javascript
复制
ul{
	float: left;
}

页面显示效果如下

在这里插入图片描述
在这里插入图片描述

可以看到效果和第二种方式差不多,但是在网页布局中,给父元素增加浮动,会导致其他方面的问题,也不推荐使用

3.4 增加html元素清除浮动

在ul内部的子元素最后增加一个html元素,给html元素增加css属性clear来清除浮动

代码语言:javascript
复制
<ul>
    <li>首页</li>
    <li>注册</li>
    <li>购物车</li>
    <li>我的收藏</li>
    <li>消息</li>
    <li class="no_line">商城小程序</li>
    <div style="clear:both"></div>
</ul>

效果图

在这里插入图片描述
在这里插入图片描述

可以看到效果一致,但是为了清除浮动,在html页面上增加一个元素,就显得多余,而且还会影响文档结构,也不推荐

3.5 通过伪元素清除浮动

通过给父元素设置伪元素

代码语言:javascript
复制
ul:after{
	content: "";
	display: block;
	clear: both;
}
在这里插入图片描述
在这里插入图片描述

效果也跟3.4的一致,这是目前大多数采用的方式

3.6 通过display:flow-root清除浮动

通过给父元素设置css属性display:flow-root来清除浮动

代码语言:javascript
复制
ul{
	display: flow-root;
}

效果图

在这里插入图片描述
在这里插入图片描述

个人推荐使用这种方式,但是这种方式是比较新的特性,旧的浏览器不支持,所以尽量还是使用3.5提供的方式。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-10-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云开发 CloudBase
云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档