web前端入门到实战:CSS flex布局入门

一、 why flex

都知道html正常的文档流是自上而下排列的,块级元素会像下左图一样排列。但是项目中尤其是移动端项目会有很多需求的排版方式是要求由左到右排列。虽然可以通过dispaly:inline-block、float、position完成排版,但是需要对距离进行计算,计算起来十分麻烦。

2009年W3C提出了一种新的方案--引入了弹性布局flex方式,通过容器的轴线来排列项目,简直是移动端开发的福音(虽然grid布局更牛x,后面会总结)。自己也用了挺久的,但是有些参数记忆很模糊,每次用都要去百度一下,干脆自己总结一下吧。

//常规写法
.cover-common{
    position: relative;
}
.cover-common .item{
    position: absolute;
    left: 50%;
    top: 50%;
    margin-left:-50px;
    margin-top: -50px
}
//flex写法
.cover-flex{
   display: flex;
   justify-content: center;
   align-items: center
}

上面是一个让项目水平垂直居中的两种写法,可以看到写法简洁很多,而且直接写在容器上就行,不需要考虑具体的项目。

二、what is flex

那么,什么是flex尼?借用阮一峰老师的一张图来看一下flex的一些概念:

1、flex container(容器):使用flex的元素就叫做容器,容器默认存在2条轴线,主轴线(main axis)和垂直的交叉轴线(cross axis)。轴线开始的位置被叫做main/cross start,结束的位置被叫做main/cross end。项目是沿着主轴线开始、结束方向排列的。

2、flex item(项目):容器内部的直属第一层元素就叫做项目。

三、容器配置

flex容器的属性有很多,下面主要看几个常用的:

1、flex-direction:设置容器主轴线的方向
2、flex-wrap:设置是否换行,每换一行意味着会多一条主轴线
3、justify-content:设置主轴方向上的项目的对齐方式
4、align-items:设置交叉轴方向上项目的对齐方式
5、align-content:多轴线对齐方式
专门建立的学习Q-q-u-n ⑦⑧④-⑦⑧③-零①②  分享学习方法和需要注意的小细节,互相交流学习,不停更新最新的教程和学习技巧(从零基础开始到WEB前端项目实战教程,学习工具,全栈开发学习路线以及规划)

1、flex-direction

用来设置容器的主轴方向和主轴线的起点。有如下4个属性值,结果如下图。

.box {
  flex-direction: row; //(默认值)主轴为水平方向,起点在左侧
  flex-direction: row-reverse ;//主轴为水平方向,起点在右侧
  flex-direction: column;//主轴为垂直方向,起点在顶部
  flex-direction: column-reverse;//主轴为垂直方向,起点在底部
}

2、flex-wrap

用来设置如果一条轴线上排满了是否换行,是否在来一条轴线,有3个属性值。

.box{
  flex-wrap: nowrap; //(默认值)设置不换行,就挤着
  flex-wrap: wrap;//换行,按顺序第一行从交叉轴线起点端开始排列
  flex-wrap: wrap-reverse;换行,但是被后来居上了,第一行从交叉轴线结束端开始排列
}

还有个flex-flow属性:是flex-direction属性和flex-wrap属性的简写形式,取值分别是flex-direction的属性值和flex-wrap的属性值。
默认值为flex-flow:row nowrap。

.box {
  flex-flow: <flex-direction> || <flex-wrap>;
}

3、justify-content

用来设置项目在主轴方向的排列方式。

.box {
   justify-content: flex-start;//(默认值)主轴线起点对齐
   justify-content: flex-end ;//主轴线终点对齐
   justify-content: center ;//主轴线中心对齐
   justify-content: space-between; //主轴线两端对齐,项目间距相等
   justify-content: space-around;//项目两侧间距相等,所以项目间距是两端间距2倍
   justify-content: space-evenly //项目间距相等,与两端间距也相等
 }

4、align-items

用来设置项目在交叉轴上的排列对齐方式。

