发表于: 2018-07-31 11:42:33

1 551


## 任务介绍

**简介:**护工列表页-一个常见的移动页面,需要使用bootstrap

**要求:**  

- 解决垂直居中;

- 模拟下拉选框;

- 做出复杂的列表页;

**任务原型:**

**验收标准:**

- 顶部底部固定在屏幕上方下方

- 自适应布局,在主流手机中都可以显示

- 当屏幕过小时,表格内容大小能根据屏幕改变。

- 以bootstrap作为基础布局,添加自定义样式表对bootstrap无法表达的细节样式进行调整

## 完成的事情

- 深度剖析flex布局原理

- 规划任务六  

- 了解了bootstrap

- 完成基本页面的编写  

------

## 遇到的问题


## 收获

1. #### **bootstrap介绍和应用**          

- 一款简洁,直观,强悍的前端开发框架,让web开发更迅速,简单。  

- 准备:  

  - 先要去它的官网[http://v3.bootcss.com](http://v3.bootcss.com/)进行下载:  

    1. 下载Bootstrap->用于生产环境的Bootstrap  

    2. 下载成功后可以得到一个.zip的文件,解压后我们可以得到一个包含css、fonts和js的文件夹,准备工作我们就做好了,然后新建一个文件夹,重命名后,将刚刚三个文件夹复制到该文件夹中,再用自己的编辑器打开刚刚的文件夹,点击file-open folder,选择该文件夹点击确定即可。最后在该文件夹下新建一个index.html文件

    3.  重新回到bootstrap官网,导航栏选择“起步”,向下拖动或在右侧选择“基本模板”,将下列代码进行复制,粘贴到index.html中 。  

  - 用法: 

    - 只要在body内添加相应的模块内容,就能呈现多彩的按钮。

- 参考: 

  - https://www.w3schools.com/bootstrap4/bootstrap_get_started.asp  

  - http://www.bootcss.com/   

  - https://blog.csdn.net/gaiyindexingqiu/article/details/72454069

1. #### **深刻理解flexbox**    

- **flexbox简介:**

  - Flexbox模块即使不知道视窗大小或者未知元素情况之下都可以智能的,灵活的调整和分配元素和空间两者之关的关系。简单的理解,就是可以自动调整,计算元素在容器空间中的大小。      

- **基础应用:**  

  - 使用一个无序列表(`ul`)和一群列表元素(`li`),启动Flexbox格式化上下文的方式如下: 

  ```html

  /* 声明父元素为flex容器 */

  ul {

      display:flex; /*或者 inline-flex*/

  }

  ```

  给列表元素(`li`)添加一点基本样式,这里你可以看到发生了什么。

  ```css

  li {

      width: 100px;

      height: 100px;

      background-color: #8cacea;

      margin: 8px;

  }

  ```

 

  通过图片可以看出,本该遵循css垂直堆栈的ul块状元素,从上往下排,用了flexbox布局之后,却在一行上显示,变成了水平显示,就像使用了float一样。    

- **意混淆的属性:**

  - **flex-flow:flex-direction  flex-wrap;**

  - **justify-content: space-between;**   

    - 让除了第一个和最后一个Flex项目的两者间间距相同(两端对齐)  

 

  - **justify-content:space-around;**   

    - 让每个Flex项目具有相同的空间  ,和space-between不同的是,第一个Flex项目和最后一个Flex项目距Main-Axis开始边缘和结束边缘的的间距是其他相邻Flex项目间距的一半 。

 

  - **align-items: stretch(默认值);**      让所有项目高度和Flex容器高度一样    

  - order:integer;   按数字大小从低往高排列。  

  - **flex-grow: 0(默认);和flex-shrink: 1(默认);**  

    - 控制flex项目在容器有多余空间如何放大,在没有额外空间又如何缩小。可以接受0或大于0的任何数  

    - 默认情况下,`flex-grow`属性值设置为`0`。表示Flex项目不会增长,填充Flex容器可用空间。取值为`0`就是一个开和关的按钮。表示`flex-grow`开关是关闭的。

    -  如果把`flex-grow`的值设置为`1`。  现在Flex项目扩展了,占据了Flex容器所有可用空间。也就是说开关打开了。如果你试着调整你浏览器的大小,Flex项目也会缩小,以适应新的屏幕宽度。 

  - **flex-basis**   

    - `flex-basis`属性可以指定Flex项目的初始大小。也就是`flex-grow`和`flex-shrink`属性调整它的大小以适应Flex容器之前。   

    - `flex-basis`默认的值是`auto`。`flex-basis`可以取任何用于`width`属性的任何值。比如 `% || em || rem || px`等。   

    - 如果`flex-basis`属性的值是`0`时,也需要使用单位。即`flex-basis: 0px`不能写成`flex-basis:0`。   

    - 默认情况,Flex项目的初始宽度由`flex-basis`的默认值决定,即:`flex-basis: auto`。Flex项目宽度的计算是基于内容的多少来自动计算,意味着,如果你增加Flex项目中的内容,它可以自动调整大小 。

    - 如果你想将Flex项目设置一个固定的宽度,你也可以这样做:

      ```

      li {

          flex-basis: 150px;

      }

      ```

      现在Flex项目的宽度受到了限制,它的宽度是`150px`。

     

    - `flex`是`flex-grow`、`flex-shrink`和`flex-basis`三个属性的速记(简写)GSB 。   

  - **flex: 0 0 auto;** 

    - 相当于`flex: none`。 宽度是被自动计算,不过弹性项目不会伸展或者收缩(因为二者都被设置为零)。伸展和收缩开关都被关掉了.试着缩放一下浏览器,你会注意到弹性项目不会收缩其宽度。它们从父元素中突出来了,要看到所有内容,   必须横向滚动浏览器 .  

  - **flex: “positive number”**

    - 这里正数可以代表任何正数(没有引号)。这与 `flex: “正数” 1 0` 相同。

        `flex: 2 1 0` 与写为 `flex: 2` 是一样的,`2`表示任何正数。    

  - **flex: auto; 等同于flex: 1 1 auto;**    

  - **参考:**

    - https://www.w3.org/TR/css-flexbox-1/    

    - https://hufan-akari.github.io/solved-by-flexbox/

## 深度思考

1. 为什么设置了flex布局后,子元素的float,clear,还有vertical-align属性不起作用?

2. flex项目上使用margin:auto对齐会出现什么情况?

   - 当在Flex项目上使用 `margin: auto` 时,值为 `auto` 的方向(左、右或者二者都是)会占据所有剩余空间。 举例子说明一下:

     ```

     <ul>

         <li>Branding</li>

         <li>Home</li>

         <li>Services</li>

         <li>About</li>

         <li>Contact</li>

     </ul>

     

     ul {

         display: flex;

     }

     li {

         flex: 0 0 auto;

     }

     ```

     你可以看到如下的效果:

     

     这里有几件事情要注意:

     - `flex-grow` 值为设置为`0`。这就解释了为什么列表项不会伸展。

     - Flex项目向Main-Axis的开头对齐(这是默认行为)。

     - 由于项目被对齐到Main-Axis开头,右边就有一些多余的空间。看到了吧?

 

     现在在第一个列表项(branding)上使用 `margin: auto`,看看会出啥情况。

     ```

     li:nth-child(1) {

         margin-right: auto; /*只应用到右外边距*/

     }

     ```

     

     刚刚发生了什么?之前的剩余空间现在已经被分配到第一个Flex项目的右边了。

     

     **当在Flex项目上使用 margin: auto 时,值为 auto 的方向(左、右或者二者都是)会占据所有剩余空间**。

     如果想让一个Flex项目的两边都用自动外边距对齐,该怎么办呢?

     ```

     /* 如果愿意的话,也可以用 margin 简写来设置两个边 */

     li:nth-child(1) {

         margin-left: auto;

         margin-right: auto

     }

     ```

   

     现在空白被分配到Flex项目的两边了。

     那么,这是不是对很酷的自动外边距对齐的一种折衷方案呢?看起来是。如果没注意的话,它也可能是受挫之源。当在一个Flex项目上使用自动外边距(`margin: auto`)时,`justify-content` 属性就不起作用了。

     例如,在上面的Flex容器上通过 `justify-content`属性,设置不同的对齐选项时,对布局没有影响。

     ```

     ul {

         justify-content: flex-end;

     }

     ```

3.  flex是否兼容所有浏览器?  

   - [Flexbox规范](http://dev.w3.org/csswg/css-flexbox/)还没有最终确定,所以自然会有一些最新的草案和浏览器实现滞后现象  

   - 可以阅读https://github.com/philipwalton/flexbugs    

4. flex的项目可以成为flex容器么?  

   - 答案是可以的,并且你想嵌套多深就嵌套多深(不过理智的做法是保持一个合理的水平) 

## 明日计划

- [ ] 制作雪碧图,并且使用雪碧图替换当前的多张图片  

- [ ] 深入理解bootstrap

- [ ] 完成页面的编写  

- [ ] 日报总结  

- [ ] 完成任务提供的深度思考内容



返回列表 返回列表
评论

    分享到