CSS的box-flex属性
css的布局方式很多,常用布局可以完成大部分的需求,但是很麻烦,维护不方便。最近在看react-native,在react-native里有一个css-layout的工具,可以把css的flexbox布局编译成c或者java,这样flexbox就不止是用在dom布局上了。Flexbox布局(Flexible Box)模块旨在提供一个更加有效的方式制定、调整和分布一个容器里的项目布局,即使他们的大小是未知或者是动态的。
flexbox希望容器内部的元素可以用最好的方式去排列,可以去适应各种分辨率和尺寸的屏幕。但是因为兼容性问题,所以一般用在了
且不谈在各个平台上的flexbox是怎么实现的,先来说说flexbox的一些概念。
flexbox基础
flexbox是整个一个模块,而不只是一个css属性。一个flexbox模块需要容器和子元素组成。
我们来看w3c官方提供的对flexbox的解释的图片
每个flexbox都有一个主轴和侧轴,我们可以调整主轴方向选择不同排列方式。
属性
display
1 | display: flex | inline-flex; |
设置一个flexbox容器,这个容器可以是块元素,也可以是内联元素。但是因为涉及到兼容性问题,一般我们都会完整的写一个css
1 2 3 4 5 | display: -webkit-box; /* OLD - iOS 6-, Safari 3.1-6 */ display: -moz-box; /* OLD - Firefox 19- (buggy but mostly works) */ display: -ms-flexbox; /* TWEENER - IE 10 */ display: -webkit-flex; /* NEW - Chrome */ display: flex; /* NEW, Spec - Opera 12.1, Firefox 20+ */ |
flex-direction
在flexbox容器上我们可以设置flex主轴方向,属性 : flex-direction
flex-direction属性可以有这几个值:
row:横向;
column:纵向;
1 2 3 4 | -moz-flex-direction : row; -ms--flex-direction: row; -webkit-flex-direction: row; flex-direction: row; |
flex-wrap
同样是设置在容器上的属性
这个主要用来定义伸缩容器里是单行还是多行显示,侧轴的方向决定了新行堆放的方向。
- nowrap(默认值):伸缩容器单行显示,“ltr”排版下,子元素从左到右排列;“rtl”排版上子元素从右向左排列。
- wrap:伸缩容器多行显示,“ltr”排版下,子元素从左到右排列;“rtl”排版上子元素从右向左排列。
- wrap-reverse:伸缩容器多行显示,“ltr”排版下,子元素从右向左排列;“rtl”排版下,子元素从左到右排列。(和wrap相反)
flex-flow
这个属性可以把上面2个属性合并起来写
1 | flex-flow: <‘flex-direction’> || <‘flex-wrap’> |
justify-content
设置在容器上用来定义子元素在容器内沿着主轴的对齐方式。
- flex-start(默认值):子元素向一行的起始位置靠齐。
- flex-end:子元素向一行的结束位置靠齐。
- center:子元素向一行的中间位置靠齐。
- space-between:子元素会平均地分布在行里。第一个子元素一行中的最开始位置,最后一个子元素在一行中最终点位置。
- space-around:子元素会平均地分布在行里,两端保留一半的空间。
align-item
使用在在父元素上,就是一个侧轴上的justify-content属性,但是值略不一样。
- flex-start:子元素在侧轴起点边的外边距紧靠住该行在侧轴起始的边。
- flex-end:子元素在侧轴终点边的外边距靠住该行在侧轴终点的边 。
- center:子元素的外边距盒在该行的侧轴上居中放置。
- baseline:子元素根据他们的基线对齐。
- stretch(默认值):子元素拉伸填充整个伸缩容器。此值会使项目的外边距盒的尺寸在遵照「min/max-width/height」属性的限制下尽可能接近所在行的尺寸。
align-content
这个属性也是在父元素上,在有多行子元素的情况下,对行的对齐方式做安排
- flex-start:各行向伸缩容器的起点位置堆叠。
- flex-end:各行向伸缩容器的结束位置堆叠。
- center:各行向伸缩容器的中间位置堆叠。
- space-between:各行在伸缩容器中平均分布。
- space-around:各行在伸缩容器中平均分布,在两边各有一半的空间。
- stretch(默认值):各行将会伸展以占用剩余的空间。
flex-item的css属性
order
设置一个值,安排排列顺序
flex
flex可以设置3个值
“flex-grow”、“flex-shrink”和“flex-basis”
flex-grow:是一个不带单位的比例主要用来定义flex-item的伸缩比例。
flex-shrink:根据需要用来定义flex-item收缩的能力。缺省是1
flex-basis:这个用来设置伸缩基准值,剩余的空间按比率进行伸缩。默认:auto;
align-self
子元素的对齐方式,可以覆盖父元素的值
1 | align-self: auto | flex-start | flex-end | center | baseline | stretch |