布局

2024-08-10 18:44:18 浏览数 (2)

竖着布局:div

横着布局:

1.传统布局 float 像需要横着布局的元素添加float 属性

代码语言:txt复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="css/06.css">
</head>
<body>
    <div class="top">
        <div class="left">left</div>
        <div class="right">right</div>
    </div>
    <div class="bottom"></div>
    
    
</body>
</html>
代码语言:txt复制
/*  left(左浮动)*/
*{
    padding: 0;
    margin: 0;
}
.top{
    width: 800px;
    background: aqua;
    height: 300px;
}
.left{
    width: 200px;
    height: 200px;
    background: blueviolet;
    float: left;
}
.right{
    width: 200px;
    height: 200px;
    background: pink;
    float: left;
    
}
.bottom{
    width: 800px;
    background: yellow;
    height: 200px;
}

代码语言:txt复制
.right{
    width: 200px;
    height: 200px;
    background: pink;
    float: right;
    
}/*右浮动*/

overflow:hidden 超出部分隐藏 父级随子级高度变化而变化

代码语言:txt复制
*{
    padding: 0;
    margin: 0;
}
.top{
    width: 800px;
    background: aqua;
    overflow: hidden;
}
.left{
    width: 200px;
    height: 200px;
    background: blueviolet;
    float: left;
}
.right{
    width: 200px;
    height: 300px;
    background: pink;
    float: left;
    
}
.bottom{
    width: 800px;
    background: yellow;
    height: 200px;
}

存在的问题

使用float之后,如果所在的父级没有高度,会导致下方元素上移

代码语言:txt复制
*{
    padding: 0;
    margin: 0;
}
.top{
    width: 800px;
    background: aqua;
}
.left{
    width: 200px;
    height: 200px;
    background: blueviolet;
    float: left;
}
.right{
    width: 200px;
    height: 200px;
    background: pink;
    float: left;
    
}
.bottom{
    width: 800px;
    background: yellow;
    height: 200px;
}

解决办法:

1.给父级设置高度,不够灵活

2.给父级设置overflow:hidden 但不设置高度,这样可以使父级随子级最大的高度变化而变化,自适应

无法解决的问题

1.元素平分父级元素 需要计算,而且不一定能均分

2.元素之间的间距如果想要均匀分布的话,也需要计算,而且也不一定均分

3.书写比较繁琐,代码冗余

2.内联块级元素布局 向所有想要横着布局的元素使用 displsy:inline-block让元素变为内联块级元素

内联块级元素的特点:不独占一行,而且对宽高支持

存在问题

浏览器会把元素之间的换行,空格都当作空格处理,使用display:inline-block之后,元素之间产生空隙,对整体布局产生影响

代码语言:txt复制
*{
    padding: 0;
    margin: 0;
}
.top{
    width: 800px;
    background: aqua;
    
}
.left{
    width: 200px;
    height: 200px;
    background: blueviolet;
    display: inline-block;
}
.right{
    width: 200px;
    height: 200px;
    background: pink;
    display: inline-block;
    
}
.bottom{
    width: 800px;
    background: yellow;
    height: 200px;
}

解决方式:

1.把元素首位相连(不推荐)

代码语言:txt复制
<div class="top">
        <div class="left">left</div><div class="right">right</div>
    </div>
    <div class="bottom"></div>

2.对文字大小进行处理,给使用display:inline-block的父级元素,添加font-size=0,并且该元素要设置有效的文字大小

代码语言:txt复制
*{
    padding: 0;
    margin: 0;
}
.top{
    width: 800px;
    background: aqua;
    font-size: 0;
}
.left{
    width: 200px;
    height: 200px;
    background: blueviolet;
    display: inline-block;
    font-size: 16px;
}
.right{
    width: 200px;
    height: 200px;
    background: pink;
    display: inline-block;
    font-size: 16px;
    
}
.bottom{
    width: 800px;
    background: yellow;
    height: 200px;
}

无法解决的问题

1.元素平分父级元素 需要计算,而且不一定能均分

2.元素之间的间距如果想要均匀分布的话,也需要计算,而且也不一定均分

3.书写比较繁琐,代码冗余

3.现代布局:display:flex弹性盒子布局

让元素横向布局,只需要给这些元素的父级元素添加 display:flex

代码语言:txt复制
*{
    padding: 0;
    margin: 0;
}
.top{
    width: 800px;
    background: aqua;
    display: flex;
   
}
.left{
    width: 200px;
    height: 200px;
    background: blueviolet;
    
}
.middle{
    width: 200px;
    height: 200px;
    background: rgb(50, 205, 76);
    
}
.right{
    width: 200px;
    height: 200px;
    background: pink;
    
    
}
.bottom{
    width: 800px;
    background: yellow;
    height: 200px;
}
代码语言:txt复制
<div class="top">
        <div class="left">left</div>
        <div class="middle">middle</div>
        <div class="right">right</div>
    </div>
    <div class="bottom"></div>

