使用 flexbox 可以帮助你设计出引人注目的布局,并且在pc端或移动端能够很好的缩放。告别使用浮动的 <div> 元素、绝对定位 和一些JavaScript hacks, 使用仅仅几行 CSS 就可以构建出水平或垂直方向的布局。下面是一些基本的使用案例:

  • 你想要将一个元素放在页面的中间
  • 你想要一组在垂直方向可以一个紧挨一个的布局容器
  • 你像要创建一行按钮或者其它元素,这些元素在小屏幕中可以垂直折叠

这篇文章只囊括了在不使用前缀就可以支持现行标准的浏览器下如何使用 flexbox 的相关信息。 想了解更多关于带有供应商前缀的老版本浏览器的资料,请点击这里 the more general guide to using CSS flexible boxes.

基础EDIT

如果你想让元素呈水平或柱状,或如果你想让元素垂直布局,在任何 <div> 元素中,通过设置 display 属性为 flex 来使用flexbox,然后设置它任意一行的 flex-flow 属性, 你就可以在其中尽情的创建元素了。如果你正在使用水平的 flexbox,并想让你的内容垂直换行,只需指定值为wrap。

接下来,只要你想让某个元素使用弹性布局,就为它添加 flex 属性。一般情况下,你将会使用下列三个值之一:

  • 如果你想让元素仅仅使用它本身的宽度,比如按钮,则设置 flex: none,none 将会被解释为 0 0 auto.
  • 如果想要一个固定大小的元素,则设置 flex: 0 0 size。如:flex 0 0 60px。
  • 如果你想让元素自动扩展到可以利用的空间,如果有多个这种类型的元素,它们可以平均分配空间,则设置 flex: auto,它代表 1 1 auto.

有可能还有使用方法,但是这应该囊括了最基本的使用案例。让我们用几个例子来看看如何使用。

示例 1: 在页面中把一个元素居中EDIT

在这个例子中,要做的最简单的事情就是创建两个 flexbox,其中一个在另一个中。每个 flexbox 有三个元素:其中两个当作中间元素的垫子,另一个就是中间元素本身。

 <html>
<head>
<meta charset="utf-8">
<title>test</title>
<style>
.vertical-box {
display: flex;
height: 400px;
width: 400px;
flex-flow: column;
}
.horizontal-box {
display: flex;
flex-flow: row;
}
.spacer {
/*元素自动扩展到可以利用的空间,如果有多个这种类型的元素,它们可以平均分配空间,则设置 flex: auto,它代表 1 1 auto.*/
flex: auto;
background-color: blue;
}
.centered-element {
/*如果你想让元素仅仅使用它本身的宽度,比如按钮,则设置 flex: none,none 将会被解释为 0 0 auto.*/
flex: none;
background-color: white;
}
</style>
</head>
<body>
<div class="vertical-box">
<div class="spacer"></div>
<div class="centered-element horizontal-box">
<div class="spacer"></div>
<div class="centered-element">Centered content</div>
<div class="spacer"></div>
</div>
<div class="spacer"></div>
</div>
</body>
</html>

示例2: 垂直放置一系列的容器EDIT

假设你有一个带有头部区域,内容区域,和底部区域的页面。头部和底部应该有一个固定的尺寸,但是内容区域应该根据可以利用的空间来缩放。这可以通过设置内容区域的 flex 属性,设置头部区域 flex 属性,底部区域不设置来实现自动扩展功能。

 <html>
<head>
<meta charset="UTF-8">
<title>index</title>
<style>
.vertical-box {
display: flex;
height: 400px;
width: 400px;
flex-flow: column;
}
.fixed-size {
flex: none;
height: 30px;
background-color: black;
text-align: center;
}
.flexible-size {
/*这里设置为auto,意思就为让元素自动扩展到可以利用的空间,
如果有多个元素就可以平均分配空间,同时这样设置之后,
才可以使用js代码来让父元素宽度变化*/
flex:auto;
background-color: white;
}
</style>
<script>
window.onload = function () {
var height = 400;
var a = document.getElementById('increase-size');
a.onclick = function(){
height += 10;
if (height > 500) height = 500;
var b = document.getElementById('document');
b.style.height = height + "px";
} var c = document.getElementById('decrease-size');
c.onclick=function(){
height -= 10;
if (height < 300) height = 300;
var c = document.getElementById('document');
c.style.height = height + "px";
}
} </script>
</head> <!--假设你有一个带有头部区域,内容区域,和底部区域的页面。头部和底部应该有一个固定的尺寸,
但是内容区域应该根据可以利用的空间来缩放。这可以通过设置内容区域的 flex 属性,设置头部区域 flex 属性,底部区域不设置来实现自动扩展功能。-->
<body>
<div id="document" class="vertical-box">
<div class="fixed-size"><button id="increase-size">Increase container size</button></div>
<div id="flexible-content" class="flexible-size"></div>
<div class="fixed-size"><button id="decrease-size">Decrease container size</button></div>
</div>
</body>
</html>

示例3: 创建一个水平折叠的容器EDIT

在某些时候,你可能想让一些信息在屏幕尺寸允许的情况下呈水平布局,但是在屏幕不允许的情况下可以水平折叠。这对 flexbox 来讲太容易实现了。你通过设置 flex-flow 的值为 wrap 来实现。

 <html>
