CSS3的Flexible Boxes详细使用教程

   Flexible Box是什么?Flexible意为可伸缩的,Box意为盒子,可以理解为一种新式的盒模型——伸缩盒模型。由CSS3规范提出,这是在原有的大家非常熟悉的block, inline-block, inline的基础上延伸出的新一代布局模式。

  浏览器兼容性

  作为非常现实的开发者,是否对一个新技术进行关注,首先要考虑它的浏览器兼容性如何。我们的伸缩盒模型的浏览器兼容性看起来还是相当不错的。


  可以看到,现代浏览器基本上都支持了,IE10开始也支持了(IE和Safari分别加-ms-和-webkit-前缀即可),移动端的支持情况也比较良好,唯一不支持的平台只有Opera了,咱不带他玩→_→

  因此,奥巴马同志说:伸缩盒模型是好的,有前途的。(嗯嗯~)

  伸缩盒基本概念

  伸缩盒的最大特点或者说优点就在于它考虑到了现今高昂的房价和人民日益增长的住宅需求之间的矛盾,房屋面积是有限的,但是我们的伸缩盒能够最合理最高效地把房子分给大家。面积多了,就给大家伙多分点;面积小了,就让各位挤一挤少分点,总而言之不会让任何一个人露宿街头的(overflow)!

  既然我们提到了房子和住户的关系,那么住户的排列自然需要沿一定的方向。对于块级元素来说,布局的延伸方向是自上而下的,也就是纵向。而对于行内元素来说,布局延伸方向是自左往右的,也就是横向。而伸缩盒呢,它的方向是可变的,既能纵向延伸,也能横向舒展,这取决于你的设置了。

  伸缩盒模型基本术语

  伸缩盒模型的思想和普通的块级元素和行内元素的布局思想有较大的不同,它引入了一些新的概念和术语,通过下面这张图来了解一下:


  Flex container 伸缩盒容器

  这就是用来分的房子,这是一间神奇的房子,要让它变得神奇,将display属性声明为flex或inline-flex即可~

  Flex item 伸缩项

  房子里的居民,他们都会占有自己应得的住房面积。

  为了形象说明,我们用代码来解释。

  XML/HTML Code复制内容到剪贴板

  

 

  

item 1

 

  

item 2

 

  