1.flex-direction设置弹性盒子内,子元素的排列方向

flex-direction:row元素横向从左到右排列

flex-direction:row-reverse元素横向从右到左排列

flex-direction:column纵向从上到下排列

flex-direction:column-reverse纵向从下到上排列

2.flex-wrap设置弹性盒子内元素是否换行

wrap设置元素满了之后换行

nowrap设置元素不换行

3.order设置子元素的排列顺序 作用到子元素

order取值为整数,整数越小,出现的顺序越靠前

代码语言:txt复制
*{
    padding: 0;
    margin: 0;
}
.top{
    width: 800px;
    background: aqua;
    display: flex;
    
   
}
.left{
    width: 200px;
    height: 200px;
    background: blueviolet;
    order: 2;
}
.middle{
    width: 200px;
    height: 200px;
    background: rgb(50, 205, 76);
    order: 1;
}
.right{
    width: 200px;
    height: 200px;
    background: pink;
    order: 3;
    
}
.bottom{
    width: 800px;
    background: yellow;
    height: 200px;
}

4.flex复合属性 控制弹性盒子内子元素的缩放比例

flex-grow:拉伸因子

代码语言:txt复制
*{
    padding: 0;
    margin: 0;
}
.top{
    width: 800px;
    background: aqua;
    display: flex;
    
   
}
.left{
    width: 200px;
    height: 200px;
    background: blueviolet;
    flex-grow: 2;
}
.middle{
    width: 200px;
    height: 200px;
    background: rgb(50, 205, 76);
    flex-grow: 1;
}
.right{
    width: 200px;
    height: 200px;
    background: pink;
    flex-grow: 3;
    
}
.bottom{
    width: 800px;
    background: yellow;
    height: 200px;
}

按照比例进行拉伸,把剩余的200px,按照2:1:3的比例分给子元素

flex-shrink:压缩因子

把比父级元素多200px的空间,按照2:1:3的比例进行对应压缩

代码语言:txt复制
*{
    padding: 0;
    margin: 0;
}
.top{
    width: 400px;
    background: aqua;
    display: flex;
    
   
}
.left{
    width: 200px;
    height: 200px;
    background: blueviolet;
    flex-shrink: 2;
}
.middle{
    width: 200px;
    height: 200px;
    background: rgb(50, 205, 76);
    flex-shrink: 1;
}
.right{
    width: 200px;
    height: 200px;
    background: pink;
    flex-shrink: 3;
    
    
}
.bottom{
    width: 800px;
    background: yellow;
    height: 200px;
}

不加压缩因子,会按照默认比例进行压缩

flex-basis:基准因子

5.justify-content 控制弹性盒子内,子元素的分布方式

代码语言:txt复制
.top{
    width: 800px;
    background: aqua;
    display: flex;
    justify-content: flex-start;
   
}

flex-start 元素都在左边/上边 代表元素在排列方向的开始位置分布

flex-end 元素在排列方向上的结束位置分布(右/下)

center元素在排列方向的中间位置分布

space-between代表空白元素分布在元素与元素之间

space-around 代表空白元素分布在各个元素两边

space-evenly代表空白元素均匀分布在空隙

6.align-items控制弹性盒子内子元素在垂直方向上的对齐方式

flex-start 控制弹性盒子内元素在顶部或者左边对齐

flex-end 控制元素在底部对齐/右边对齐

center 元素垂直方向上居中对齐

baseline 首行底部对齐

代码语言:txt复制
*{
    padding: 0;
    margin: 0;
}
.top{
    width: 800px;
    background: aqua;
    display: flex;
    height: 200px;
    align-items: baseline;
   
}
.left{
    width: 100px;
    height: 100px;
    font-size: 10px;
    background: blueviolet;
    
}
.middle{
    width: 100px;
    height: 100px;
    background: rgb(50, 205, 76);
   font-size: 20px;
}
.right{
    width: 100px;
    height: 100px;
    background: pink;
    
    font-size: 15px;
    
}
.bottom{
    width: 800px;
    background: yellow;
    height: 100px;
}

7.align-content 设置弹性盒子内,多行分布方式

flex-start 所有行都靠近顶部或左端

flex-end 所有行都靠近底端或右端

center所有行居中显示

space-between空白元素放在行和行之间

space-around 空白元素平均放在行的上下两册

space-evenly 空白元素均匀分布在空隙

0 人点赞