当前位置: 首页 > 编程日记 > 正文

(转)详解css3弹性盒模型(Flexbox)

今天刚学了css3的弹性盒模型,这是一个可以让你告别浮动、完美实现垂直水平居中的新特性。

Flexbox是布局模块,而不是一个简单的属性,它包含父元素和子元素的属性。

Flexbox布局的主体思想是似的元素可以改变大小以适应可用空间,当可用空间变大,Flex元素将伸展大小以填充可用空间,当Flex元素超出可用空间时将自动缩小。总之,Flex元素是可以让你的布局根据浏览器的大小变化进行自动伸缩。

创建Flex容器

flexbox布局首先需要创建一个flex容器。为此给元素设置display属性的值为flex。对于IE10来说,我们需要在开头的地方添加-ms-flexbox

.container{display:-webkit-flex; display:-moz-flex; display:flex; display:-ms-flexbox; } 

水平或垂直分布

box-orient定义分布的坐标轴:vertical和horizional。这两个值分别定义盒子垂直显示和水平显示:

.container{display: box; box-orient: horizontal; }

语法

box-orient: horizontal|vertical|inline-axis|block-axis|inherit;

| 值 | 描述 | 
| ------------- |:-------------:| 
| inline-axis(轴线) | 沿着行内轴来排列子元素(即从左往右)。 
| block-axis | 沿着块轴来排列子元素(即从上往下)。

案例

<!DOCTYPE html>
<html lang="en"> <head> <meta charset="utf-8"/> <title>Centering an Element on the Page</title> <style type="text/css"> html { height: 100%; } body { 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-align: center; -moz-box-align: center; /*混合版本语法*/ -ms-flex-align: center; /*新版本语法*/ -webkit-align-items: center; align-items: center; /*水平居中*/ /*老版本语法*/ -webkit-box-pack: center; -moz-box-pack: center; /*混合版本语法*/ -ms-flex-pack: center; /*新版本语法*/ -webkit-justify-content: center; justify-content: center; margin: 0; height: 100%; width: 100% /* needed for Firefox */ } /*实现文本垂直居中*/ h1 { display: -webkit-box; display: -moz-box; display: -ms-flexbox; display: -webkit-flex; display: flex; -webkit-box-align: center; -moz-box-align: center; -ms-flex-align: center; -webkit-align-items: center; align-items: center; height: 10rem; } </style> </head> <body> <h1>OMG, I’m centered</h1> </body> </html> 

http://jsfiddle.net/8ca9zq8q/

启用Flexbox

因为body元素包含了想要居中的标题元素,所以我们将他的display属性值设置为“flex”:

body {display: flex; } 

主要作用是让元素body使用flexbox布局,而不是普通的块布局。在文档流中的所有子元素(即不是绝对定位的元素)现在都变成了伸缩项目。

反向分布

body {display: -webkit-box;display:-moz-box;box-orient: vertical;box-direction: reverse;color: white;
}
#box1{background: red;height: 100px;width: 80px;}
#box2{background: black;height: 100px;width: 80px;
}
#box3{background: blue;height: 100px;width: 80px;
}</style>
</head>
<body> <div id="box1">1</div> <div id="box2">2</div> <div id="box3">3</div> </body> 

http://jsfiddle.net/8ca9zq8q/2/

设置弹性框对齐方式

还可以指定在解析了任何灵活长度和自动页边距之后,弹性容器的内容与主轴和横轴(与主轴垂直)的对齐方式。你可以通过 justify-content、align-items、align-self 和 align-content 属性调整此对齐方式。

使用 justify-content 属性,可以设置在解析了任何灵活长度和自动页边距之后,弹性项目与弹性容器主轴的对齐方式。下图显示了justify-content 的值以及这些值对弹性容器(含三个弹性项目)的影响。

justify-content:flex-start(默认值) 伸缩项目向一行的起始位置靠齐。
justify-content:flex-end 伸缩项目向一行的结束位置靠齐。
justify-content:center 伸缩项目向一行的中间位置靠齐。
justify-content:space-between 伸缩项目会平均地分布在行里。第一个伸缩项目一行中的最开始位置,最后一个伸缩项目在一行中最终点位置。 justify-content:space-around 伸缩项目会平均地分布在行里,两端保留一半的空间。 

