CSS浮动布局

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;
}

CSS浮动布局_第1张图片

若只有第二个div浮动。

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

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

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

CSS浮动布局_第2张图片

(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;
}

CSS浮动布局_第3张图片

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;
}

CSS浮动布局_第4张图片

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>

CSS浮动布局_第5张图片

(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>

CSS浮动布局_第6张图片

(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;
    }
}

CSS浮动布局_第7张图片

CSS浮动布局_第8张图片
CSS浮动布局_第9张图片
CSS浮动布局_第10张图片

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%);
}

CSS浮动布局_第11张图片
CSS浮动布局_第12张图片
CSS浮动布局_第13张图片

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%);
}

CSS浮动布局_第14张图片

你可能感兴趣的:(CSS,css,css3,html)