.box {
  align-items: flex-start ;//交叉轴的起点对齐
  align-items: flex-end ;//交叉轴的终点对齐。
  align-items: center ;//交叉轴居中对齐。
  align-items: baseline ;//项目的第一行文字的基线对齐。
  align-items: stretch;//如果项目未设置高度或设为auto,将占满整个容器的高度。
}

5、align-content

用来设置多轴线的在交叉轴线上的对齐方式,只对多轴线起作用。

.box {
  align-content: flex-start ;//与交叉轴的起点对齐。
  align-content: flex-end ;//与交叉轴的终点对齐
  align-content: center ;//与交叉轴中心对齐
  align-content: space-between ;//与交叉轴两端对齐
  align-content: space-around ;//每根轴线两侧的间隔都相等。所以,轴线之间的间隔比轴线与边框的间隔大一倍。
  align-content: stretch;(默认值)轴线占满整个交叉轴
}

四、项目配置

除了对容器进行设置,对项目本身也可以进行设置。

    1、order:定义项目在容器中的排列顺序
    2、flex-grow:定义项目的放大比例
    3、flex-shrink:定义了项目的缩小比例
    4、flex-basis:定义了在分配多余空间之前,项目占据的主轴空间
    5、align-self:允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items属性
专门建立的学习Q-q-u-n ⑦⑧④-⑦⑧③-零①②  分享学习方法和需要注意的小细节,互相交流学习,不停更新最新的教程和学习技巧(从零基础开始到WEB前端项目实战教程,学习工具,全栈开发学习路线以及规划)

1、order

定义项目的位置,默认值都为0,值越小越靠前。所以要想不改变其他项目的同时,往前面移动该项目,需要设置成负数。

.item {
  order:number; //default 0
}

2、flex-grow

用来定义项目的放大比例,也就是对剩余空间的分配能力。默认值是0,表示不参与分配。如果是2则表示比1的多分配1倍。

.item {
  flex-grow: number; // default 0
}

3、flex-shrink

定义项目的缩小比例,如果项目空间不足,将会默认缩小,默认值为1.设置为0则不会缩小,负数无效等价于1。如果设置成2时,压缩效果翻倍。

.item {
  flex-shrink: number; // default 1
}

4、flex-basis

定义了在分配多余空间之前,项目占据的主轴空间(main size)。浏览器根据这个属性,计算主轴是否有多余空间。它的默认值为auto,即项目的本来大小。感觉没什么卵用...

.item {
  flex-basis: length | auto; // default auto
}

5、flex

flex-grow、flex-shrink、flex-basis三个属性的缩写。

.item {
  flex: none | [ <‘flex-grow‘> <‘flex-shrink‘>? || <‘flex-basis‘> ]
}

6、align-self

用来设置单个项目交叉轴上的对齐方式,能覆盖align-items的属性值。默认值为auto,其他值则与align-items相同。

.item {
  align-self: auto | flex-start | flex-end | center | baseline | stretch;
}

flex布局是不是简单又实用,理解容器项目主轴线交叉轴线这几个概念后就上手实用吧!

原文地址:https://blog.51cto.com/14592820/2467885

时间: 2024-10-02 20:23:01

web前端入门到实战:CSS flex布局入门的相关文章

《web 前端基础到实战系列课程》

<web 前端基础到实战系列课程> 摘要: mod_expires&mod_headers可以减少10%左右的重复请求,让重复的用户对指定的页面请求结果都CACHE在本地,根本不向服务器发出请求. 在使用之前,首先要确认一下"mod_expires"模组是否有启用.如果是自己安装Apache来架设网页主机的话,这里我们可以透过编辑Apache的"httpd.conf"设定档来处理 一.浏览器缓存原理 将该行前面的"#"字号删除

好程序员web前端学习路线分享css模块化方案

好程序员web前端学习路线分享css模块化方案,这篇文章主要介绍了css模块化方案,css的模块化方案可能和js的一样多,下面简单介绍几种主要的模块方案,非常具有实用价值,需要的小伙伴可以参考下. css的模块化方案可能和js的一样多,下面简单介绍几种主要的模块方案.oocss面对对象的规则,主要的原则是两种:分离结构和外观,分离容器和内容.名词解释1.分离结构和外观:增加可重复的设计单元,同时去推进产品和ui对这方面的思考,比如下面的css使用时对象模式的命名和模块化规则.2.分离容器和内容:

