Flex_4_样式与布局小结

合集下载

flex属性总结(全)

flex属性总结(全)

flex属性总结(全)⼀.⽗元素属性1.display:flex;(定义了⼀个flex容器)2. flex-direction(决定主轴的⽅向)row(默认值,⽔平从左到右)colunm(垂直从上到下)row-reverse(⽔平从右到左)column-reverse(垂直从下到上)3. flex-wrap(定义如何换⾏)nowrap(默认值,不换⾏)wrap(换⾏)wrap-reverse(换⾏,且颠倒⾏顺序,第⼀⾏在下⽅)4.flex-flow(属性是 flex-direction 属性和 flex-wrap 属性的简写形式,默认值为row nowrap)5. justify-content(设置或检索弹性盒⼦元素在主轴(横轴)⽅向上的对齐⽅式)flex-start(默认值、弹性盒⼦元素将向⾏起始位置对齐)flex-end(弹性盒⼦元素将向⾏结束位置对齐)center(弹性盒⼦元素将向⾏中间位置对齐。

该⾏的⼦元素将相互对齐并在⾏中居中对齐)space-between(弹性盒⼦元素会平均地分布在⾏⾥)space-around(弹性盒⼦元素会平均地分布在⾏⾥,两端保留⼦元素与⼦元素之间间距⼤⼩的⼀半)6.align-items(设置或检索弹性盒⼦元素在侧轴(纵轴)⽅向上的对齐⽅式)flex-start(弹性盒⼦元素的侧轴(纵轴)起始位置的边界紧靠住该⾏的侧轴起始边界)flex-end(弹性盒⼦元素的侧轴(纵轴)起始位置的边界紧靠住该⾏的侧轴结束边界)center(弹性盒⼦元素在该⾏的侧轴(纵轴)上居中放置。

(如果该⾏的尺⼨⼩于弹性盒⼦元素的尺⼨,则会向两个⽅向溢出相同的长度))baseline(如弹性盒⼦元素的⾏内轴与侧轴为同⼀条,则该值与flex-start等效。

其它情况下,该值将参与基线对齐。

)stretch(如果指定侧轴⼤⼩的属性值为'auto',则其值会使项⽬的边距盒的尺⼨尽可能接近所在⾏的尺⼨,但同时会遵照'min/max-width/height'属性的限制)7.align-content(设置或检索弹性盒堆叠伸缩⾏的对齐⽅式)flex-start(各⾏向弹性盒容器的起始位置堆叠。

对于flex布局的使用心得

对于flex布局的使用心得

对于flex布局的使⽤⼼得弹性盒⼦flex:对于客户端的布局⾮常有⽤,不管是平均分配space-around这个属性还是两端对齐space-betwee在页⾯布局的时候都会有很好的表现。

对于部分内容区域中,具有很多⼤致内容相同的⼏个区块的布局都可以使⽤到它,将⽗级设置为display:flex;⽗级就会变成容器,⼦级就会变成项⽬,项⽬默认是在⼀⾏显⽰,如果项⽬的宽度总和⼤于⽗级的总和了,⼦级就会缩放在⼀⾏显⽰。

因此换⾏是需要⾃⼰设置的。

我平时划分的区块是⽐较细的,因此⽤到换⾏的情况是内容相似⽽且⽐较多的。

换⾏的书写⽅式为:flex-wrap:wrap 默认值为nowrap。

当换⾏过后交叉轴就会变成多根,在⼀根交叉轴的对齐⽅式使⽤的是align-items,当使⽤了换⾏过后对应的交叉轴对齐⽅式属性应当书写为align-content。

在使⽤中遇到⼀个难以解决的问题,想做⼀个骰⼦五的样式,但是中间那个区块没法下去,代码如下:html中代码如下:<div class="father"><div class="first"></div><div class="second"></div><div class="third"></div><div class="fourth"></div><div class="fifth"></div></div>css中代码如下:.father {height: 320px;width: 320px;margin: 0 auto;display: flex;box-sizing: border-box;border: solid 1px red;justify-content: space-between;flex-wrap: wrap;align-content: space-between;}每个盒⼦我给了⼀个背景颜⾊,因为代码都是重复的就不写了。

flex布局全解析

flex布局全解析

flex布局全解析很长一段时间, 我知道有flex这个布局方式, 但是始终没有去学它. 3点原因:1.感觉还比较新, 担心兼容性不好.2.普通的布局方式能满足我的绝大多数需求.3.好像蛮复杂的.最近由于开发需要, 学习了下WeUI的实现, 发现里面大量使用了flex布局, 于是决定学习一下.什么是flexFlexbox Layout, 官方名为CSS Flexible Box Layout Module, 意为"弹性布局", 是CSS3中引入的一种更加灵活高效的布局/对齐/排序方式(还有一种更适合大型布局的网格布局CSS Grid Layout Module). flex是flexible的缩写.任何一个容器都可以指定为flex布局。

.box {display: flex;}行内元素也可以使用flex布局。

.box {display: inline-flex;}flex的基本概念采用flex布局的元素被称为flex容器(flex container), 它的子元素即为flex元素(flex item).flex容器中包含两个相互垂直的轴, 即主轴(main axis)和副轴(cross axis).flex元素沿主轴从主轴起点(main start)到主轴终点(main end)依次排布.如果flex容器包含多行flex元素, 则flex行(flex lines)沿副轴从副轴起点(cross start)到副轴终点(cross end)依次排布.单个flex元素占据的主轴空间叫做主轴长度(main size), 占据的副轴空间叫做副轴长度(cross size).flex的兼容性Getting Dicey With Flexbox中提到:There's a popular myth floating around that flexbox isn't ready for prime time. Wrong! 93% of people are now running a browserthat supports flexbox.That's better than the support for the HTML5 <video>element.前一段时间同事做过video相关的开发, 踩到各种坑, 因此我知道video的支持不那么好, 特别是在Android上. 让我惊奇的是flex竟然比video的支持更好?从CanIUse的数据来看, flex的支持度是: 82.65% (支持) + 14.17% (部分支持) = 96.81%, 而video的支持度是: 92.48%. 浏览器对flex的支持好像并没有特别好...但是有微信的WeUI使用了flex布局, 我觉得在移动端flex应该还是支持度比较高的.所以, 如果你是做移动端开发的, 可以优先考虑flex.flex属性下面就开始介绍与flex布局相关的属性. 以作用对象分为两组, 第一组作用于flex容器, 第二组作用于flex元素.注意:以下属性值都可以有initial(该属性的默认值)和inherit(继承自父元素), 本处省略.用于flex容器的属性这类属性有6种, 分别为:属性含义flex-direction主轴方向flex-wrap换行样式flex-flow前两个的简写形式justify-content主轴对齐方式align-items单行的副轴对齐方式align-content多行的副轴对齐方式注意:∙flex容器的column-*属性会失效.∙flex容器无法拥有::first-line和::first-letter虚元素.flex-direction含义主轴方向可选值row | row-reverse | column | column-reverse默认值rowrow direction为ltr时从左向右→,rtl时从右向左←.row-reverse direction为ltr时从右向左←,rtl时从左向右→.column从上到下↓.column-reverse从下到上↑.注意:row和row-reverse受到了direction属性(默认值为ltr, 可改为rtl)的影响. flex-wrap含义换行样式可选值nowrap | wrap | wrap-reverse默认值nowrapnowrap不换行wrap换行. 行与行从上到下↓排布wrap-reverse换行. 行与行从下到上↑排布flex-flow含义flex-direction和flex-wrap的简写形式可选值flex-direction flex-wrap默认值row nowrapjustify-content含义主轴对齐方式可选值flex-start | flex-end | center | space-between | space-around默认值flex-startalign-items含义单行的副轴对齐方式可选值flex-start | flex-end | center | stretch | baseline默认值stretchalign-content含义多行的副轴对齐方式可选值stretch | flex-start | center | flex-end | space-between | space-around 默认值stretch注意:此属性只在flex容器中有多行flex元素时才有作用.用于flex元素的属性这类属性有6种, 分别为:属性含义order排列顺序align-self flex元素的副轴对齐方式. 对应于flex容器的align-items.flex-grow放大比例flex-shrink缩小比例flex-basis初始大小flex上面三个的简写形式注意: flex元素的float, clear和vertical-align会失效.含义排列顺序. 沿着主轴, flex元素按order的增序排列.可选值<integer>默认值0align-self含义flex元素的副轴对齐方式. 对应于flex容器的align-items.可选值auto | stretch | center | flex-start | flex-end | baseline默认值auto当flex元素有父元素时, 它的align-self: auto即为父元素的align-items属性; 否则(无父元素时), 相当于stretch. flex-grow含义放大比例可选值<number>(非负值)默认值0当有剩余空间时, flex元素会根据flex-grow按比例分配剩余空间.默认值0代表, 即使有剩余空间, 该flex元素也不放大.flex-shrink含义缩小比例可选值<number>(非负值)默认值1当flex容器空间不足时, flex元素会根据flex-shrink按比例缩小.flex-shrink为0则表示, 即使flex容器空间不足, 该flex元素也不缩小.含义初始大小可选值auto|<length>(非负值)默认值autoflex-basis定义了分配剩余空间之前flex元素的初始大小, 可为长度值(如20%, 5rem等)或auto等关键词.flex-basis: auto表示, 以flex元素的主轴长度为flex-basis. 若flex元素的主轴长度也是auto, 则以flex元素内容(即所有子元素)的大小为flex-basis.除了auto还有content, max-content, min-content和fit-content关键词, 但是现在浏览器对它们的支持太少, 可以忽略.flex含义flex-grow, flex-shrink和flex-basis的简写形式可选值none | [ <‘flex-grow’> <‘flex-shrink’>? || <‘flex-basis’> ]默认值0 1 auto(敲黑板) 同学们注意, 这里是重点!∙||用来分割两个或多个选项, 从中选取一个或多个, 不限次序.∙|用来分割两个或多个选项, 从中选取一个.∙[]只是用来分组的.∙?代表可选.举例来说, a | [ b || c ]包含的可能情况有a, b, c, b c, c b.现在回过头来再看none | [ <‘flex-grow’> <‘flex-shrink’>? || <‘flex-basis’> ]就清晰多了.注意, none是一个特殊值, 相当于0 0 auto.另外, 如果flex中不指定:∙flex-grow成员, 则flex-grow会被置为1.∙flex-shrink成员, 则flex-shrink会被置为1.∙flex-basis成员, 则flex-basis会被置为0.注意:flex的初始值是0 1 auto, 即由每个flex因子本身的默认值组成(比方说flex-grow的默认值就是0).但是, 如果利用flex设置了至少一个flex因子, 那么没被设置的那些flex因子的默认值(按grow, shrink, basis的顺序)分别是1 1 0.我来举几个栗子./* 特殊值none */flex: none; /* 相当于0 0 auto *//* 单值,没有单位的数字,是flex-grow */flex: 2; /* 相当于flex: 2 1 0 *//* 单值,有单位的,宽、高,是flex-basis */flex: 10em; /* 相当于flex: 1 1 10em */flex: 30px; /* 相当于flex: 1 1 30px */flex: auto; /* 相当于 flex: 1 1 auto */flex: content; /* 相当于 flex: 1 1 content *//* 两个值:flex-grow flex-basis */flex: 1 30px; /* 相当于 flex: 1 1 30px *//* 两个值:flex-grow flex-shrink */flex: 2 2; /* 相当于 flex: 2 2 0 *//* 三个值:flex-grow flex-shrink flex-basis */flex: 2 2 10%;W3C建议使用简写形式flex, 因为它可以方便地应对下面4种常见情况.flex: initial即flex: 0 1 auto. 以auto方式计算flex-basis, 不可放大, 可缩小.flex: auto即flex: 1 1 auto. 以auto方式计算flex-basis, 可放大, 可缩小.flex: none即flex: 0 0 auto. 以auto方式计算-basis, 不可放大, 不可缩小.flex: <positive-number>即<positive-number> 1 0. flex-basis为0, 以<positive-number>比例增大, 以1的比例缩小.flex元素大小的计算方法自此, 我们已经知道了flex-grow, flex-shrink和flex-basis的作用. 根据这三个值, 计算flex元素的大小只需三步:第一步:计算元素的flex-basis, 有两种情况: 1. 具体的长度值, 或, 2.auto(即flex元素的大小). (这里忽略了content等目前支持还不完善的关键词).第二步:计算剩余空间, 即剩余空间 = flex容器的内部空间 - flex元素flex-basis值的总和.第三步:按照flex因子(放大时为flex-grow; 缩小时为flex-shrink)分配剩余空间到每个元素. flex元素的最终大小 = flex-basis - flex-factor * 剩余空间.举个栗子.假设flex容器的内部空间为200px, flex元素的大小的总和是160px. 看起来, 还有200 - 160 = 40px的剩余空间, 应该放大flex元素, 是不是? 不一定! 要看它们的flex-basis总和.假设它们的flex-basis总和是300px, 那么剩余空间应该是300 - 200 = -100px. 此时剩余空间是负数, 应该以flex-shrink对每个flex元素在flex-basis的基础上进行缩小.下例中, 所有flex元素本身的大小为80px, 元素中为flex值.200px0 1 auto0 3 auto0 1 150px0 3 150px125px75px你可以看到, 第一行的flex元素因为设置了flex-basis:auto, 所以它们的flex-basis就相当于元素大小, 即80px, 即flex-basis总和为160px, 不足容器的200px空间, 此时应该放大元素. 但又由于元素的flex-grow为0, 所以每个元素分配到0 * 40 = 0px的剩余空间, 即不放大.第二行的flex元素设置了flex-basis:150px, 所以它们的flex-basis总和为300px, 超过了容器的200px空间, 故按照flex-shrink(比例为1:3)进行缩小. 由于剩余空间为-100px, 所以第一个元素应缩小25px变成125px, 第二个元素应缩小75px变成75px."绝对flex"和"相对flex"绝对flex:从0开始分配空间.第一行中flex-basis为0, 表示每个flex元素的初始大小都视为0. 此时, 剩余空间就是"flex容器的大小".相对flex:从flex元素大小开始分配空间.第二行中flex-basis为auto, 表示每个flex元素的初始大小都是它本身的大小. 此时, 剩余空间就是"flex容器的大小- flex元素大小的总和".结语呃... flex的东西还是挺多的, 特别是flex因子相关的部分, 得花点儿时间理解.但是, 我相信学flex是值得的, 谁用谁知道!。

flex多行四列多行多列2020年css布局

flex多行四列多行多列2020年css布局

flex多⾏四列多⾏多列2020年css布局第⼀种 flex<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Flex</title></head><body><p>⼩⽅块20*15</p><p>间距都是10</p><style>*{margin:0;padding:0;list-style: none;font-size: 12px;}</style><style>.parent{justify-content: space-evenly;box-sizing: border-box;width:130px;/* 5个空隙*10+4个⽅块*20 */display: flex;flex-wrap: wrap;/*换⾏*/padding-left:10px;padding-top:10px;background: green;}.child{box-sizing: border-box;width:20px;height:15px;border:1px solid;flex:none;/*不放⼤不缩⼩*/margin-right: 10px;margin-bottom: 10px;}</style><ul class="parent"><li class="child">1</li><li class="child">2</li><li class="child">3</li><li class="child">4</li><li class="child">5</li><li class="child">6</li><li class="child">7</li><li class="child">8</li><li class="child">9</li><li class="child">10</li><li class="child">11</li><li class="child">12</li><li class="child">13</li></ul></body></html>第⼆种使⽤浮动<body><p>⼩⽅块20*15</p><p>间距都是10</p><style>*{margin:0;padding:0;list-style: none;font-size: 12px;}</style><style>.parent{width:130px;box-sizing: border-box;padding:10px;padding-left:0;background: green;}.parent::after{content: "";display: block;height: 0;clear: both;}.child{float:left;box-sizing: border-box; width:20px;height:15px;border:1px solid;margin-left: 10px;margin-bottom: 10px; }</style><ul class="parent"><li class="child">1</li> <li class="child">2</li> <li class="child">3</li> <li class="child">4</li> <li class="child">5</li> <li class="child">6</li> <li class="child">7</li> <li class="child">8</li> <li class="child">9</li> <li class="child">10</li> <li class="child">11</li> <li class="child">12</li> <li class="child">13</li> </ul></body>。

30分钟彻底弄懂flex布局

30分钟彻底弄懂flex布局

目前在不考虑IE以及低端安卓机(4.3-)的兼容下,已经可以放心使用flex进行布局了。

什么是flex布局以及它的好处,这里就不再赘述。

在这篇文章里,想说说flex布局的属性语法及其细节。

那么网上也有不少flex布局的教程,为什么又要再写一篇?首先,flex布局的迷之属性们,如果一知半解,机械记忆的话,那不到半个月基本忘光光。

先感受一下这12个flex布局属性,是不是很“迷”人。

容器属性•flex-flow•flex-direction•flex-wrap•justify-content•align-items•align-content元素属性•order•flex-grow•flex-shrink•flex-basis•flex•align-self就连老外也都在twitter吐槽不好理解,可见还是有一定的学习成本。

而目前很多flex教程主要以列举属性为主,缺乏对比和理解性脉络。

因此,下面会通过我梳理的一个脉络去理解flex布局,包括不同属性的异同以及一些容易造成误解的细节点,彻底弄懂flex布局。

对于某个元素只要声明了display: flex;,那么这个元素就成为了弹性容器,具有flex弹性布局的特性。

1.每个弹性容器都有两根轴:主轴和交叉轴,两轴之间成90度关系。

注意:水平的不一定就是主轴。

2.每根轴都有起点和终点,这对于元素的对齐非常重要。

3.弹性容器中的所有子元素称为<弹性元素>,弹性元素永远沿主轴排列。

4.弹性元素也可以通过display:flex设置为另一个弹性容器,形成嵌套关系。

因此一个元素既可以是弹性容器也可以是弹性元素。

弹性容器的两根轴非常重要,所有属性都是作用于轴的。

下面从轴入手,将所有flex 布局属性串起来理解。

flex布局是一种一维布局模型,一次只能处理一个维度(一行或者一列)上的元素布局,作为对比的是二维布局CSS Grid Layout,可以同时处理行和列上的布局。

flex布局各种情况总结分析及实例演示

flex布局各种情况总结分析及实例演示

flex布局各种情况总结分析及实例演⽰2009年,W3C提出了⼀种新的⽅案----Flex布局,可以简便、完整、响应式地实现各种页⾯布局。

⽬前,它已经得到了所有浏览器的⽀持,这意味着,现在就能很安全地使⽤这项功能。

通过笔者⼤量实践,发现flex布局屡试不爽,尤其在移动端⾃适应⽅⾯。

但处于其⼤量的属性记忆混乱,今天图⽂并茂梳理如下。

语法及概念部分实例演⽰部分结合笛卡尔坐标系(仅考虑⼀个item情况,其它情况可以据此的排列组合实现)css部分/*骰⼦的布局*/.box {display: flex;width: 50px;height: 50px;border: 1px solid #ccc;border-radius: 2px;}.box .item{display: inline-block;width: 10px;height: 10px;margin:3px;border-radius: 50%;background: #000;}/*中上(1,0)*/.c2{justify-content: center;}/*右上(2,0)*/.c3{justify-content: flex-end;}/*左间(0,1)*/.c4{align-items: center;}align-items: flex-end;}/*中间(1,1)*/.c6{justify-content: center;align-items: center;}/*右间(2,1)*/.c7{justify-content: flex-end;align-items: center;}/*中下(1,2)*/.c8{justify-content: center;align-items: flex-end;}/*右下(2,2)*/.c9{justify-content: flex-end;align-items: flex-end;}/*两个*//*space-between*/.c21{justify-content: space-between;}/*两个flex-direction+column*/.c22{justify-content: space-between;flex-direction: column;}/*2.3两个space-between+flex-direction+ align-items*/ .c23{justify-content: space-between;flex-direction: column;align-items: center;}/*2.4两个space-between+flex-direction+ align-items*/ .c24{justify-content: space-between;flex-direction: column;align-items: flex-end;}/*2.5两个space-between+flex-direction+ align-items*/ .c25 .item:nth-child(2) {align-self: center;}/*2.6两个space-between+flex-direction+ align-items*/ .c26{justify-content: space-between;}.c26 .item:nth-child(2) {align-self: flex-end;}/*3.1三个align-self:center+flex-end*/.c31 .item:nth-child(2) {align-self: center;}.c31 .item:nth-child(3) {align-self: flex-end;}/*4.1四个*/.c41 {flex-wrap: wrap;justify-content: flex-end;align-content: space-between;}/*4.2四个*/.c42 {flex-wrap: wrap;align-content: space-between;}.column {flex-basis: 100%;display: flex;justify-content: space-between;}/*6.1六个*/.c61{flex-wrap: wrap;}.row{flex-basis: 100%;display:flex;}.row:nth-child(2){justify-content: center;}.row:nth-child(3){justify-content: space-between;}/*九个*/.c9{flex-wrap: wrap;}.Grid {display: flex;}.Grid-cell {flex: 1;}/*百分⽐布局*/.Grid-cell.u-full {flex: 0 0 100%;}.Grid-cell.u-1of2 {flex: 0 0 50%;}.Grid-cell.u-1of3 {flex: 0 0 33.3333%;}.Grid-cell.u-1of4 {flex: 0 0 25%;}/*圣杯布局圣杯布局(Holy Grail Layout)*/ .fh {display: flex;min-height: 98vh;flex-direction: column;margin: 1rem;}.fh-header {display: flex;flex: 1.2;border: 1px solid #ccc;}.fh>.fh-middle {flex: 1;border: 1px solid #ccc;margin: 1rem 0;}.fh>.fh-footer {flex: 2.5;border: 1px solid #ccc;}.fh-content {flex: 1;border: 1px solid #ccc;}.fh-nav {/* 边栏的宽度设为20rem */flex: 0 0 20rem;border: 1px solid #ccc;}.fh-nav {/* 导航放到最左边 */order: -1;margin-right: 1rem;}/*输⼊框布局*/.InputAddOn {display: flex;}.InputAddOn-field {flex: 1;}/*悬挂式布局*/.Media {display: flex;align-items: flex-start;}.Media-figure {margin-right: 1em;}/*固定低栏*/.Site {display: flex;min-height: 100vh;flex-direction: column;}.Site-content {flex: 1;}/*流式布局*/.parent {width: 200px;height: 150px;background-color: black;display: flex;flex-flow: row wrap;}.child {box-sizing: border-box;background-color: white;height: 50px;border: 1px solid red;}html部分<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>fh-main</title><link rel="stylesheet" href="flex.css"></head><body ><h4>骰⼦的布局(左0中1右2,上0间1下2)</h4><p>1.1⼀个左上(0,0):justify-content:flex-start(default);</p><div class="box c1"><span class="item"></span></div><p>1.2⼀个中上(1,0):justify-content:center;</p><div class="box c2"><span class="item"></span></div><p>1.3⼀个右上(2,0):justify-content:flex-end;</p><div class="box c3"><span class="item"></span></div><p>1.4⼀个左间(0,1):align-items: center;</p><div class="box c4"><span class="item"></span></div><p>1.5⼀个左下(0,2):align-items: flex-end;</p><div class="box c5"><span class="item"></span></div><p>1.6⼀个中间(1,1):justify-content: center;align-items:center;</p> <div class="box c6"><span class="item"></span></div><p>1.7⼀个右间(2,1):justify-content:flex-end;align-items:center;</p> <div class="box c7"><span class="item"></span></div><p>1.8⼀个中下(1,2) :justify-content:center;align-items:flex-end;</p> <div class="box c8"><span class="item"></span></div><p>1.9⼀个右下(2,2) justify-content: flex-end;align-items: flex-end;</p><div class="box c9"><span class="item"></span></div><p>2.1两个space-between</p><div class="box c21"><span class="item"></span><span class="item"></span></div><p>2.2两个space-between+flex-direction</p><div class="box c22"><span class="item"></span><span class="item"></span></div><p>2.3两个space-between+flex-direction+ align-items</p><div class="box c23"><span class="item"></span><span class="item"></span></div><p>2.4两个space-between+flex-direction+ align-items:flex-end</p> <div class="box c24"><span class="item"></span><span class="item"></span></div><p>2.5两个align-self</p><div class="box c25"><span class="item"></span><span class="item"></span></div><p>2.6两个align-self</p><div class="box c26"><span class="item"></span><span class="item"></span></div><p>3.1三个align-self:center+flex-end</p><div class="box c31"><span class="item"></span><span class="item"></span><span class="item"></span></div><p>4.1四个</p><div class="box c41"><span class="item"></span><span class="item"></span><span class="item"></span><span class="item"></span></div><p>4.2四个</p><div class="box c42"><span class="column"><span class="item"></span><span class="item"></span></span><span class="column"><span class="item"></span><span class="item"></span></span></div><p>6.1六个</p><div class="box c61"><div class="row"><span class="item"></span><span class="item"></span><span class="item"></span></div><div class="row"><span class="item"></span></div><div class="row"><span class="item"></span><span class="item"></span></div></div><p>9九个</p><div class="box c9"><span class="item"></span><span class="item"></span><span class="item"></span><span class="item"></span><span class="item"></span><span class="item"></span><span class="item"></span><span class="item"></span><span class="item"></span></div><h2>⽹格布局</h2><p>2.1基本⽹格布局</p><div class="Grid"><div class="Grid-cell">Grid-cell</div><div class="Grid-cell">Grid-cell</div><div class="Grid-cell">Grid-cell</div></div><p>2.2百分⽐布局</p><div class="Grid"><div class="Grid-cell u-1of4">u-1of4</div><div class="Grid-cell">...</div><div class="Grid-cell u-1of3">u-1of3</div></div><h2>圣杯布局</h2><div class="fh"><header class="fh-header"><nav class="fh-nav">nav</nav><main class="fh-content">mian</main></header><div class="fh-middle">middle</div><footer class="fh-footer">footer</footer></div><h2>输⼊框的布局</h2><div class="InputAddOn"><span class="InputAddOn-item">icon</span> <input class="InputAddOn-field"><button class="InputAddOn-item">btn</button> </div><h2>悬挂式布局</h2><div class="Media"><img class="Media-figure" src="a/img" alt="aa"> <p class="Media-body">...</p></div><h2>固定低栏</h2><div class="site"><header>header</header><main class="Site-content">main </main><footer>footer</footer></div><h2>流式布局</h2><div class="parent"><span class="child"></span><span class="child"></span><span class="child"></span><span class="child"></span><span class="child"></span><span class="child"></span><span class="child"></span><span class="child"></span><span class="child"></span></div></body></html>。

关于flex布局学习心得(上)

关于flex布局学习心得(上)

关于flex布局学习⼼得(上)flex布局是css3中最灵活最多样的布局⽅式,与传统布局相⽐,它具备更好的适应性。

关注:flex布局关注的对象有两点:容器和部件。

容器就好⽐房间,部件就好⽐房客,flex布局就是通过制定规则来给每个房客安排合理的位置。

所以,flex布局中强调的是房⼦⾥⾯的独⽴环境如何排布,与房屋外⾯的dom结点的交互⼀般不做考虑。

使⽤flex布局的时候,房⼦的构造是⼀定的,即不能由房客来决定房间的⼤⼩,不能由部件来撑开容器(如果由部件来撑开容器,就失去了flex的意义)。

所以,你要先确定容器的形状。

声明⼀个容器需要对容器加上display:flex或者display:inline-flex属性,并且保证容器的⼤⼩是由该元素本⾝或者其⽗集元素决定的。

当你拥有了⼀个房间的形状之后,⾸先房东要先为房客制定⼀些规则,“房东规则”有6种:flex-directionflex-wrapflex-flowjustify-contentalign-itemsalign-contentflex-direction是告诉房客们,当他们依次进⼊房间的时候应该从某个墙根依次排排坐到另外⼀个墙根,即排队的⽅向。

⽅向的种类有四种:从左到右(row)从右到左(row-reverse)从上到下(column)从下到上(column-reverse)。

当我们完成了flex-direction之后,就出现了⼀个问题,那就是如果房客过多,即便从⼀个墙根排排坐到达另外⼀个墙根的时候,还有多余的房客没有座位怎么办?这时候我们就需要flex-wrap属性的帮助,我们可以选择:nowrap(不换⾏,坐不下的房客就去外⾯的过道上吹风)wrap(换⾏,多余的房客回到第⼀个墙根上再向另⼀个墙根排⼀个队)wrap-reverse(换⾏,并且新的⼀⾏在前⾯,多余的房客把先进⼊房间的房客赶到下⼀队,然后⾃⼰在最开始的位置排队)。

flex-flow是前⾯两个属性的连⽤,使⽤时分别设置前两个属性的值。

CSS3 flex布局总结

CSS3 flex布局总结

根轴线,该属性不起作用。
flex-start:交错轴的起点对齐。
.box{
flex-end:交错轴的尽头对齐。 center:交错轴的中点对齐。 baseline:项目的第一行文字的基线对齐。 stretch(默认值):假如项目未设置高度或设为 auto,将占满囫囵容 器的高度。
align-content:flex-start|flex-end|center|space-between|space -around|stretch; } 该属性可能取 6 个值。 flex-start:与交错轴的起点对齐。
.item{
flex-shrink:;/*default1*/}
假如全部项目的 flex-shrink 属性都为 1,当空间不足时,都将等比 例缩小。假如一个项目的 flex-shrink 属性为 0,其他项目都为 1,则 空间不足时,前者不缩小。
flex-basis 属性定义了在分配多余空间之前,项目占领的主轴空间 (mainsize)。扫瞄器按照这个属性,计算主轴是否有多余空间。它
flex-wrap flex-flow justify-content align-items align-content
flex 布局常常用到的的 6 个属性
1、flex-direction 属性打算主轴的方向(即项目的罗列方向)。
flex-direction
.box{
第2页共9页
flex-direction:row|row-reverse|column|column-reverse;
space-around:每个项目两侧的间隔相等。所以,项目之间的间隔比 项目与边框的间隔大一倍。 5、align-items 属性定义项目在交错轴上如何对齐。 .box{ align-items:flex-start|flex-end|center|baseline|stretch;
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Flex 4 样式与布局
第一篇 Flex 4 与自定义布局(Layout)
Flex 4/Spark组件架构的新功能之一是可以定制一个容器的布局而不必改变容器本身。

您需要做的就是定义一个自定义布局。

Flex 4/Spark架构中的容器并不控制它们自己的布局。

相反,每种容器具有一个布局属性,用于确定如何在屏幕上设置子元素的布局。

可以使用一个单独的Group容器,并赋予其一个垂直布局、水平布局或平铺布局,这取决于您将如何创建它。

代码很简单,如下所示:
(参考文章:Flex 4与自定义布局:
译文:/lihe111/archive/2009/07/06/4325571.aspx
原文:/2009/05/flex-4-custom-layouts.html)
第二篇 Flex 4 SkinClass 改变组件外观
在Flex 4中,SkinClass指向的文件通常用一个使用s:skin标签(或者sparkskin)的MXML 文件进行定义。

通过skinclass来改变外观的spark组件通常也是skinclass引用的Host component。

Flex 4 中新的改变外观架构可以在很大的程度上将组件和组件的外观设计分开,这样组件外观设计的代码通过改变小部分的代码就可以得到重用了。

一、SkinClass必须包含的三样东西:
1、HostComponent metadata
SkinClass文件需要引用HostComponent对象,而HostComponent是指需要改变外观的组件。

我们可以通过metadata标签来指定HostComponent。

如:我们需要设置Button 的外观,那么Button就是HostComponent。

Code:
1.<fx:Metadata>
2. <![CDATA[
3. [HostComponent("ponents.Button")]
4. ]]>
5.</fx:Metadata>
2、States
如果HostComponent中有SkinState(一般用metadata标签来声明),例如:
s: ButtonBase 中包含了 1. [SkinState("up")]
那么在相应的skinclass mxml 文件中必须有如下相应的state : 1. <s:states>
2. <s:State name="up"/>
3、 Skin parts
HostComponent 中的属性可以被定义为必须或者是可选的部分(skin parts ),可选的属性一般通过metadata 标签将其默认设置为false 。

如果s:ButtonBase 中包含一下的属性:
那么,skin 文件应该包含一下相应的声明:
二、SkinClass 的使用方法:
(skins.CustomApplicationSkin 为Skinclass 指向的mxml 文件路径) 1、属性引用:
2、
CSS 引入:
3、AS代码指定,比较适合动态皮肤。

三、示例
见word文档《Flex 4 skinclass 简单示例》
第三篇 Flex 4 CSS
Flex 4 对CSS做了很大的改进,虽然还不能像HTML那样随心所欲,但是也能满足任何项目的要求了。

Flex 不支持使用层叠样式表(CSS) 来控制组件的所有可视方面。

属性, 比如x, y, width 和height 是UIComponent 类的属性, 而不是其样式, 因此, 无法在CSS 中进行设置。

您还必须知道您的主题支持哪些属性。

Flex 中的默认主题并不支持所有样式属性。

在Flex 中应用样式有许多方法。

某些样式提供更多粒度控制并能以编程方式被执行。

其他样式不像那么灵活, 但可能需要较少的计算
一、设置样式的几种方式
∙使用本地样式定义
∙使用外部样式表
∙使用内联样式
可以像设定组件的属性一样在MXML标签中设定样式属性。

内联样式的优先级高于本地样式和外部样式。

例如:<:Button id="myButton" fontSize="15" label="My Button"/>
∙使用setStyle() 方法
可以在ActionScript中使用方法来操作组件的样式属性。

使用setStyle()方法的优先级是最高的。

setStyle() 方法采用两个参数: 样式名称和样式值。

二、Flex CSS样式设置
详细见文档:《FLEX 4 CSS样式设置例》
1、四种基本的选择方式:
1)Type
例如:s|Button{ color: #FFFFFF; }
适合任意一个Button的实例。

2)Universal
例如:* { fontWeight: bold; } (注意要加上*号)
对程序中所有组件的字体都有效。

3)Class:由组件的stylename属性引用
例如:.rounded { cornerRadius: 10;}
则引用为:<s:Button styleName="rounded" label="Here be a Button"/> 4)ID:对应组件的ID
例如:#header{ backgroundColor: #FF0000; } (header为组件的ID)
Note:四种方式可以也可以通过组合形成新的选择方式
5)组合方式
例如:.main s|Button{ fontSize: 15; }
即对引用Class 为main的组件内所有Button的样式都有影响。

2、示例(各种使用方法汇总)
1)CssTest.mxml 文件
2)mycss.css 文件
3、效果如下图:。

相关文档
最新文档