对于刚接触前端的小白,在还原页面样式的时候,往往会遇到页面布局(layout)上的问题,用着生硬的padding来固定盒子的位置,不仅代码看的沉重,还得适应各种浏览器页面,始终没有办法做到统一。接下来,我来介绍一种能把布局写活的方法:Flex布局。

  Flex布局是Flexible Box的缩写,意思是弹性布局。设为flex布局后,子元素的float(浮动)、clear(清除浮动)和vertical-align(垂直对齐方式)属性会失效。

  采用 Flex 布局的元素,称为 Flex 容器(flex container),简称"容器"。它的所有子元素自动成为容器成员,称为 Flex 项目(flex item),简称"项目"。任何一个容器都可以指定为Flex布局(块级元素和行级元素)。

  Flex有以下六种属性:

  • flex-direction
  • flex-wrap
  • flex-flow
  • justify-content
  • align-items
  • align-content
  1. flex-direction属性

      flex-direction属性决定主轴方向,分别有四个值:row(默认值,左=>右)row-reverse(右=>左)column(上=>下)column-reverse(下=>上)。

      当我们在容器里写入flex布局:display:flex,flex-direction属性会默认为row:

    .father{
    display: flex;
    background-color: rgb(192, 185, 185);
    }

      它的子元素我设置了四个:a,b,c,d(宽为200px,高为50px,颜色不同)。页面效果为下:

      改变flex-direction属性的值:row-reverse,页面效果改变为:

      当flex-direction属性的值变为column时,效果和不写入flex布局一样,及从上到下;column-reverse时则相反。

  2. flex-wrap属性

      flex-wrap属性规定了

         当布局内元素一行盛不下,如何换行。flex-wrap属性有三个值:nowrap(默认,不换行)wrap(第一行在上)wrap-reverse(第一行在下)。

      同样是上面的例子,我把每个元素的宽度设置为500px,页面渲染为下:

      打开布局我们看到:

      它的样式自动调成页面可容纳宽度,这就是当flex-wrap属性nowrap默认下的效果。改变flex-wrap属性的值为wrap时,页面效果为下:

      当第一行放不下时,转到第二行继续,依次排列。改变flex-wrap属性的值为wrap-reverse时,页面效果为下:

      排列顺序为从左到右,从下到上,最后一行放不下,转到倒数第二行,依次排列。

  3. flex-flow属性

      flex-flow属性包含flex-direction属性和flex-wrap属性,格式为:

    .father{
    display: flex;
    flex-flow: row nowrap;
    background-color: rgb(192, 185, 185);
    }

      其中row为flex-direction属性的默认值,nowrap为flex-wrap属性的默认值,这两个值视页面需求更改。

  4. justify-content属性

      justify-content属性定义了布局内元素在水平方向的对齐方式,其有五个值:flex-staet(默认值,左对齐)flex-end(右对齐)center(居中)space-between(两端对齐,元素之间间隔相等)space-around(每个元素两侧间隔相等)。

      justify-content属性往往用在页面右侧按钮,输入框、图片等元素对齐方式。

      在我接触的项目里,需要很多放置在页面右侧的按钮,如“新建”按钮,“删除”按钮等,此时我就会用justify-content属性调整按钮的位置,例如:

    <div class="father">
    <button>新建</button>
    </div>

      这是一个新建按钮,我需要把它放置到页面的右侧,则我需要设置这个盒子的justify-content属性:

    .father{
    display: flex;
    justify-content: flex-end;
    background-color: rgb(192, 185, 185);
    }

      此时按钮就出现在页面右侧。若按钮所在的同一水平的左侧有其他的元素,则可以改变justify-content属性的值为space-between,为下:

    <div class="father">
    <div class="a">a
    </div>
    <button>新建</button>
    </div> .father{
    display: flex;
    justify-content: space-between;
    background-color: rgb(192, 185, 185);
    }

      页面效果为下:

      然后改改样式就好了。

        当使用space-around值时,系统会自己分析页面的宽度以及每个元素对应的位置,如果对页面效果不满意,还可以用padding设置间距。

  5. align-items属性

       align-items属性定义布局里的元素在垂直水平的对齐方式。align-items属性有五个值:stretch(默认值,未设置高度时与父元素高度相同)flex-start(垂直向上对齐)flex-end(垂直向下对齐)center(垂直居中对齐)baseline(元素第一行文字对齐)

        当布局里的每个元素设置了不同的高度时,align-items属性默认值会变为flex-start,效果为下:

      我设置了父元素高度为300,子元素a,b,c,d高度分别为100,120,40,200。默认为向上对齐。当值变为center时,效果为下

        为了实现文字对齐,我给这些元素设置了margin-top,分别为20,50,10,30。改变align-items的值为baseline,效果为下:

      设置padding-top也可以,但是会改变原来元素的高度。

  6. align-content属性

       若布局容器内有多行元素,则align-content属性起作用,若只有一行元素,则align-content属性不起作用。

       align-content属性有六个值:stretch(默认值,所有行占满整个布局)flex-start(于布局顶部对齐)flex-end(于布局底部对齐)center(于布局高度中心对齐)space-between(于顶部和底部对齐,元素间隔相等)space-around(元素上下间隔相等)

       align-content属性与justify-content属性类似,一个是水平对齐,一个是垂直对齐。