item 3

 

  

 

  CSS设置为:

  CSS Code复制内容到剪贴板

  .container {

  display: flex;

  width: 300px;

  height: 100px;

  ...

  }

  在这里display: inline-flex;好像也可以。

  对于其中的伸缩项元素,我们需要给他们事先安排好住房面积比例,我们就用最简单最健康的1:1:1吧~我们将比例声明在flex属性里

  CSS Code复制内容到剪贴板

  .item-1 {

  flex: 1;

  ...

  }

  .item-2 {

  flex: 1;

  ...

  }

  .item-3 {

  flex: 1;

  ...

  }


  我们的大房子被完美地平分成三个隔间了,三家平分房租!

  如果有人想住大点的房子,我们直接改变flex的比例即可:

  CSS Code复制内容到剪贴板

  .item-1 {

  flex: 1;

  ...

  }

  .item-2 {

  flex: 1;

  ...

  }

  .item-3 {

  flex: 2;

  ...

  }


  是不是很方便?

  Axes 轴

  我们可以看到,图中有两条轴,分别标注了主轴和次轴(垂直于主轴)。然而实际上哪一条是主轴并不确定,是由我们来规定的。

  1. flex-direction 此属性规定哪条轴为主轴。

  2. justify-content 此属性设置了伸缩项在主轴方向上的排列方式,这个稍后解释。

  3. align-items 此属性和上面的justify-content相对,表示伸缩项在次轴上的排列方式。

  4. align-self 此属性规定某一个特定的伸缩项元素在次轴上的布局方式,在某个元素上设置该属性会覆盖它的align-items属性。也就是这个属性会让某个元素更有个性,不走寻常路~

  flex-direction

  当我们不想沿着默认的方向分房子的时候,我们可以改变flex-direction属性的值来改变主轴和方向,该属性默认的取值为row;

  CSS Code复制内容到剪贴板

  .container {

  flex: row-reverse;

  ...

  }

  顾名思义,这会让伸缩项的排列方向反过来:


  当此属性设置为column时,主次轴就会对调,元素的排列方向也会随之改变:

  CSS Code复制内容到剪贴板

  .container {

  flex-direction: column;

  ...

  }


  至于flex: column-reverse的含义就不用我多说了吧~

  justify-contents

  有的时候,大家挨着住,一点空隙都没有也会很难受,连个过道都没有,隐私也不能保证对吧。这个时候,我们可以改变分配政策了,不再按比例分配,而是定额分配,每个人的面积是确定的。多出的房屋面积改成公共区域。

  CSS Code复制内容到剪贴板

  .item {

  width: 80px;

  ...

  }

  ...

  设定了width属性后也要记得去掉flex属性的声明哦,不然flex属性的效果仍然会把width覆盖掉~

  同时,如果width属性也不设定的话,元素宽度会表现为内容的宽度,which means 当伸缩项内部无内容时,将不会进行渲染,其表现就和display: none;一样。

  这时,在容器上声明justify-content属性就可以安排伸缩项的位置了:

  CSS Code复制内容到剪贴板

  .content {

  justify-content: flex-start | flex-end | center | space-between | space-around;

  }


  align-items

  这项属性会改变次轴上元素排列的方式,对于本例来说原来次轴方向上元素的高度是表现为height: 100%;的,设定了align-items属性后,其高度表现就会发生改变了。

  CSS Code复制内容到剪贴板

  .content {

  align-items: flex-start | flex-end | center | baselinebaseline | stretch;

  }

  说到这里了,伸缩项具体的表现其实可以想象出来了,想象不出来的就自己动手试一试吧~

  order

  在伸缩项上声明此属性,可以无视HTML结构的顺序而按照order从小到大的顺序沿flex-direction方向排列。比如:

  CSS Code复制内容到剪贴板

  .item-1 {

  order: 3;

  ...

  }

  .item-2 {

  order: 1;

  ...

  }

  .item-3 {

  order: 2;

  ...

  }


  flex-wrap

  此属性的默认值为nowrap,也就是忽略伸缩项的宽度,管你要多少住房面积,通通按照flex属性说好的分配,不许换行。

  CSS Code复制内容到剪贴板

  .container {

  flex-wrap: nowrap | wrap | wrap-reverse

  }

  .item {

  width: 150px;

  }


  flex-grow,flex-shrink 和 flex-basis

  上文提到的flex属性实际上是这三个属性的简写形式。这三个属性有相似性,都是表示项与项之间分配空间的相对比例关系,不同之处在于:

  1. flex-grow属性:属性值为该伸缩项所占空间相对于其他伸缩项(声明了flex相关属性的项)的比值。

  2. flex-shrink属性:该伸缩项相对于其他伸缩项缩小的比值,也就是说当flex-shrink: 3;时,该项所占空间为其他项的1/3。

  3. flex-basis属性:属性值为该项所占空间占容器空间的百分比。

  注意:对于flex-basis属性,当所有项的属性值相加<=100%时,会严格按照百分比值来渲染。当属性值相加>100%时,元素并不会溢出,而是表现为两两之间所占空间大小遵循相互的百分比比值。也就是说当存在三个伸缩项且flex-basis值都为50%时,表现行为与三个项均为flex: 1;一样。

  Flexible Boxes布局模式在响应式开发中尤其好用,对不同的终端,设置元素之间的空间分配关系将会变成一件非常简单的事。伸缩盒布局和响应式布局中流行的流体布局哪种更好,还是可以结合起来,就看各位开发者发挥自己的聪明才智了!

时间: 2024-11-01 08:40:51

CSS3的Flexible Boxes详细使用教程的相关文章

PS笔刷运用教程:Blur’s good brush详细使用教程

Photoshop笔刷运用教程:Blur's good brush详细使用教程 笔刷下载地址:http://www.3lian.com/psd/ps/ps1/ 出自:火星时代动画 作者:杨雪果老师 一. 绘画 Blur's good brush包含Good画笔.风格类画笔.油画笔.特效画笔.形状类画笔.纹理类画笔6类画笔工具,我们可以选择其中需要的画笔来完成某一种类型的绘画,下面我将向大家做一个简要的讲解. 1.Good系列画笔 -Good brush类画笔包含了若干综合类的画笔工具,是最为常用

无线路由器设置详细图文教程

无线路由器设置详细图文教程 1.先将TP-LINK无线路由器通过有网线的链接方式接好后,在IE输入192.168.1.1(个别是192.168.0.1,具体看路由器底部说明),用户名和密码默认为admin,登陆即可进入无线路由器设置界面. 打开无线路由器设置界面一般情况会弹出一个设置向导小框,很多人会问无线路由器怎么用啊?其实就是这样简单的按下一步进行向导设置,方便简单即可完成. 通过ASDL拨号上网用户选择"PPPoE"来进行下一步设置 2.如果通过ASDL拨号上网用户选择"

