css3手册弹性布局,设置弹性布局代码
div+css3弹性盒子(flex box)布局
弹性盒子是CSS3的一种新布局模式。
CSS3 弹性盒( Flexible Box 或 flexbox),是一种当页面需要适应不同的屏幕大小以及设备类型时确保元素拥有恰当的行为的布局方式。
引入弹性盒布局模型的目的是提供一种更加有效的方式来对一个容器中的子元素进行排列、对齐和分配空白空间。
首先要明白几个概念:
主轴 :Flex容器的主轴主要用来配置Flex项目,默认是水平方向
侧轴 :与主轴垂直的轴称作侧轴,默认是垂直方向的
方向 :默认主轴从左向右,侧轴默认从上到下
主轴和侧轴并不是固定不变的,通过flex-direction可以互换。
表格中的数字表示支持该属性的第一个浏览器的版本号。
紧跟在数字后面的 -webkit- 或 -moz- 为指定浏览器的前缀。
弹性盒子由弹性容器(Flex container)和弹性子元素(Flex item)组成。
弹性容器通过设置 display 属性的值为 flex 或 inline-flex将其定义为弹性容器。
弹性容器内包含了一个或多个弹性子元素。
注意: 弹性容器外及弹性子元素内是正常渲染的。弹性盒子只定义了弹性子元素如何在弹性容器内布局。
弹性子元素通常在弹性盒子内一行显示。默认情况每个容器只有一行。
以下元素展示了弹性子元素在一行内显示,从左到右:
决定项目的方向。
注意: 如果元素不是弹性盒对象的元素,则 flex-direction 属性不起作用。
属性值
flex-wrap 属性规定flex容器是单行或者多行,同时横轴的方向决定了新行堆叠的方向。
可以取三个值:
(1) nowrap (默认):不换行。
(2)wrap:换行,第一行在上方。
(3)wrap-reverse:换行,第一行在下方。
flex-flow属性是flex-direction属性和flex-wrap属性的简写形式,默认值为row nowrap。
justify-content 用于设置或检索弹性盒子元素在主轴(横轴)方向上的对齐方式。
align-items 属性定义flex子项在flex容器的当前行的侧轴(纵轴)方向上的对齐方式。
数值越小,排列越靠前,默认为0。
integer:用整数值来定义排列顺序,数值小的排在前面。可以为负值,默认为0。
integer:一个数字,规定项目将相对于其他灵活的项目进行扩展的量。默认值是 0。
flex 元素仅在默认宽度之和大于容器的时候才会发生收缩,其收缩的大小是依据 flex-shrink 的值。默认为1,即如果空间不足,该项目将缩小。负值对该属性无效
integer:一个数字,规定项目将相对于其他灵活的项目进行收缩的量。默认值是 1。
如果设置为0不进行收缩,值越大收缩越多。
CSS3 弹性布局
flex 是 flexible box 的缩写,意为“弹性布局”,用来为盒状模型提供最大的灵活性。能够高效方便的控制元素的对齐、排列,自动计算布局内元素的尺寸,无论元素的尺寸是固定的还是动态的,控制元素在页面的布局方向。
弹性盒子由弹性容器(flex container)和弹性子元素(flex item)组成。
弹性容器设置属性?display:flex;
一、容器属性
flex-flow 复合属性,是 flex-direction 和 flex-wrap 的简写形式。 默认值:flex-flow: row nowrap;
⑴ flex-direction 子元素排列方向
flex-direction: row; 从左到右
flex-direction: row-reverse; 从右到左
flex-direction: column; 从上到下
flex-direction: column-reverse; 从下到上
⑵ flex-wrap 子元素换行方式
flex-wrap: nowrap; 不换行
flex-wrap:wrap; 换行
flex-wrap: wrap-reverse; 反转 wrap 排列,行颠倒
2 justify-content 子元素沿主轴对齐方式
justify-content: flex-start;
justify-content: space-between;
3 align-items 子元素在交叉轴上对齐方式
align-items: center; 垂直方向居中
align-items:flex-start; 垂直方向的顶部/交叉轴的起点对齐
align-items: flex-end; 垂直方向的底部/交叉轴的终点对齐
align-items: baseline; 项目的第一行的文字的基线对齐
align-items: stretch; 默认值,如果项目未设置高度或设为auto,将占满整个容器的高度
二、子元素属性(写在子元素下)
align-self 用于设置弹性子元素自身在侧轴(纵轴)方向上的对齐方式。允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items属性。
align-items: center;
align-items: flex-start;
align-items: flex-end;
align-items: baseline;
align-items: stretch;
order 定义子元素的排列顺序。数值越小,排列越靠前,默认为order: 0;,可以为负值。
flex-grow 定义子元素的扩展比率,主要作用:分配剩余空间。负值无效。
flex-grow: 0; 默认值,即如果存在剩余空间,也不放大。
flex-grow: 1; 如果存在剩余空间,放大 ,等分剩余空间。
flex-shrink 定义子元素的收缩比率,值越大,按比例缩的就越小。
flex-shrink: 1; 默认值,即如果空间不足,缩小。
flex-shrink: 0; 不缩小。
flex-basis 定义元素的默认基准值。
设置了flex-basis,width就不起作用;同时存在的时候,优先使用flex-basis。
如果容器的宽度太小,子元素排列不下,设置的flex-basis的宽度会自动缩小,直到占满容器。
链接:
CSS3弹性盒模型的布局理解
什么是flex布局?
传统的布局方案是基于盒模型,依赖于display:block和float+position,但是对于一些特殊的布局来说就不是很方便,如在盒模型中垂直居中。
2009年W3C提出一种新的布局方案,flex弹性盒布局,目前兼容的浏览器有chrome opera IE Firefox Sifari?
flex兼容浏览器版本
但是在未来flex布局将会成为布局的首选方案。
flex是flexinle BOX的缩写。意思是弹性布局,用来为盒模型提供最大的灵活性。? ? 任何一个容器(标签)都可以指定为flex布局。用display:flex;
如果给容器设置flex的时候当前容器内子元素的float,clear,vericla-align都将会失效
flex的基本概念
容器默认存在两根轴:水平的主轴(main axis)和垂直交叉轴(cross axis).主轴的开始位置(与边框的交叉点)叫做main start, 结束位置叫做main end ;交叉轴的开始位置叫做cross start ,结束位置叫做cross end.项目默认沿主轴排列。单个项目占据的主轴空间叫做main size,占据的交叉轴叫做cross size.
如果给一个元素设置为flex后,这个元素就会作为子元素的flex容器。通过给容器设置属性来改变里面子元素的位置。
二
首先要给父元素添加display:flex;将父元素转化为弹性盒
2.用flex-direction来改变盒子里元素的位置
row 默认在一行内排列(从左向右)
row-reverse:反转横向排列(右对齐,从后往前排,最后一项排在最前面。)
column :纵向排列。
column-reverse:反转纵向排列,从下往上排,最后一项排在最上面
3.内容对齐(justify-content)属性应用在 弹性容器 上,把弹性项沿着弹性容器的主轴线(main axis)对齐
justify-content:flex-start 默认,左对齐(图1)
justify-content:flex-end 右对齐(图2)
justify-content:center 居中对齐(图3)
justify-content:space-between 两端对齐,中间自动分配
justify-content:space-around 自动分配距离
主轴对齐方式
4.align-items(交叉轴对齐方式)
flex-start:顶端对齐
flex-end:底对齐
center:垂直居中对齐
baseline:项目内文本的底线对齐
stretch? 默认值? ? 项目的高度自适应容器(注:子元素不能设置高)
交叉轴对齐方式
5.flex-wrap
该属性控制flex容器是单行或者多行,同时横轴的方向决定了新行堆叠的方向。
? nowrap:flex容器为单行。该情况下flex子项可能会溢出容器
? wrap:flex容器为多行。该情况下flex子项溢出的部分会被放置到新行,子项内部会发生断行
? wrap-reverse:反转 wrap 排列。
图1(nowrap)注意如果父元素盒设置宽度会自动缩子元素容器宽度
图2(wrap)
图3(warp-reverse)
容器单行或者多行方式
?6、align-content(行与行之间对齐方式)
当伸缩容器的侧轴还有多余空间时,本属性可以用来调整「伸缩行」在伸缩容器里的对齐方式,这与调整伸缩项目在主轴上对齐方式的 ‘?justify-content’ 属性类似。 注:本属性在只有一行的伸缩容器上没有效果。
flex-start没有行间距
flex-end底对齐没有行间距
center居中没有行间距
space-between两端对齐,中间自动分配
space-around自动分配距离
css3笔记4 盒模型, flex 弹性布局,三列布局
咦,感觉这个层次示意图,比较值钱! 单独放一下.
触发怪异模式的条件
如果想设置滚动条样式怎么办?
三列布局
第一种 绝对定位
css
利用 vw 和 calc()?
float方式,
要注意html的顺序
html
scss
参考 三列布局实现4种方法 ;
双侧翼,还真是学习了.
这样能够保证先加载中间的主要内容
html
scss
不用float 用display : inline-block行不行?
这才发现 float 和 inline-block 有个挺大的区别
float 时, left 通过 margin-left 向左移动时, right 会被 mid卡主.
inline-block 时, left通过margin-left 向左移动时, right会跟着left 一起移动.
双侧翼很巧妙!
css每个单句都不怎么难, 但复合使用不太好掌握.
圣杯模式
html
scss
这个就更巧妙了,我真实佩服的五体投地.
首先, width 和 margin 的百分比都是 针对父级的宽度, 这个宽度是 content-width
不包括padding部分.
所以根据padding 预留出左右的空间.
根据float 的特性, 左右会折行到下一行,
通过margin-left 可以让float元素 之间重叠, 让他们回到同一行.
但重要的是, left 的移动,right不会跟着移动,这和inline-block 不同.
最后用relative最后再调一次位置.
实在是精妙.
css3 关于position 感觉非常坑人
关于 百分比的基准值,这里有写.
用flex
html
scss
确实很方便, 问题来了, 如果我想让mid 先加载怎么办?
利用order
html
scss
设置在子元素,伸缩项目上.
多余的部分会进行拉伸填充,
每个子元素的默认是为0, 默认是不会拉伸填充,不变形.
如果设置,则按照比例,分割空间分配.
也就是会经过变形不超出父级.
默认值为 1, 按照该比例,切割子元素,
如果我们想让他们不变形且不换行,
可以把子元素的shrink 值都设置为0
这就是视频和文字的差异了,
因为用文字表达要准确,所以只能说的不是人话,
实际上核心逻辑非常简单.
刚开始,我不明白这个属性有什么用处,
后来发现三列布局时,通过html顺序和 order配合可以调整加载顺序.
默认值为 0
如果我们想设置子元素的主轴方向的属性,
可以用 grow, shrink, base ,order, 可以调整主轴的大小和位置
如果想谁知子元素的侧轴方向的属性,
可以用aline-item,
父元素上的 flex-direction flex-wrap justify-content aline-item aline-content
这几个属性,都是用来进行布局的.
非常的,,嗯强大.
我们讲主轴设为 x轴, 设定多行的情况,
讨论一下 aline-item 和 aline-content的效果区别.
之前我只是笼统的知道 aline-item 作用在侧轴只有一行的情况.
aline-content 作用在侧轴多行的情况.
而实际上 aline-item 对 侧轴多行的情况也是有效果的,只是不一样.
html
当值为strech时, 两个效果是一样的.
注意strech 如果想要有效果, 就必须让heigth(侧轴宽度) 不是固定宽度,否则失效.
除了这三个之外, aline-content 还有两个属性,
与justify-content 非常类似,
如果父级 relative 子级当中有 absolute的元素,
则该子元素不受到 flex布局的影响.
flex布局时会排除该元素进行布局
至此,我觉得flex进行布局,那是真的强.
主轴和侧轴的各自控制属性基本就全了.
侧轴唯一比主轴差的属性,应该就是 shink 和 order属性了.
好课外思考就到这里, 继续看视频
CSS3中的弹性框布局Flexbox可以实现的效果有哪些?
flex-box 弹性布局可以实现的效果:自适应布局,效果图如下:
代码如下:
!DOCTYPE HTML
html
head
?meta charset="utf-8"
?title flex box 弹性布局 /title
?meta name="Keywords" content=""
?meta name="Description" content=""
?style type="text/css"
html,body{height:100%;margin:0;}/*需要添加高度控制,否则无法撑满整个屏幕*/
body{
display:-webkit-box;
-webkit-box-orient:vertical;/*按照垂直方向上进行自适应处理*/
}
.content{-webkit-box-flex:1;/*分配剩余的所有空间*/} .header{height:50px;min-width:500px;}/*顶部模块高度定死*/
.logo{width:100px;height:50px;background:#99f;}/*为区分模块,设置了背景色 logo部分固定宽高*/
.nav{height:50px;background:#ccc;}/*nav模块不固定宽度*/
.content{min-height:100px;}/*为防止之后的调整窗口大小是出现影响视觉效果的问题,特设置最小高度*/
.content,.header{display:-webkit-box;/*为content,header部分也添加box的展示模式*/}
.nav{-webkit-box-flex:1;}
.con2{-webkit-box-flex:1;}
.con1{width:200px;background:#f99;}/*固定宽度,高度不定*/
.con2{min-width:200px;background:#999;}/*同上的min-height*/
.con3{width:100px;background:#9f9;}/*固定宽度,高度不定*/
.footer{height:50px;min-width:500px;background:#ccc;}/*固定高度*/
?/style
?link href="" style="text/css" rel="stylesheet"/
/head
body
?div class="header"
div class="logo"logo部分,宽高固定/div
div class="nav"nav部分,高度固定,宽度自适应/div
?/div
?div class="content"
div class="con1"内容初始化第1模块/div
div class="con2"内容初始化第2模块/div
div class="con3"内容初始化第3模块/div
?/div
?div class="footer"底部,宽度不定,高度固定/div
/body
/html
CSS3-flex弹性布局之flex属性
flex 大致分为两类属性:容器属性和项目属性(容器内部项目的属性)。flex 属性( flex:1 )如就给容器内部项目设置的属性。
这里的 wrap 指容器,item 我们称作项目。我们还需要知道 flex 属性是 flex-grow , flex-shrink 和 flex-basis 的简写,默认值为 0 1 auto 。后两个属性可选。接下来我们逐一介绍这三个属性:
flex grow 属性设置 flex 容器中的 ** 可用空间 ** 应分配给该项的大小。如果所有同级项目都具有相同的值,则所有项目将获得相同的可用空间份额,否则将根据定义的不同比率进行分配。
从左到右三个红色方块的宽度依次为 48.5 + 97 + 48.5 = 194,加上 6 个边框刚好 200。三个 item 按照 1:2:1 的比例占满了容器。上面我们并没有给 item 添加宽度,如果我们给它们加上 width 会怎么计算呢?
我们通过控制台查看三个 item 的宽度从左到右依次是 61 + 72 + 61 = 194,加上 6 个边框刚好 200。但是三个元素并不是按照 1:2:1 的比例分配的。这是为什么呢?仔细看定义后知道,我们给 wrap 设置了 width 为 200px,三个 item 设置了 50px,所以剩余的是 50px。剩余的 50px 按照 1:2:1 的比例又分别分配给了三个 width 为 50px 的 item。 注意这个比例是剩余空间分配的分配比例,而不是分配后元素自身的比例。
设置项目的收缩比例,如果空间不足,该项目将缩小。
默认值为 1。
设置或检索弹性盒伸缩基准值。如果所有子元素的基准值之和大于剩余空间,则会根据每项设置的基准值,按比率伸缩剩余空间。
flex 属性是 flex-grow, flex-shrink 和 flex-basis 的简写。