Web前端开发如何利用css样式来控制Html中的h1/h2/h3标签不换行

  H1/H2/H3/H4标题标签常常使用在一个网页中唯一标题.重要栏目.重要标题等情形下. H1在一个网页中最好只使用一次,如对一个网页唯一标题使用.H2.H3.H4标签则可以在一个网页中多次出现,但必要随意添加或添加过度. 在Web前端开发中,经常要使用H1标签对关键字进行优化,可是如果是一行文字中的某个词加上了H1标记,就会换行.可以使用下面的方法,H标签就不会强制换行了.Css控制为一行文字中某个字加上<h2>标签不换行,display:inline; 解释为:内联对象的默认值.用该值

2019千锋Web前端拉勾网项目实战

课程目录:01-拉勾网项目实战02-拉勾网项目实战03-拉勾网项目实战04-拉勾网项目实战05-拉勾网项目实战06-拉钩网项目实战07-拉勾网项目实战08-拉勾网项目实战09-拉勾网项目实战10-拉勾网项目实战11-拉勾网项目实战12-拉勾网项目实战13-拉勾网项目实战14-拉勾网项目实战15-拉勾网项目实战16-拉勾网项目实战17-拉钩网项目实战18-拉钩网项目实战19-拉钩网项目实战20-拉钩网项目实战21-拉钩网项目实战22-拉钩网项目实战23-拉钩网项目实战24-拉钩网项目实战 下载地址

极客学院Web前端开发技术实战视频教程 初级入门+高级实战++专家课程+面试指导

===============课程目录=============== ├<初级中级>│  ├<1. HTML5开发前准备>│  │  ├1.HTML5开发前准备.mp4│  │  └2.开发前的准备-快捷键.mp4│  ├<10. React.js>│  │  ├React.js简介.txt│  │  ├<1.React 概述>│  │  │  ├React 开发环境搭建.mp4│  │  │  ├编写第一个 React 程序.mp4│  │  │  └什么

学完html+css就可以做的web前端开发项目实战——博雅互动

博雅互动项目预览: 一.项目搭建 css部署:一定注意css引入顺序 1 清除默认样式css文件 reset.css 2 可以引入原子类(可以下载,自己整理) base.css 3 公共样式(比如头部,底部很多面相同的样式) common.css (书写一次css文件可以多个html引入) 4 单页面样式(比如首页,游戏页面) index.css game.css(单独只引入一次) 1.1header 结构 1<!-- header头部开始 --> 2<div class="h

web前端面试试题总结---css篇

CSS 介绍一下标准的CSS的盒子模型?低版本IE的盒子模型有什么不同的? (1)有两种, IE 盒子模型.W3C 盒子模型: (2)盒模型: 内容(content).填充(padding).边界(margin). 边框(border): (3)区 别: IE的content部分把 border 和 padding计算了进去; CSS选择符有哪些?哪些属性可以继承? * 1.id选择器( # myid) 2.类选择器(.myclassname) 3.标签选择器(div, h1, p) 4.相邻选

WEB前端资源代码:CSS篇

css3新单位vw.vh.vmin.vmax vh: 相对于视窗的高度, 视窗被均分为100单位的vh; vw: 相对于视窗的宽度, 视窗被均分为100单位的vw; vmax: 相对于视窗的宽度或高度中较大的那个.其中最大的那个被均分为100单位的vmax; vmin: 相对于视窗的宽度或高度中较小的那个.其中最小的那个被均分为100单位的vmin; 视区所指为浏览器内部的可视区域大小, 即window.innerWidth/window.innerHeight大小,不包含任务栏标题栏以及底部工

flex布局入门

flax语法知识参考: http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html flex布局实战篇参考:http://www.ruanyifeng.com/blog/2015/07/flex-examples.html