非常教程

CSS参考手册

灵活的框布局 | Flexible Box Layout

CSS灵活框布局:使用flexbox布置Web应用程序 | CSS Flexible Box Layout: Using flexbox to lay out web applications

使用flexbox可以帮助您在Web应用程序中设计引人注目的布局,从桌面到移动应用程序的扩展性更好。结束使用浮动的<div>元素,绝对定位和JavaScript hack,并开始在几行CSS中构建横向和纵向流动布局。一些基本的示例用例:

  • 你想要在一个页面中间放置一个元素
  • 你需要一套竖直流动的容器
  • 您想创建一排按钮或其他元素,在较小的屏幕尺寸上垂直折叠

本文仅介绍使用支持标准的现代前置实现的浏览器的flexbox。有关旧版浏览器的供应商前缀的信息,请参阅使用CSS灵活框的更一般指南。

基本

您可以通过将<div>display属性设置为属性flex,然后将flex-flow属性设置为任意流row,如果要使元素水平流动,或者column如果要使元素垂直流动,可以使用柔性框使任何流中的元素。如果您使用的是水平柔性盒,并且希望您的内容垂直换行,那么还要指定wrap值。

然后,对于您想要成为flex flow的一部分的每个元素,请设置flex属性。通常你会想使用以下三个值之一:

  • 如果您想要一个只占用其分配宽度的元素,如按钮,请使用flex: none扩展到0 0 auto...
  • 如果要显式调整元素的大小,请使用flex: 0 0size例如:flex 0 0 60px...
  • 如果您想要一个扩展到填充可用空间的元素,即如果流中有多个此类元素,则使用相同的共享空间。flex: auto.它扩展到1 1 auto...

当然还有其他的可能性,但是这应该包括基本的用例。让我们来看几个例子。

将页面中的元素居中

对于这种情况,最简单的做法是创建两个 flexible box,一个在另一个之内。每个flexbox将有三个元素:其中两个填充居中元素,然后是居中元素本身。

CSS内容

.vertical-box {
  display: flex;
  height: 400px;
  width: 400px;
  flex-flow: column;
}
.horizontal-box {
  display: flex;
  flex-flow: row;
}
.spacer {
  flex: auto;
  background-color: black;
}
.centered-element {
  flex: none;
  background-color: white;
}

HTML内容

<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>

结果

垂直流动一组容器

想象一下,你有一个页面布局的页面部分,内容部分和页脚。页眉和页脚应该有一个固定的大小,但内容应根据可用空间调整大小。这可以通过设置内容的flex属性autoflex页眉的属性,以及页脚来完成none

CSS内容

.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 {
  flex: auto;
  background-color: white;
}

HTML内容

<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>

JavaScript内容

var height = 400;
document.getElementById('increase-size').onclick=function() {
  height += 10;
  if (height > 500) height = 500; 
  document.getElementById('document').style.height = (height + "px");
}

document.getElementById('decrease-size').onclick=function() {
  height -= 10;
  if (height < 300) height = 300; 
  document.getElementById('document').style.height = (height + "px");
}

结果

这个例子已经设置好,点击标题会增加尺寸,点击页脚会减小尺寸。观察内容如何自动调整大小,同时保持页眉和页脚大小不变。

创建一个折叠的水平容器

在某些情况下,您可能希望在屏幕大小允许的情况下水平放置一组信息,但水平地将内容折叠到不存在的位置。使用flexbox这非常简单。您可以通过将wrap值添加到flex-flow属性来完成此操作。

CSS内容

.horizontal-container {
  display: flex;
  width: 300px;
  flex-flow: row wrap;
}
.fixed-size {
  flex: none;
  width: 100px;
  background-color: black;
  color: white;
  text-align: center;
}

HTML内容

<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>

JavaScript内容

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");
}

结果

CSS

层叠样式表( Cascading Style Sheets )是一种用来表现 HTML 或 XML 等文件样式的计算机语言。CSS 不仅可以静态地修饰网页,还可以配合各种脚本语言动态地对网页各元素进行格式化。

CSS目录

1.动画和转换 | Animations & Transitions
2.背景和边框 | Backgrounds & Borders
3.基本框模型 | Basic Box Model
4.基本用户界面 | Basic User Interface
5.框对齐 | Box Alignment
6. 级联和继承 | Cascading & Inheritance
7.颜色 | Color
8. 合成与混合 | Compositing & Blending
9.条件和规则 | Conditional Rules
10.计数器样式 | Counter Styles
11.设备适配 | Device Adaptation
12.扩展 | Extensions
13.滤镜效果 | Filter Effects
14.灵活的框布局 | Flexible Box Layout
15.字体 | Fonts
16.片段模块 | Fragmentation
17.全屏 API | Fullscreen API
18. 生成内容 | Generated Content
19.网格布局 | Grid Layout
20.图像值 | Image Values
21.初始线格局 | Inline Layout
22.列表和计数器 | Lists & Counters
23.逻辑属性 | Logical Properties
24.面具 | Masking
25.媒体查询 | Media Queries
26.杂项 | Miscellaneous
27.Miscellaneous Level 1
28.Miscellaneous Level 2
29.运动路径 | Motion Path
30. 多列布局 | Multi-column Layout
31.命名空间 | Namespaces
32.项目模型 | Object Model View
33.网页媒体 | Paged Media
34.定位布局 | Positioned Layout
35.伪元素 | Pseudo-
36.节奏大小 | Rhythmic Sizing
37. Ruby布局 | Ruby Layout
38.可缩放矢量图形 | Scalable Vector Graphics
39.滚动快照 | Scroll Snap
40.选择 | Selectors
41.形状 | Shapes
42.文本 | Text
43.文字装饰 | Text Decoration
44.变换 | Transforms
45.值和单位 | Values & Units
46.变量 | Variables
47.写入模型 | Writing Modes
48.CSS 教程
49.CSS 创建
50.CSS Id 和 Class选择器
51.CSS 简介
52.CSS 盒子模型
53.CSS Table(表格)
54.CSS 列表样式(ul)
55.CSS 链接(link)
56.CSS Fonts(字体)
57.CSS Text(文本)
58.CSS Backgrounds(背景)
59.CSS Display(显示) 与 Visibility(可见性)
60.CSS 尺寸 (Dimension)
61.CSS 分组和嵌套
62.CSS 轮廓(outline)属性
63.CSS Border(边框)
64.CSS 图像透明/不透明
65.CSS 导航栏
66.CSS 伪元素
67.CSS 伪类
68.CSS Float(浮动)
69.CSS Position(定位)
70.CSS 总结
71.CSS 属性选择器
72.CSS 媒体类型
73.CSS 图像拼合技术
74.CSS 实例
75.CSS 组合选择符
76.响应式 Web 设计 – 框架
77.响应式 Web 设计 – 视频(Video)
78.CSS 提示工具(Tooltip)
79.CSS 布局 Overflow
80.CSS 计数器
81.CSS 表单