align-items 侧轴对齐(适用于伸缩容器,也就是伸缩项目的父元素)

align-items 是一个和 justify-content 相呼应的属性。align-items 调整伸缩项目在侧轴上的定位方式。可能的值有:

flex-start:伸缩项目在侧轴起点边的外边距紧靠住该行在侧轴起始的边。
flex-end:伸缩项目在侧轴终点边的外边距靠住该行在侧轴终点的边 。
center:伸缩项目的外边距盒在该行的侧轴上居中放置。
baseline:伸缩项目根据他们的基线对齐。
stretch(默认值):伸缩项目拉伸填充整个伸缩容器。此值会使项目的外边距盒的尺寸在遵照「min/max-width/height」属性的限制下尽可能接近所在行的尺寸。 

flex-wrap 伸缩行换行

目前为止,每个伸缩容器都有且只有一个伸缩行。使用 flex-wrap 你可以为伸缩容器创建多个伸缩行。这个属性接受以下值:

nowrap (默认)
wrap
wrap-reverse

如果 flex-wrap 设置为 wrap,在一个伸缩行容不下所有伸缩项目时,伸缩项目会换行到一条新增的伸缩行上。新增的伸缩行根据侧轴的方向添加。


align-content 堆栈伸缩行

align-content 会更改 flex-wrap 的行为。它和 align-items 相似,但是不是对齐伸缩项目,它对齐的是伸缩行。可能你已经想到了,它接受的值也很相似:

flex-start:各行向伸缩容器的起点位置堆叠。
flex-end:各行向伸缩容器的结束位置堆叠。
center:各行向伸缩容器的中间位置堆叠。
space-between:各行在伸缩容器中平均分布。 space-around:各行在伸缩容器中平均分布,在两边各有一半的空间。 stretch(默认值):各行将会伸展以占用剩余的空间。 

align-self 侧轴对齐

伸缩项目的 align-self 属性会覆盖该项目的伸缩容器的 align-items 属性。它的值和 align-items 一样:

stretch (默认)
flex-start
flex-end
center
baseline

属性讲解

box-direction 属性规定框元素的子元素以什么方向来排列。

语法:

box-direction: normal|reverse|inherit;

box-pack 属性规定当框大于子元素的尺寸,在何处放置子元素。
语法

box-pack: start|end|center|justify;start :所有子容器都分布在父容器的左侧,右侧留空 end :所有子容器都分布在父容器的右侧,左侧留空 justify :所有子容器平均分布(默认值) center :平均分配父容器剩余的空间(能压缩子容器的大小,并且有全局居中的效果) 

box-align 属性规定如何对齐框的子元素。
语法

box-align: start|end|center|baseline|stretch;start :子容器从父容器顶部开始排列 end :子容器从父容器底部开始排列 center :子容器横向居中(有点奇怪) baseline :所有子容器沿同一基线排列(很难理解) stretch :所有子容器和父容器保持同一高度(默认值) 

box-flex 属性规定框的子元素是否可伸缩其尺寸。
语法

box-flex: value;

看下面一个实例:

<div style="display:-webkit-box;border:1px solid  #ccc;  width:500px;height:50px;">
<div style="-webkit-box-flex:1;</div> <div style="-webkit-box-flex:2;</div> <div style="width:100px;</div> </div>

http://jsfiddle.net/8ca9zq8q/1/点击预览

与传统的盒模型一样,overflow属性用来决定其显示方式。为了避免溢出,你可以设置box-linesmultiple使其换行显示。

flex: initial

一个 flex 属性值被设为 initial 的伸缩项目,在有剩余空间的情况下不会有任何变化,但是在必要的情况下会被收缩。

flex: auto

一个 flex 属性值被设为 auto 的伸缩项目,会根据主轴自动伸缩以占用所有剩余空间。

auto 目前仅在 Opera 12.11 尚有效,在 Chrome 23.0.1271.95 上无效。你可以通过使用 flex: 1; 来达到一样的效果。