sql server 2000 Personal中文版详细安装教程

微软SQL server 2000 PRO 个人中文版,可以安装到 xp 等操作系统上面,用于程序员调试开发用.今天就写一个Microsoft SQL Server 2000 Personal Edition的详细安装教程,希望能帮到大家. 1.从系统之家下载Microsoft SQL Server 2000 Personal Edition软件:http://www.xp510.com/xiazai/Networking/Servers/15183.html.将其解压到电脑的任一目录下. 2.

Word2007制作公章详细图文教程

Word2007制作公章详细图文教程 很多软件都可以制作公章,常用的软件有Photoshop.Coreldraw和Illustrator等,但是很少人知道其实Word软件也可以制作公章.首先给大家看制作出来的效果. Word2007绘制公章具体步骤: 绘制圆: 首先在文档中插入一个椭圆.选择"插入"选项卡,点击"形状",插入椭圆. 图1 按住"Shift"键,同时用鼠标拖拉画出一个正圆. 图2 选中圆,然后选择"格式"选项卡,

如何将pdf格式转换成txt格式的详细图文教程

常在网上找一些资料,但是通常很多好的资料都为pdf格式的文件.对于一个电脑小白来说,pdf格式的文件也许会很陌生,第一个面临的就是pdf格式的文件怎么打开?顺便解答一下:pdf格式的文件必须用相应的pdf阅读器才能打开哦.好了,及时收住话题,因为PC6小编今天要教大家的是如何把pdf格式的文件转换为txt文本,因为我们发现,现在一般的pdf阅读器打开pdf文件后并不支持复制pdf文件的内容,这个时候我们我们就只有转换格式来达到目的了! 今天给大家推荐的一款工具是汉王PDF OCR,汉王 PDF

怎么绕过天翼客户端直接拨号上网的详细图文教程

怎么绕过天翼客户端直接拨号上网的详细图文教程,需要的朋友抓紧看看 第一步:你需要用校园天翼宽带拨号登陆一次电信网,登陆过后就会出来这个 第二步: 断开网络,并退出校园宽带软件. 打开网络和共享中心---更改适配器设置---右键Vnet_PPPoE---属性 如图,在选项页---拨号选项 把前两个点上, 重播选项 重播次数3 重播间隔 1分钟 断线重播也点上 然后在安全选项卡里面把chap点没了 好了 确定就行了 第三步: 然后右键Vnet_PPPoE选择连接,如图设置帐号,在帐号前面添加 ^~2

Lamp环境的详细安装教程

原文:Lamp环境的详细安装教程 架构LAMP环境   1.布置LAMP环境之前的准备工作      在架构LAMP环境时,确保你的Linux系统已经安装了make.gcc.gcc-c++(使用rpm -q xxx 查看系统是否已经安装软件) 解压Lamp压缩包   下载地址:http://pan.baidu.com/s/1hq4hI5m   如果解麻烦的话,可以写一个自动解压脚本 1 cd /lamp #你解压的目录 2 3 ls *.tar.gz > ls.list 4 5 for tar

阿里云服务器怎么购买?详细购买教程如下

阿里云服务器怎么购买?详细购买教程如下 1. 首先我们进入阿里云服务器官网 进行账号登录 阿里旗下的淘宝账号也可以(如果还没有账号 请看 阿里云账号如何注册?  有账号的可以忽略) 我这个是已经登录过的 . 2. 点击 产品-云服务器ECS  在购买之前先领取 阿里云幸运劵 进行购买 这样才能节省几十到几百块钱 购买的时间越久 省的越多 前提是 新手购买阿里云服务器必读知识  不是新手请忽略此篇文章. 3. 进入服务器购买页面 选择我们所需要的服务器配置  我这里就拿入门型 做示范 这里的 预装

MySQL(win7x64 5.7.16版本)下载、安装、配置与使用的详细图文教程_Mysql

结合网上的资料,自己亲自的去安装了一次MySQL,安装版本是win7x64 5.7.16. 在安装过程中出现并解决了如下问题: 1."MySQL 服务无法启动 服务没报告任何错误" 2.启动MySQL服务的时候,提示"发生系统错误 2,系统找不到指定的文件". 3.TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_d... 4.initialize specified