发表于: 2017-06-16 22:55:01

1 1074


今天完成的事情:
解决了昨天的遗留问题,想着师兄一来问师兄,已经和师兄弟们沟通过了,没有解决,问之前决定最后试一下,噗,翻看了之前的复盘,找到了解决之法。
angular.forEach(数组2,function(data,index){
     数组1[index].newName = 数组2.value
})
即可为数组1中的每一项添加数组2的一个参数了。(数组1和数组2必须要顺序相同)
第一次用for循环套for循环还加if判断,之前有说尽可能不要for循环套for循环,到了非要用的时候还不想用,有点故步自封了,是尽可能不用,而不是死也不能用。

明天计划的事情:

先搞定侧边栏和新的路由地址,然后开始做模块管理。

遇到的问题:
除了一次小bug,之前有那么几个文件放的不规范,还有一个js在错误的文件内,我复制粘贴到了名字对的文件里,结果不知道什么原因vm = this 前边的var就没有了,然后各种引用的vm.什么的都失效了,然后就各种console结果,还让vm.role = { };都不行,突然发现vm前没有var。加上var好了。IDE里,var 的vm是浅色的,如果没有var的话会变成深色,像一个变量一样。
发现个野生的小bug,新增完角色跳回职位列表,显示搜索职位名称为该公司名,查看了代码发现跳转回列表时传的参数的名字用错了。
repeat的时候$index失效。
收获:
没看到结果都想不到是怎么做的, 看到结果照着做达成效果都没有秒懂,还是仔细看了过程,才终于搞清楚。
就是昨天问的问题,如何把第二个数组对象的某一个参数对应着传给第一个数组,现在好歹终于描述清楚了问题。


一、背景介绍

网页布局(layout)是CSS的一个重点应用。

布局的传统解决方案,基于盒状模型,依赖 display属性 + position属性 + float属性。它对于那些特殊布局非常不方便,比如,垂直居中就不容易实现.

2009年,W3C提出了一种新的方案----Flex布局,可以简便、完整、响应式地实现各种页面布局。它已经得到了几乎所有浏览器最新版本的支持,但是考虑历史版本,在部分浏览器上兼容性不太好,需要在代码中添加浏览器支持。

兼容性

二、知识剖析

1、Flex布局是什么?

Flex是Flexible Box的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性。 任何一个容器都可以指定为Flex布局,行内元素也可以使用Flex布局。注意,设为Flex布局以后,子元素的float、clear和vertical-align属性将失效。

float属性失效

2、基本概念

采用Flex布局的元素,称为Flex容器(flex container),简称"容器"。它的所有子元素自动成为容器成员,称为Flex项目(flex item),简称"项目"。

column

容器默认存在两根轴:水平的主轴(main axis)和垂直的交叉轴(cross axis)。主轴的开始位置(与边框的交叉点)叫做main start,结束位置叫做main end;交叉轴的开始位置叫做cross start,结束位置叫做cross end。项目默认沿主轴排列。单个项目占据的主轴空间叫做main size,占据的交叉轴空间叫做cross size。

3. 父级属性

  1. flex:direction 设置主轴方向,确定子元素主轴排列方式
  2. flex:wrap 主轴宽度不够时是否换行显示
  3. flex-flow 上2复合属性
  4. justify-content 主轴上子元素对齐方式
  5. align-items侧轴子元素对齐方式
  6. align-content 侧轴上有剩余空间时,侧轴对齐方式

4 .子级属性

  1. order 子元素排列顺序
  2. flex-shrink 子元素收缩比率
  3. flex-grow 子元素扩展比率
  4. flex-basis flex-basis属性定义了在分配多余空间之前,项目占据的主轴空间(main size)。浏览器根据这个属性,计算主轴是否有多余空间。它的默认值为auto,即项目的本来大小。
  5. flex 上3简写,复合属性
  6. align-self 允许独立的弹性子元素覆盖弹性容器的默认的侧轴对齐方式(align-items)

5. 属性详解

flex-direction

row默认值,水平方向左至右