flex: none

一个 flex 属性值被设为 none 的伸缩项目,在任何情况都不会发生伸缩。

先了解到这里吧,之后的再深入学习便会陆续更新。不得不说css3的弹性盒模型为前端开发者带来了福音,让烦人的浮动见鬼去吧……

相关文章:

Java开发环境的搭建以及使用eclipse创建项目

一、Java 开发环境的搭建 这里主要说windows环境下怎么配置Java环境。如果是Linux环境参考本博客另一篇文章即可&#xff1a; Linux环境安装卸载JDK 1.首先安装JDK java的SDK简称JDK。 去官网下载最新的JDK即可&#xff1a; http://www.oracle.com/technetwork/java/javase…

​MMIT冠军方案 | 用于行为识别的时间交错网络,商汤公开视频理解代码库

作者 | 商汤出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;本文主要介绍三个部分&#xff1a;一个高效的SOTA视频特征提取网络TIN&#xff0c;发表于AAAI2020ICCV19 MMIT多标签视频理解竞赛冠军方案&#xff0c;基于TIN和SlowFast一个基于PyTorch&#xff0c;包含大…

MySQL的主从服务器配置

MySQL的主从服务器配置常见开源数据库有&#xff1a;MySQL&#xff0c;PostgreSQL&#xff0c;SQLite等&#xff0c;商业性质的&#xff1a;Oracle&#xff0c;Sql Server&#xff0c;DB2&#xff0c;Sybase&#xff0c;Infomix其中&#xff0c;Oracle的版本有Oracle 11g,Oracl…

Anaconda中安装Orange3脚本-完整版

2019独角兽企业重金招聘Python工程师标准>>> #Anaconda中安装Orange3脚本&#xff0c;完整版。包括插件的安装&#xff0c;在脚本中一次完成。 sudo apt-get update sudo apt-get -y install git python-pip python-virtualenv python-qt4-dev python3-pyqt4 libqt…

使用eclipse创建Struts2项目

eclipse版本&#xff1a; Kepler Service Release 1 http://www.eclipse.org/downloads/ struts版本&#xff1a;2.3.16 http://struts.apache.org/ 1.新建web项目 打开Eclipse&#xff0c;新建一个web项目"Struts2" 项目名字 勾选 web.xml选项 建好的…

8、进程通信-匿名管道

匿名管道 一个单向&#xff0c;未命名的管道&#xff0c;通常用来在一个父进程和一个子进程间传输数据。只能实现本地机器上两个进程间的通信&#xff0c;而不能实现跨网络的通信。 BOOL CreatePipe( PHANDLE hReadPipe, // read handle PHANDLE hWriteP…

Enhanced-RCNN: 一种高效的比较句子相似性的方法 |​WWW 2020

作者 | 彭爽出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;国际顶级会议WWW2020将于4月20日至24日举行。始于1994年的WWW会议&#xff0c;主要讨论有关Web的发展&#xff0c;其相关技术的标准化以及这些技术对社会和文化的影响&#xff0c;每年有大批的学者、研究人…

直接可以拿去用的正则验证表达式

直接可以拿去用的正则验证表达式为了方便自己也方便初学的学弟们&#xff0c;自己总结了网上的众多正则验证式&#xff0c;现分享给大家&#xff0c;可以直接拿去用。一、校验数字的1 数字&#xff1a;^[0-9]*$2 n位的数字&#xff1a;^\d{n}$3 至少n位的数字&#xff1a;^\d{n…

家庭局域网开启AP隔离利用无线路由器互连

一开始可以上网&#xff0c;可以ping网关192.168.1.1&#xff0c;但是几台电脑之间就是不能互ping。 其实&#xff0c;真实的原因就是没有开启无线路由器的AP隔离。 在浏览器中输入192.168.1.1进入路由搜索一般用户名密码都是admin&#xff0c;具体请参见自己路由的说明书 操…

通过 Python 代码实现时间序列数据的统计学预测模型

