终于学到弹性盒子了呜呜呜,但是感觉内容也好多!!!
移动web开发之flex布局
建议:
例子:
过去我们要在一个大盒子里面放三个这样的盒子,都是用的浮动,但是学习了弹性flex布局,我们可以更简单的做出来,为了凸显它的优势,用的还是行内元素span,只要用了flex,行内元素也可以直接设置大小.
只需要在父元素的样式中添加一行:
display:flex;
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.box {
display: flex;
width: 80%;
height: 400px;
background-color: pink;
}
span {
color: #fff;
width: 300px;
height: 300px;
/* margin: 5px; */
background-color: purple;
}
</style>
</head>
<body>
<div class="box">
<span>1</span>
<span>2</span>
<span>3</span>
</div>
</body>
</html>
还可以实现很多其他的效果,比如
justify-content: space-around;
就能让盒子以其他的方式排列.
布局原理
flex是flexible box的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性,任何一个容器都可以指定为flex布局.
采用flex布局的元素,称为flex容器(flex container),简称"容器",它的所有子元素自动成为容器成员,称为flex项目,简称"项目".
总结flex布局原理:
就是通过给父盒子添加flex属性,来控制子盒子的位置和排列方式.
父项常见属性
太懒了我就不打字了,直接上图片吧.
注意:
根据我们以往的经验,当几个盒子浮动排列在一行时,盒子一行挤不下的时候会掉下去,但是flex布局就不一样了.
现在这是一个即将被塞满的大盒子,我们再往里面放一个盒子,看看会发生什么现象呢.
很明显,他给我们硬塞在一行上去了,原先的盒子的大小也被强行改变了.
于是就引出了下一个知识点.
那我们能不能垂直居中,又水平居中呢?
其实我们只要两步:让盒子在主轴上水平居中,又让盒子在侧轴垂直居中就可以实现啦.
做出来的效果:
但是也有主侧轴的问题,假如我设置的主轴是y轴,再让侧轴居中,出来的效果就是:
但是这个属性只适用于单行文本.
align-items和align-content的区别
子项常见属性
flex属性定义子项目分配剩余空间,用flex来表示占多少份数.
.items {
flex:<number>;(默认为0)
}
圣杯布局:
圣杯布局就是三列模式,两边的盒子定宽,贴在两侧,中间自适应.
http://mpvideo.qpic.cn/0bf2gmaakaaakiahzysbybqvam6dauzqabia.f10003.mp4?
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
section {
display: flex;
width: 80%;
background-color: pink;
height: 150px;
margin: 0 auto;
}
.one {
height: 150px;
background-color: purple;
width: 100px;
}
.two {
background-color: chartreuse;
height: 100px;
flex: 1;
margin-top: 25px;
}
.three {
width: 100px;
height: 150px;
background-color: blue;
}
</style>
</head>
<body>
<section>
<div class="one"></div>
<div class="two"></div>
<div class="three"></div>
</section>
</body>
</html>
有了这个功能,还能实现很多的效果.
比如一个盒子让三个小盒子平分,以往我们就要使用百分比33.33%,非常麻烦的,现在就只要一行代码即可.
先不给子盒子设置宽度,让他们各占一份空白空间:
当然也有其他的分配 ,比如让2号盒子占2分空间,只要将flex:1;改成flex:2;即可
我们现在有一个大盒子,里面装着三个小盒子,现在让他们在侧轴上都flex-start,但是我只想让第三号盒子变成flex-end,这时就该用到align-self了.但是这时我们不能写在父元素里面,要写在要单独设置的元素里面,要给哪个元素单独设置,就写在哪个里面.图为只给第三个盒子设置:
但是只能设置侧轴上的方向哈!!!
我们也可以设置盒子的顺序,在不改变结构的前提下,比如说,我想将三号盒子放在最前面,我们就可以使用order属性:
下一章就是根据所学知识做一个携程网移动端案例.