有趣的Flex布局的更多相关文章

  1. flex 布局 初次接触这个好使又不是特别好用的布局方法

    刚开始学前端的童鞋们应该也是一样先学习的table然后再学习了盒子模型,感觉终于学会了简单的网页布局,使用各种display,float,position绞尽脑汁给页面布局成自己想要的页面样式,然而, ...

  2. 通过游戏来学习CSS的Flex布局

    在复习Flex 布局的时候发现的了几个有趣的小游戏,在这里分享并记录几个有难度的答案 1. Flexbox Froggy 通过调整CSS样式来使各种青蛙回到对应的荷叶上,游戏默认难度为Beginner ...

  3. Flex 布局教程:语法篇

    作者: 阮一峰 网页布局(layout)是CSS的一个重点应用. 布局的传统解决方案,基于盒状模型,依赖 display属性 + position属性 + float属性.它对于那些特殊布局非常不方便 ...

  4. Flex 布局教程:实例篇

    该教程整理自 阮一峰Flexible教程 今天介绍常见布局的Flex写法.你会看到,不管是什么布局,Flex往往都可以几行命令搞定. 我的主要参考资料是Landon Schropp的文章和Solved ...

  5. 在移动端中的flex布局

    flex布局介绍: flex布局很灵活, 这种布局我们也可以称之为弹性布局,  弹性布局的主要优势就是元素的宽或者高会自动补全; flex布局实例: 比如有两个div,一个div的宽度为100px, ...

  6. css flex布局

    关于flex布局的一些简单用法 效果(下图) 实现代码: <!--html--> <div class="wrap"> <div class=&quo ...

  7. FLEX布局的一些问题和解决方法

    前言 露珠最近研究了一下flex的布局方式,发现项w3c推出的这套布局解决方案对于日益复杂的前端开发布局来说是确实是一利器,并且在不同的屏幕上实现了真正的响应式布局:不再单纯地依赖百分比和float的 ...

  8. CSS之flex布局

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...

  9. flex布局示例

    来自:授权地址 作者:水牛01248 几个横排元素在竖直方向上居中 display: flex; flex-direction: row;//横向排列 align-items: center;//垂直 ...

随机推荐

  1. iOS开发如何避免安全隐患

    现在很多iOS的APP没有做任何的安全防范措施,导致存在很多安全隐患和事故,今天我们来聊聊iOS开发人员平时怎么做才更安全. 一.网络方面 用抓包工具可以抓取手机通信接口的数据.以Charles为例, ...

  2. 一文学会Java死锁和CPU 100% 问题的排查技巧

    做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开 工欲善其事,必先利其器 00 本文简介 作为一名搞技术的程序猿或者是攻城狮,想必你应该是对下面这两个问题有所了解,说不定你在 ...

  3. asp.net core 2.2 生产环境直接更新View页面并立即生效

    有的时候我们会直接在生产环境上更新页面文件,比如更改了JS代码,CSS代码或页面的文案,布局等.这种没有改到后台代码的情况一般就是直接发布页面文件了,在asp.net core 2.2以前的版本(没有 ...

  4. Linux文件查看及重定向

    Linux文件查看及重定向   实验目标: 通过本实验掌握head.tail.cat.more.less等文件查看命令的使用,理解重定向的概念,掌握两种重定向方法的使用. 实验步骤: 1.通过head ...

  5. 《深入浅出RxJS》读书笔记

    rxjs的引入 // 如果以这种方式导入rxjs,那么整个库都会导入,我们一般不可能在项目中运用到rxjs的所有功能 const Rx = require('rxjs'); 解决这个问题,可以使用深链 ...

  6. spring源码深度解析— IOC 之 bean 的初始化

    一个 bean 经历了 createBeanInstance() 被创建出来,然后又经过一番属性注入,依赖处理,历经千辛万苦,千锤百炼,终于有点儿 bean 实例的样子,能堪大任了,只需要经历最后一步 ...

  7. Vue技术点整理-安装引入

    Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架 所谓渐进式是指: 1,如果你有一个现成的web应用,你可以将vue作为该应用的一部分嵌入其中,带来更丰富的交互体验 ...

  8. c++ 组合

    组合 题目描述 已知一个一维数组a1..n,又已知一整数m. 如能使数组a中任意几个元素之和等于m,则输出YES,反之则为NO. 输入 输入包括两行,第一行包含两个整数n m(1<=n<2 ...

  9. struts2入门Demo

    一.引入必要的jar包,所需jar包如下: 二.配置web.xml.主要目的是拦截请求 <?xml version="1.0" encoding="UTF-8&qu ...

  10. 拓扑排序 (Topological Sorting)

    拓扑排序(Topological Sorting) 一.拓扑排序 含义 构造AOV网络全部顶点的拓扑有序序列的运算称为拓扑排序(Topological Sorting). 在图论中,拓扑排序(Topo ...