来源 | DeepHub IMBA封图 | CSDN 付费下载于视觉中国 在本篇中&#xff0c;我们将展示使用 Python 统计学模型进行时间序列数据分析。 目标是&#xff1a;根据两年以上的每日广告支出历史数据&#xff0c;提前预测两个月的广告支出金额。原始数据&#xff1a;2017-01-01 到 201…

神色洋溢的 域名背后的故事

前短时间&#xff0c;我刚申请一个域名&#xff0c;好的顶级域名都被被人一拥而上的都强去了&#xff0c;我只好找那些申请好的用户买呀&#xff0c;这叫炒作&#xff0c;就是这样的抄起来的。你说平常一个也就100左右就搞定&#xff0c;可是现在要是到那票手里&#xff0c;那就…

Rust语言开发基础(六)基础语法

2019独角兽企业重金招聘Python工程师标准>>> 一、变量的定义和使用 其它常见的编程语言对变量的定义通常是通过声明类型和使用关键new来创建一个变量&#xff0c;但Rust不是&#xff0c;Rust使用关键字let。 1. 变量绑定通过let实现 fn main() { let x 5; } 2. 变量…

400 多行代码!超详细 Rasa 中文聊天机器人开发指南 | 原力计划

作者 | 无名之辈FTER责编 | 夕颜出品 | 程序人生&#xff08;ID&#xff1a;coder_life&#xff09;本文翻译自Rasa官方文档&#xff0c;并融合了自己的理解和项目实战&#xff0c;同时对文档中涉及到的技术点进行了一定程度的扩展&#xff0c;目的是为了更好的理解Rasa工作机制…

Linux配置SSH无密码登陆

可以使用“公钥私钥"认证的方式来进行ssh登录。 所谓 "公钥私钥"认证方式&#xff0c;就是首先在客户机上创建一对公钥和私钥&#xff0c;公钥文件&#xff1a;~/.ssh/id_rsa.pub&#xff1b; 私钥文件&#xff1a;~/.ssh/id_rsa 然后把公钥文件放到目标服务器…

Linux进程浏览器htop安装与使用

htop 是一个 Linux 下的交互式的进程浏览器&#xff0c;可以用来替换Linux下的top命令。当前具有按树状方式来查看进程&#xff0c;支持颜色主题&#xff0c;可以定制等特性。其实htop是top的加强版&#xff0c;增加了很多功能。 官网 http://hisham.hm/htop/ 下载地址http:/…

什么?神经网络还能求解高级数学方程?

来源 | 数据派 THU封图 | CSDN 付费下载于视觉中国 Facebook AI建立了第一个可以使用符号推理解决高级数学方程的AI系统。通过开发一种将复杂数学表达式表示为一种语言的新方法&#xff0c;然后将解决方案视为序列到序列的神经网络的翻译问题&#xff0c;我们构建了一个在解决积…

***和******

网络是一把双刃剑&#xff0c;它在人类社会的发展中起着越来越重要作用&#xff0c;但同时&#xff0c;网络自身的安全问题也像挥之不去的阴影时刻笼罩在人们心头。据不完全统计&#xff0c;全世界平均每 20秒钟就发生一起******事件&#xff0c;互联网上大约有20万个***网站可…

Linux监控工具dstat

dstat是一个用来替换 vmstat,iostat netstat,nfsstat和ifstat这些命令的工具, 是一个全能系统信息统计工具. 与sysstat相比, dstat拥有一个彩色的界面, 在手动观察性能状况时, 数据比较显眼容易观察; 而且dstat支持即时刷新, 譬如输入dstat 3, 即每三秒收集一次, 但最新的数据都…

9月16号晚上,Asuka有一场关于Windows 7组策略的Webcast,欢迎兄弟们来捧场

之所以选题在组策略之一块&#xff0c;是因为Windows 7和2008 R2对于组策略有了很大的功能上的增强&#xff0c;但是很多IT人员都无法意识或者去重视这一块内容&#xff0c;所以我将从下面这3个角度去介绍这些更新。如果您正好有时间&#xff0c;那不妨来技术交流一番:)直播进入…

腾讯天衍实验室联合微众银行研发医疗联邦学习 AI利器让脑卒中预测准确率达80%

