flex与folat
先做个自我介绍,本人是刚开始学习前端的的即将毕业的大学生,目前也已经系统性的学习了一个多月了,
先说一下首先遇到的float和flex布局的区别。
首先我们知道在一个新建的html文件上添加的内容可以分为两种,它们在普通文档流上的表现不同。
一种是块级元素,< div >
、< p >
、 < form >
等:
每个块元素都会都会独占一整行空间,在页面上默认从上向下排列。 对块的高度、宽度、margin和padding设置有效,宽度没有设置时,默认为100%。 块级元素中可以包含块级元素和行内元素。
一种是行内元素,< intput >
、< a >
、< span >
等,
行内元素不会独占一整行空间,可以多个行内元素在一条水平线上排列。
高度和宽度设置是无效的,由内容决定。
这样的话实现文字环绕图片很是困难,float属性恰好能很简单的解决这样的问题。
以下是float布局的一些特性:
- 浮动元素只会影响写在它后面的元素,写在前面的元素如果不浮动,它是不会顶上去的,只会在下一行紧跟着。
- 如果父元素太窄,无法容纳所有的浮动元素,无法容纳的浮动元素会换行显示。
- 浮动的特殊情况,以换行的那个元素为基准,如果同行前面有浮动元素的高度大于换行的那个元素,那么当换行元素换行时会被高的那个元素“卡住”。
- 浮动元素的高度不会计算在文档流中,所以子元素浮动会造成父级盒子高度坍塌。
所以再用浮动的时候还需要使用 “清除浮动”,也就是“overflow”;
但是flex布局就不会有这样的烦恼,flex 容器中默认存在两条轴,水平主轴和垂直的侧轴,这是默认的设置。当我们设置flex-direction属性让行的方向改变为列时,会使垂直方向变为主轴,水平方向变为交叉轴。
首先,实现 flex 布局需要先指定一个容器,任何一个容器都可以被指定为 flex 布局,这样容器内部的元素就可以使用 flex 来进行布局。分别生成一个块状或行内的 flex 容器盒子。简单说来,如果你使用块元素如 div,你就可以使用 flex,而如果你使用行内元素,你可以使用 inline-flex。
需要注意的是:当时设置 flex 布局之后,子元素的 float、clear、vertical-align 的属性将会失效。
设置flex有以下6种属性:
- flex-direction: 决定主轴的方向(即项目的排列方向)
- flex-wrap: 决定容器内项目是否可换行
- flex-flow: flex-direction 和 flex-wrap 的简写形式
- justify-content:定义了项目在主轴的对齐方式
- align-items: 定义了项目在侧轴上的对齐方式
- align-content: 定义了多行的对齐方式,如果项目只有一行,那么该属性将不起作用