<head>
<meta charset="utf-16">
<title>index</title>
<style>
.horizontal-container {
display: flex;
width: 300px;
flex-flow: row wrap;
}
.fixed-size {
flex: none;
width: 100px;
background-color: black;
color: white;
text-align: center;
}
</style>
<script>
window.onload = function () {
var width = 300;
document.getElementById('increase-size').onclick=function() {
width += 100;
if (width > 300) width = 300;
document.getElementById('container').style.width = (width + "px");
} document.getElementById('decrease-size').onclick=function() {
width -= 100;
if (width < 100) width = 100;
document.getElementById('container').style.width = (width + "px");
}
} </script>
</head>
<body>
<div id="container" class="horizontal-container">
<div class="fixed-size">Element 1</div>
<div class="fixed-size">Element 2</div>
<div class="fixed-size">Element 3</div>
</div><button id="increase-size">Increase container size</button><button id="decrease-size">Decrease container size</button>
</body>
</html>

使用flexbox来布局web应用的更多相关文章

  1. CSS3中的Flexbox弹性布局(二)

    flexbox详解 flexbox的出现是为了解决复杂的web布局,因为这种布局方式很灵活.容器的子元素可以任意方向进行排列.此属性目前处于非正式标准. flex布局模型不同于块和内联模型布局,块和内 ...

  2. CSS3弹性盒模型之Flexbox是布局模块box-sizing & box-orient & box-direction & box-ordinal-group

    css3 box-sizing属性 box-sizing属性可以为三个值之一:content-box(default),border-box,padding-box. content-box,bord ...

  3. flexbox 伸缩布局盒

    Flexbox(伸缩布局盒) 是 CSS3 中一个新的布局模式,为了现代网络中更为复杂的网页需求而设计. Flexbox 由 伸缩容器 和 伸缩项目 组成.通过设置元素的 display 属性为   ...

  4. 关于FlexBox的布局

    关于FlexBox的布局 基本要素 因为FlexBox是一整个模块并不是一个单独的属性,它涉及到很多东西包括它的所有设置属性.一些属性是需要被设置在容器(父级元素,称为『弹性容器』),而一些其他的属性 ...

  5. 【RN - 基础】之FlexBox弹性布局

    前言 弹性盒模型(The Flexible Box Module),又叫FlexBox,意为“弹性布局”,旨在通过弹性的方式来对齐和分布容器中内容的空间,使其能适应不同的屏幕,为盒装模型提供最大的灵活 ...

  6. 【转】Flexbox——快速布局神器

    原文转自:http://www.w3cplus.com/css3/flexbox-basics.html 简介 在很多方面HTML和CSS是一个强大的内容发布机制——易学.灵活和强大.但复杂的布局是他 ...

  7. Flexbox——快速布局神器

    Flexbox通常能让我们更好的操作他的子元素布局,例如: 如果元素容器没有足够的空间,我们无需计算每个元素的宽度,就可以设置他们在同一行: 可以快速让他们布局在一列: 可以方便让他们对齐容器的左.右 ...

  8. Flexbox弹性布局

    Flexbox,一种CSS3的布局模式,也叫做弹性盒子模型,用来为盒装模型提供最大的灵活性.最新版本兼容IE11+.firefox.safari.chrome.opera及移动端,但移动端ios7.1 ...

  9. Flexbox弹性布局,更优雅的布局

    Flexbox,更优雅的布局 Flex 布局教程:语法篇 Flex 布局教程:实例篇 2009年,W3C提出了一种新的方案----Flex布局,可以简便.完整.响应式地实现各种页面布局.目前,它已经得 ...

随机推荐

  1. 介绍两个Android不常用的Drawable:GradientDrawable和 StateListDrawable

    //-------------------------------------------------------------------------------------------------- ...

  2. 快学Scala-第三章 数组相关操作

    知识点: 1.定长数组 Array val nums = new Array[Int](10) //10个整数的数组,所有元素初始化为0 val a = new Array[String](10) / ...

  3. hdu 3342 Legal or Not(拓扑排序)

    Legal or Not Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total ...

  4. 2--OC -- 类的创建与实例化

    2.OC -- 类的创建与实例化   一.OC类的简述 1.OC类分为2个文件:.h文件用于类的声明,.m文件用于实现.h的函数: 2.类是声明使用关键字:@interface.@end : 3.类是 ...

  5. Landsat TM DN值转为表观反射率

    日地距离计算参见<中华人民共和国气象行业标准太阳能资源评估方法>  

  6. CodeForces 525D Arthur and Walls

    广搜.看了官方题解才会的..... 定义2*2的小矩阵,有三个是点,一个是星,这样的小矩阵被称为元素块. 首先把所有元素块压入队列,每次取出对头,检查是否还是元素块,如果是 那么将那个*改为点,否则跳 ...

  7. ecb gud

    mx gdb不好用,好像是因为用了一个dedicated window,改用mx gud-gdb,好用. http://stackoverflow.com/questions/13560933/how ...

  8. Android Screen Monitor使用

    Android Screen Monitor的使用 用来把android手机屏幕投射到电脑屏幕上,能够放大缩小屏幕,与手机屏幕保持同步. 这个项目是一个开源项目,源码地址:https://code.g ...

  9. StreamReader 读取文本文件乱码问题

    解决读取文本文件乱码问题.我采取的是读取前先判断文本文件格式. StreamReader sr = new StreamReader(fullfileName, GetFileEncodeType(f ...

  10. Block 再学习 !

    如何优雅的使用 Block? How Do I Declare A Block in Objective-C? 阮一峰的一句话解释简洁明了:闭包就是能够读取其它函数内部变量的函数 详情:http:// ...