近几年&#xff0c;医疗行业正在经历一场数字化转型&#xff0c;这场基于大数据和AI技术的变革几乎改变了整个行业的方方面面&#xff0c;将“信息就是力量”这句箴言体现的淋漓尽致&#xff0c;人们对人工智能寄以厚望&#xff0c;希望它能真正深入临床一线&#xff0c;帮助医…

JavaSript模块化 AMD CMD 详解.....

模块化是指在解决某一个复杂问题或者一系列的杂糅问题时&#xff0c;依照一种分类的思维把问题进行系统性的分解以之处理。模块化是一种处理复杂系统分解为代码结构更合理&#xff0c;可维护性更高的可管理的模块的方式。可以想象一个巨大的系统代码&#xff0c;被整合优化分割…

在Eclipse中使用Maven构建Spring项目

最新版的Spring需要使用Maven构建&#xff0c;本文讲述怎么在Eclipse构建Maven项目&#xff0c;以配置Spring项目为例。 maven简单介绍 maven是构建工具&#xff0c;也是构建管理工具。ant只是构建工具&#xff0c;因为不支持生成站点功能&#xff0c;只有预处理&#xff0c;编…

Go 语言官网全新改版

2019独角兽企业重金招聘Python工程师标准>>> 前两天发现 Go 语言官网改版了&#xff0c;布局由原来的左中右变成了上中下结构&#xff0c;主色调没有变&#xff0c;整体依然保持简洁的风格。在首页添加了一个叫 Playground 的模块&#xff0c;它可以编译、运行你输入…

就在今晚 | 港科大李世玮教授问诊未来,开辟大湾区新航路

阳春三月&#xff0c;万象更新&#xff0c;2020年注定是不平凡的一年&#xff01;有激荡就会遇见变革&#xff0c;有挑战就会迎来机遇。今天总会过去&#xff0c;未来将会怎样&#xff1f;香港科大商学院内地办事处重磅推出全新升级的《袁老师访谈录》全新系列【问诊未来院长系…

NLP(Natural Language Processing)

https://github.com/kjw0612/awesome-rnn#natural-language-processing 通常有&#xff1a; (1)Object Recognition (2)Visual Tracking (3)Image Generation (4)Video Analysis NLP: &#xff08;1&#xff09;Language Modeling &#xff08;2&#xff09;Speech Recognition…

Linux环境编程

1.__sync_fetch_and_add和__sync_bool_compare_and_swap gcc从4.1.2提供了__sync_*系列的built-in函数&#xff0c;用于提供加减和逻辑运算的原子操作。 其声明如下&#xff1a; type __sync_fetch_and_add (type *ptr, type value, ...) type __sync_fetch_and_sub (type *p…

AI新基建如何构建?浪潮给出了一个答案

作者 | Just出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;伴随生产力升级&#xff0c;社会基础设施也正在发生变化。而智慧时代的新型基础设施&#xff0c;要能够对外提供各种算力服务、数据服务和AI服务。浪潮认为&#xff0c;其核心是计算力的生产中心。因此&…

协作是企业管理的重点和难点

这个问题让我想起了一道数学题&#xff0c;11&#xff1f;。在生活中这个题目的答案会千差万别&#xff0c;更别说一个企业。在我眼中&#xff0c;企业中最难管的是关系&#xff0c;更准确的说是协作。 经理过好几个信息系统建设的项目&#xff0c;小到一个简单的邮件系统&…

使用CSS3美化复选框checkbox

我们知道HTML默认的复选框样式十分简陋&#xff0c;而以图片代替复选框的美化方式会给页面表单的处理带来麻烦&#xff0c;那么本文将结合实例带您一起了解一下使用CSS3将复选框checkbox进行样式美化&#xff0c;并且带上超酷的滑动效果。 查看演示 下载源码HTML 通常我们使用以…

Thift安装

thrift官网http://thrift.apache.org/ #wget http://mirror.bit.edu.cn/apache/thrift/0.9.2/thrift-0.9.2.tar.gz #tar -zvxf thrift-0.9.2.tar.gz # ./configure --prefix/usr/local/thrift #make && makeinstall 增加到环境变量 #export PATH$PATH:/usr/…