提示:这篇比较重要,做复杂页面时经常会用到!会不断更新❗
前言
提示:这里可以添加本文要记录的大概内容:
弹性布局的总体思想是把布局不写在标记上,而是把布局的样式代码写在最大的父标记上
让布局实现自适应和自动调整,可以在不同屏幕大小和设备上保持一定的布局效果,同时也可以方便地进行响应式设计
一些常用示例代码:
/* 弹性布局 */
display: flex;
/* 主轴水平居中 */
justify-content: center;
/* 侧轴垂直居中 */
align-items: center;
/* 改变主轴方向,主轴方向垂直设置,默认是row水平 */
flex-direction: column;
/* 折行显示 */
flex-wrap: wrap;
提示:以下是本篇文章正文内容,下面案例可供参考
主轴和侧轴
盒子变成弹性盒子后标记怎么排列?它是按照两个轴为方向进行排列显示(主轴和侧轴)
默认主轴是水平的,默认侧轴是垂直的
先设置一个大div,里面放五个小div,并分别控制他们的样式
【示例代码】:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
.p{
width: 300px;
height: 300px;
border: 2px solid black;
margin-top: 50px;
margin-left: 100px;
}
.s{
width: 50px;
height: 50px;
background-color: aqua;
}
</style>
</head>
<body>
<!-- div.p>div{div$}.s*5 公式生成-->
<div class="p">
<div class="s">div1</div>
<div class="s">div2</div>
<div class="s">div3</div>
<div class="s">div4</div>
<div class="s">div5</div>
</div>
</body>
</html>
输出效果:从上到下,五个小div默认排列
在父标记内加上弹性布局 display: flex;
,
输出显示:
弹性盒子中的子标记,是先按照主轴排列,再按照侧轴排列
主轴侧轴彼此垂直交叉
flex-direction 主轴方向
flex-direction:row /*子元素沿主轴方向排列,也就是水平方向 row为默认值*/
flex-direction:column /*子元素沿侧轴方向排列,也就是垂直方向 */
主轴默认是水平方向,【flex-direction: column;
垂直排列】column
主轴方向是垂直的(列)row
主轴方向是水平的(行)
弹性盒子中的子标记都会变成:行内块类型
子标记里的5个div宽都是50px,总宽度是250px,接下来看一下他在整个大div宽300px内的显示
如果把5个小div的宽度改成80px,那总宽是400px,而大div总宽是300px,那会不会主轴不满然后侧轴排列?
输出结果:
这就是弹性盒子的特点:等比例压缩了
弹性盒子中的子标记占据的总尺寸超过弹性盒子的尺寸,默认弹性盒子会讲子标记等比例的压缩
flex-wrap 折行
如果说不想让他等比例压缩,要他折行显示侧轴排列时用到
在父标记中加入flex-wrap: wrap;
输出显示:
弹性盒子对于一些简单的样式声明,他会完成一些复杂的计算和排列
弹性盒子尺寸小于子标记的总尺寸时,会在侧轴排列(折行显示)
主轴排列方式
/* 默认row,主轴排列 */
flex-direction: row;
justify-content:
flex-start:默认左对齐
主轴水平→左对齐,主轴垂直→上对齐
justify-content: flex-start;
总代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
.p{
width: 500px;
height: 300px;
border: 2px solid black;
margin-top: 50px;
margin-left: 100px;
/* 弹性布局 */
display: flex;
/* 水平向右排列(默认值) */
flex-direction: row;
flex-wrap: wrap;
justify-content: space-evenly;
}
.s{
width: 80px;
height: 50px;
background-color: aqua;
}
</style>
</head>
<body>
<!-- div.p>div{div$}.s*5 公式生成-->
<div class="p">
<div class="s">div1</div>
<div class="s">div2</div>
<div class="s">div3</div>
<div class="s">div4</div>
<div class="s">div5</div>
</div>
</body>
</html>
flex-end:右对齐
主轴水平右对齐,主轴是垂直下对齐
justify-content: flex-start;
center:居中
主轴水平整体水平居中,主轴是垂直整体垂直居中
justify-content: center;
space-between:两端对齐
主轴水平,左右两端的子标记紧挨着父标记的边框,
主轴垂直,上下两端子标记紧挨着父标记的边框,子标记之间间距相等
justify-content: space-between;
父标记宽度500px
父标记宽度200px
space-around:子标记之间的间距是子标记与父标记边框之间的间距2倍
子标记之间的间距是子标记与父标记边框之间的间距2倍
justify-content: space-around;
父标记宽度200px
父标记宽度500px
父标记宽度800px
space-evenly:间距平均
子标记之间的间距和子标记与父标记边框之间的间距相等
justify-content: space-evenly;
总结
justify-content
主轴排列方式:
-
flex-start
主轴水平是左对齐,主轴是垂直上对齐 -
flex-end
主轴水平是右对齐,主轴是垂直下对齐 -
center
主轴水平是整体水平居中,主轴是垂直的整体垂直居中 -
space-between
主轴水平左右两端的子标记紧挨着父标记边框,主轴垂直上下两端的子标记紧挨着父标记边框,子标记之间间距相等 -
space-around
子标记之间的间距是子标记与父标记边框之间的间距2倍 -
space-evenly
子标记之间的间距和子标记与父标记边框之间的间距相等
侧轴排列方式
只需要在父标记中加上下面代码
根据上面主轴的显示效果,可以理解成把它们逆时针旋转90°
/* 侧轴排列 */
flex-direction: column;
justify-content:
比如说space-evenly
:间距平均
子标记之间的间距和子标记与父标记边框之间的间距相等
justify-content: space-evenly;
align-items 侧轴排列方式
lign-items
:侧轴排列方式flex-start
:侧轴垂直上对齐,侧轴水平左对齐flex-end
:侧轴垂直下对齐,侧轴水平右对齐center
:侧轴垂直居中,侧轴水平居中align-items: flex-start;
垂直方向上这几个标记靠上方
【案例代码】
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
.p{
width: 500px;
height: 300px;
border: 2px solid black;
margin-top: 50px;
margin-left: 100px;
/* 弹性布局 */
display: flex;
/* 主轴方向 column主轴方向是垂直的,row主轴方向是水平的(行)*/
flex-direction: row;
flex-wrap: wrap;
justify-content: flex-start;
/* align-items,侧轴排列方式 */
align-items: flex-start;
}
.s{
width: 80px;
height: 50px;
background-color: aqua;
}
</style>
</head>
<body>
<!-- div.p>div{div$}.s*5 公式生成-->
<div class="p">
<div class="s">div1</div>
<div class="s">div2</div>
<div class="s">div3</div>
<div class="s">div4</div>
<div class="s">div5</div>
</div>
</body>
</html>
align-items: flex-start;
侧轴垂直上对齐,侧轴水平左对齐
align-items: flex-end;
侧轴垂直下对齐,侧轴水平右对齐align-items: center;
侧轴垂直居中,侧轴水平水平居中
align-content 侧轴排列方式(多行)
align-content侧轴排列方式与align-items侧轴排列方式区别在于:多行显示时会看出效果
首先看一下
align-items: center;
/* align-content: center; */
【案例代码】
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
.p{
/* 此处把宽度改小,使其多行显示 */
width: 200px;
height: 300px;
border: 2px solid black;
margin-top: 50px;
margin-left: 100px;
/* 弹性布局 */
display: flex;
flex-direction: row;
flex-wrap: wrap;
justify-content: flex-start;
align-items: center;
/* align-content: center; */
}
.s{
width: 80px;
height: 50px;
background-color: aqua;
}
</style>
</head>
<body>
<!-- div.p>div{div$}.s*5 公式生成-->
<div class="p">
<div class="s">div1</div>
<div class="s">div2</div>
<div class="s">div3</div>
<div class="s">div4</div>
<div class="s">div5</div>
</div>
</body>
</html>
每一行中都在中间
/* align-items: center; */
align-content: center;
flex 子标记样式
前面的标记都放在了父标记中,只有flex是唯一一个安排在子标记中的样式
flex
是弹性布局中唯一一个设置在子标记中的样式flex
:整数;子标记占据父标记尺寸空间的比例flex: 0 0 整数px;
代表子标记固定的尺寸,【0 0】:不压缩不扩大,固定
第一种写法:子标记中写数字
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
.p{
width: 400px;
height: 200px;
border: 2px green solid;
/* 变弹性盒子 */
display: flex;
}
.p>div{
height: 100px;
}
.s1{
background-color: red;
flex: 1;
}
.s2{
background-color: yellow;
flex: 2;
}
.s3{
background-color: blue;
flex: 2;
}
</style>
</head>
<body>
<div class="p">
<div class="s1"></div>
<div class="s2"></div>
<div class="s3"></div>
</div>
</body>
</html>
第二种写法:固定样式写法
这里以s1举例
.s1{
background-color: red;
/* s1,固定150px */
flex: 0 0 150px;
}
flex: 0 0 整数px;
代表子标记固定的尺寸,【0 0】:不压缩不扩大,固定文章来源:https://www.toymoban.com/news/detail-514059.html
输出效果:
s2和s3是125×100
文章来源地址https://www.toymoban.com/news/detail-514059.html
到了这里,关于CSS 弹性布局的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!