CSS浮动布局

本文介绍了CSS浮动布局,包括文档流的概念及其对元素的影响,浮动转行内块的特性,以及如何清除浮动,如手动添加、使用`:after`伪类和`overflow`属性。此外,还讨论了距离控制、显示区域形状和环绕模式。
摘要由CSDN通过智能技术生成
CSS浮动布局

float属性定义元素在哪个方向浮动。以往这个属性总应用于图像,使文本围绕在图像周围,不过在 CSS 中,任何元素都可以浮动。浮动元素会生成一个块级框,而不论它本身是何种元素。

float: left | right | none

1.文档流

指元素在排版布局的过程中,元素会自动从左到右,从上到下的流式排列。添加浮动会脱离文档流,对后续元素产生影响。

(1)空间丢失

第一个div设置浮动,第二个未设置。第一个会脱离文档流,第二个div向前填充。

div {
    width: 200px;
    height: 200px;
}

div:nth-of-type(1) {
    border: solid 2px red;
    /* 浮动后脱离文档流,会对后续元素产生影响 */
    float: left;
}

div:nth-of-type(2) {
    background: blue;
}

在这里插入图片描述

若只有第二个div浮动。

div {
    width: 200px;
    height: 200px;
}

div:nth-of-type(1) {
    border: solid 2px red;
}

div:nth-of-type(2) {
    background: blue;
    float: left;
}

在这里插入图片描述

(2)同时浮动

两个div都浮动时,则在一条战线上。

div {
    width: 200px;
    height: 200px;
}

div:nth-of-type(1) {
    border: solid 2px red;
    float: left;
}

div:nth-of-type(2) {
    background: blue;
    /* 两个元素都浮动,则在一条战线 */
    float: left;
}

在这里插入图片描述

2.浮动转行内块

行级元素添加浮动后会转为行内块元素,可设置宽高。

main {
    border: solid 3px black;
    height: 220px;
    width: 620px;
    margin: 0 auto;
    padding: 20px;
}

span:nth-of-type(1) {
    border: solid 1px blue;
    float: left;
    width: 300px;
    height: 100px;
}

span:nth-of-type(2) {
    border: solid 1px blue;
    float: right;
    width: 300px;
    height: 100px;
}

在这里插入图片描述

3.清除浮动

clear: left | right | both

不希望元素受浮动元素影响时,可以清除浮动。

div {
    height: 200px;
    width: 200px;
}

div.red {
    border: solid 3px red;
    float: left;
}

div.green {
    border: solid 3px green;
    float: right;
}

div.blue {
    background: blue;
    clear: both;
}
<main>
    <div class="red"></div>
    <div class="green"></div>
    <div class="blue"></div>
</main>

在这里插入图片描述

(1)手动添加div

如何让父元素**自动适应(不需要手动设置高度)**感知不到的浮动元素?

在父元素内部最后面添加一个没有高度的子元素,并清除浮动。

main {
    border: solid 3px rgb(116, 7, 7);
    /* 不需要添加height了 */
    width: 610px;
    margin: 0 auto;
    padding: 20px;
}

div {
    width: 300px;
    height: 300px;
    box-sizing: border-box;
}

div:nth-of-type(1) {
    border: solid 2px red;
    float: left;
}

div:nth-of-type(2) {
    background: blue;
    float: right;
}

.clearfix {
    /* 清除浮动,移到div下面,父元素感知不到div,但能够感知到article */
    clear: both;
    border: solid 3px green;
}
<main>
    <div></div>
    <div></div>
    <article class="clearfix"></article>
</main>

在这里插入图片描述

(2)AFTER

使用 ::after 伪类为父元素添加后标签,实现清除浮动影响。

main {
    border: solid 3px rgb(116, 7, 7);
    width: 610px;
    margin: 0 auto;
    padding: 20px;
}

main::after {
    content: "";
    clear: both;
    display: block;
}

div {
    width: 300px;
    height: 300px;
    box-sizing: border-box;
}

div:nth-of-type(1) {
    border: solid 2px red;
    float: left;
}

div:nth-of-type(2) {
    background: blue;
    float: right;
}
(3)OVERFLOW

通过为父级元素添加overflow属性,来触发BFC机制,即父元素的高度计算会包括浮动元素的高度。

main {
    border: solid 3px rgb(116, 7, 7);
    width: 610px;
    margin: 0 auto;
    padding: 20px;
    overflow: hidden;
}

div {
    width: 300px;
    height: 300px;
    box-sizing: border-box;
}

div:nth-of-type(1) {
    border: solid 2px red;
    float: left;
}

div:nth-of-type(2) {
    background: blue;
    float: right;
}
4.距离控制

通过形状浮动可以让内容围绕图片,类似于我们在word 中的环绕排版。要求图片是有透明度的PNG格式。

shape-outside: border-box | padding-box | content-box | margin-box

选项说明
margin-box外边距环绕
padding-box内边距环绕
border-box边线环绕
content-box内容环绕
p {
    border: solid 1px #ddd;
    padding: 10px;
    overflow: hidden;
    span.shape {
        width: 100px;
        height: 100px;
        float: left;
        border: solid 20px red;
        padding: 30px;
        margin: 30px;
        shape-outside: border-box;
        shape-outside: padding-box;
        shape-outside: content-box;
        shape-outside: margin-box;
    }
}

在这里插入图片描述

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

5.显示区域形状

clip-path: circle() | ellipse() | polygon()

选项说明
circle圆形
ellipse椭圆
polygon多边形
p span.shape {
    width: 100px;
    height: 100px;
    float: left;
    background: red;
    padding: 30px;
    margin: 30px;
    shape-outside: margin-box;
    /* 圆大小 圆心位置(x y) */
    clip-path: circle(50% at 100% 0);
    /* 椭圆 x半径 y半径*/
    clip-path: ellipse(50% 30%);
    /* 多边形 点坐标 */
    clip-path: polygon(50% 0, 100% 100%, 0 100%);
}

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

6.环绕模式

shape-outside: circle() | ellipse() | polygon() | url(图片)

与clip-path相同则围其环绕。

p span.shape {
    width: 100px;
    height: 100px;
    float: left;
    background: red;
    padding: 30px;
    margin: 30px;
    clip-path: polygon(0 0, 100% 100%, 0 100%);
    shape-outside: polygon(0 0, 100% 100%, 0 100%);
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值