使用flexbox来布局web应用
使用 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应用的更多相关文章
- CSS3中的Flexbox弹性布局(二)
flexbox详解 flexbox的出现是为了解决复杂的web布局,因为这种布局方式很灵活.容器的子元素可以任意方向进行排列.此属性目前处于非正式标准. flex布局模型不同于块和内联模型布局,块和内 ...
- 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 ...
- flexbox 伸缩布局盒
Flexbox(伸缩布局盒) 是 CSS3 中一个新的布局模式,为了现代网络中更为复杂的网页需求而设计. Flexbox 由 伸缩容器 和 伸缩项目 组成.通过设置元素的 display 属性为 ...
- 关于FlexBox的布局
关于FlexBox的布局 基本要素 因为FlexBox是一整个模块并不是一个单独的属性,它涉及到很多东西包括它的所有设置属性.一些属性是需要被设置在容器(父级元素,称为『弹性容器』),而一些其他的属性 ...
- 【RN - 基础】之FlexBox弹性布局
前言 弹性盒模型(The Flexible Box Module),又叫FlexBox,意为“弹性布局”,旨在通过弹性的方式来对齐和分布容器中内容的空间,使其能适应不同的屏幕,为盒装模型提供最大的灵活 ...
- 【转】Flexbox——快速布局神器
原文转自:http://www.w3cplus.com/css3/flexbox-basics.html 简介 在很多方面HTML和CSS是一个强大的内容发布机制——易学.灵活和强大.但复杂的布局是他 ...
- Flexbox——快速布局神器
Flexbox通常能让我们更好的操作他的子元素布局,例如: 如果元素容器没有足够的空间,我们无需计算每个元素的宽度,就可以设置他们在同一行: 可以快速让他们布局在一列: 可以方便让他们对齐容器的左.右 ...
- Flexbox弹性布局
Flexbox,一种CSS3的布局模式,也叫做弹性盒子模型,用来为盒装模型提供最大的灵活性.最新版本兼容IE11+.firefox.safari.chrome.opera及移动端,但移动端ios7.1 ...
- Flexbox弹性布局,更优雅的布局
Flexbox,更优雅的布局 Flex 布局教程:语法篇 Flex 布局教程:实例篇 2009年,W3C提出了一种新的方案----Flex布局,可以简便.完整.响应式地实现各种页面布局.目前,它已经得 ...
随机推荐
- javascript语句语义大全(5)
1. var str = "abcd";alert(str.length);alert(str.charAt(0));//获取下标为0的字符alert(str.charCodeAt ...
- poj 2594 Treasure Exploration(最小路径覆盖,可重点)
题意:选出最小路径覆盖图中所有点,路径可以交叉,也就是允许路径有重复的点. 分析:这个题的难点在于如何解决有重复点的问题-方法就是使用Floyd求闭包,就是把间接相连的点直接连上边,然后就是求最小路径 ...
- A*算法实现
A* 算法非常简单.算法维护两个集合:OPEN 集和 CLOSED 集.OPEN 集包含待检测节点.初始状态,OPEN集仅包含一个元素:开始位置.CLOSED集包含已检测节点.初始状态,CLOSED集 ...
- Oracle Sql优化之范围处理
1.表中字段自关联与分析函数的性能比较,自关联需要扫描表两次,分析函数扫描一次即可 ----自关联 select v1.proj_id,v1.proj_start,v1.proj_end from v ...
- 优化viewHolder
- 微信小程序实例教程(一)
序言 开始开发应用号之前,先看看官方公布的「小程序」教程吧!(以下内容来自微信官方公布的「小程序」开发指南) 本文档将带你一步步创建完成一个微信小程序,并可以在手机上体验该小程序的实际效果.这个小程序 ...
- opentsdb
http://blog.javachen.com/2014/01/22/all-things-opentsdb.html http://blog.csdn.net/bingjie1217/articl ...
- DW常用
Dreamweaver代码 基本结构标签: <HTML>,表示该文件为HTML文件 <HEAD>,包含文件的标题,使用的脚本,样式定义等 <TITLE>---< ...
- CGAffineTransform 放射变换解析 即矩阵变换
转载自;http://www.cocoachina.com/bbs/3g/read.php?tid=151136 矩阵乘法A B相乘要A的列数等于B的行数才有定义,结果是一个 A行B列的矩阵C,C的每 ...
- IE6里面display:inlineblock使得块元素成行排列,没用
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...