column

row-reverse水平方向右至左

column

column垂直方向,上至下排列

column

ccolumn-reverse垂直方向,下至上排列

flex-wrap

nowrap默认值,不换行

column

wrap换行显示

column

wrap-reverse逆序换行显示

column

justify-content

center水平居中对齐

column

flex-start水平靠左对齐

column

flex-end水平靠右对齐

column

space-around水平均匀分布

column

space-between水平两端对齐

column

align-items

stretch默认值,拉伸等高,占满容器高度

column

flex-start垂直顶部对齐

column

flex-end垂直底部对齐

column

center垂直居中对齐

column

baseline项目的第一行文字的基线对齐

align-content

stretch默认值,拉伸,占满容器高度,项目高度由项目内容决定

column

flex-start垂直顶部对齐

column

flex-end垂直底部对齐

column

center垂直居中对齐

column

space-between垂直两端对齐

column

space-around垂直轴均匀分布

column

order子元素排列顺序(默认值为0)

设置的值越小越靠前

column

flex-grow子元素扩展比例

剩余宽度 * 占比值/总比值

默认值为0,即如果存在剩余空间,也不放大。

如果所有项目的flex-grow属性都为1,则它们将等分剩余空间(如果有的话)。如果一个项目的flex-grow属性为2,其他项目都为1,则前者占据的剩余空间将比其他项多一倍。

盒子1设置flex-grow:1的时候单独分配剩下的所有空间

column

flex-shrink子元素收缩比例

溢出宽度 * 占比值/总比值

默认值为1,即如果空间不足,该项目将缩小。都为1的话,均匀缩小。

如果所有项目的flex-shrink属性都为1,当空间不足时,都将等比例缩小。如果一个项目的flex-shrink属性为0,其他项目都为1,则空间不足时,前者不缩小。

父级宽度为300px,子级为100px,收缩后宽度为300*1/4=75px

column

flex-basis

属性定义了在分配多余空间之前,项目占据的主轴空间(main size)。浏览器根据这个属性,计算主轴是否有多余空间。它的默认值为auto,即项目的本来大小。它可以设为跟width或height属性一样的值(比如350px),则项目将占据固定空间。
demo1

align-self

align-self属性允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items属性。默认值为auto,表示继承父元素的align-items属性,如果没有父元素,则等同于stretch。
demo1

三、常见问题

使用flex-grow等分宽度,当元素内部内容宽度大于最小宽度时,不能等分排列,甚至溢出,影响页面布局,怎么解决?

四、解决方案

为子元素设置width:100%;且overflow:hidden;

demo2

五、编码实战

详情见视频

六、拓展思考

flex布局最常用的是什么场景?

一般实现垂直居中是一件很麻烦的事,但flex布局轻松解决

                
                    display:flex;
                    justify-content: center;
                    align-items: center;                

七、参考文献

flex详解--阮一峰的个人博客
flex实例--阮一峰的个人博客
css之flex兼容

更多讨论

既然各大主流浏览器最新版本已经支持了flexbox,那么有没有必要在代码中进行兼容写法?

兼容性

flex兼容性写法

元素兼容写法
                    
                        display: -webkit-box;  /* 老版本语法: Safari, iOS, Android browser, older WebKit browsers. */
                        display: -moz-box;     /* 老版本语法: Firefox (buggy) */
                        display: -ms-flexbox;  /* 混合版本语法: IE 10 */
                        display: -webkit-flex; /* 新版本语法: Chrome 21+ */
                        display: flex;         /* 新版本语法: Opera 12.1, Firefox 22+ */                    
                
子元素兼容写法
                        
                            -webkit-box-flex: 1   /* OLD - iOS 6-, Safari 3.1-6 */
                            -moz-box-flex: 1;     /* OLD - Firefox 19- */
                            -webkit-flex: 1;      /* Chrome */
                            -ms-flex: 1           /* IE 10 */
                            flex: 1;              /* NEW, Spec - Opera 12.1, Firefox 20+ */



返回列表 返回列表
评论

    分享到