CSS-布局基础1

display属性

大多数元素的默认值通常是 block 或 inline 。一个 block 元素通常被叫做块级元素。一个 inline 元素通常被叫做行内元素。注意是控制当前元素的,而不是其内部元素。

none:

  • 在不删除元素的情况下隐藏元素,不会保留元素本该显示的空间
  • visibility:hidden 会保留元素的空间

block:

  • 前后有换行符,如不指定宽度,会尽可能撑满容器
  • 高度,行高及顶和底边距都可控制
  • 常见块级元素:div、p、form、header、footer、section

inline(默认):

  • 前后没有换行符、不撑满容器
  • 高,行高及顶和底边距不可改变
  • 包裹一些文字而不会打乱段落的布局

inline-block:

  • 将对象呈递为内联对象,但是对象的内容作为块对象呈递(准确地说,应用此特性的元素呈现为内联对象,周围元素保持在同一行,但可以设置宽度和高度地块元素的属性)
  • 可以实现浮动(float)的效果,如果HTML源代码中元素之间有空格,那么元素之间会产生空隙,使用float不会有空隙;但不能实现float的文字环绕图片
  • 如果不设置width和height,会按元素的内容大小显示
  • 这一行的高度为该行内最大高度的元素高度,vertical-align属性会影响到元素在垂直方向的对齐方式

list-item:

  • 此元素会作为列表显示,如果不设置width和height,每个列表项尽可能撑满容器

flex:

  • 详见下文

display其它属性值详细列表


Flexbox 布局

参考阮一峰的网络日志:
《Flex 布局教程:语法篇》
《Flex 布局教程:实例篇》

display: flex |inline-flex

指定Flex布局后,子元素的float、clear和vertical-align属性将失效

几个基本概念: 容器、项目、主轴、交叉轴

容器的属性

flex-direction

  • 主轴的方向(即项目的排列方向)
  • row | row-reverse | column | column-revers

flex-wrap

  • owrap | wrap | wrap-reverse
  • 一条轴线排不下,如何换行

flex-flow

  • flex-direction属性和flex-wrap属性的简写形式
  • 默认值为row nowrap

justify-content

  • 项目在主轴上的对齐方式
  • flex-start | flex-end | center | space-between | space-around

align-items

  • 项目在交叉轴上的对齐方式
  • flex-start | flex-end | center | baseline | stretch

align-content

  • 多根轴线的对齐方式。如果项目只有一根轴线,该属性不起作用
  • flex-start | flex-end | center | space-between | space-around | stretch

项目的属性

order

  • 项目的排列顺序,数值越小,排列越靠前
  • 整数,默认为0

flex-grow

  • 项目的放大比例,0表示如果存在剩余空间,也不放大
  • 整数,默认为0
  • 如果所有项目的属性都为1,则它们将等分剩余空间;如果一个项目的属性为2,其他项目都为1,则前者占据的剩余空间将比其他项多一倍

flex-shrink

  • 项目的缩小比例,1表示如果空间不足,该项目将缩小
  • 非负整数,默认为1
  • 如果所有项目的属性都为1,当空间不足时,都将等比例缩小;如果一个项目的属性为0,其他项目都为1,则空间不足时,前者不缩小

flex-basis

  • 在分配多余空间之前,项目占据的主轴空间,浏览器根据这个属性,计算主轴是否有多余空间
  • [length] | auto,默认为auto
  • 可以设为跟width或height属性一样的值,则项目将占据固定空间

flex

  • flex-grow, flex-shrink 和 flex-basis的简写,后两个属性可选
  • 默认值为 0 1 auto
  • none (0 0 auto) 表示无论窗口如何变化宽度不变
  • auto (1 1 auto) 表示空间足够时放大,空间不足时缩小
  • initial (0 1 auto) 表示空间足够时不放大,空间不足时缩小
  • 建议优先使用这个属性,因为浏览器会推算相关值

align-self

  • 允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items属性
  • auto | flex-start | flex-end | center | baseline | stretch,默认值为auto
  • auto 表示继承父元素的align-items属性,如果没有父元素,则等同于stretch

多列布局

CSS3多列布局可以自动将内容按指定的列数排列,这种特性实现的布局效果和报纸、杂志排版非常相似。
常用属性如下:

column-width:

auto 默认值,元素多列的列宽由其它属性决定,没有显示设置的情况下,将默认显示一列
[length] 数值和长度单位组成,非负;如果单独使用,容器超出列宽时显示多列,小于列宽时显示一列

column-count:

auto 默认值,表示元素只有一列,依靠浏览器计算自动设置
[integer] 正整数值,定义想要的列数和最大列数,当容器没有足够空间来包含具有指定宽度的列数,元素列数会自动往下计算;如果单独使用,显示固定列数
列数 = (容器宽度 - 列间距)/列宽 向下取整

columns:

column-width和column-count的缩写

column-gap:

normal 默认值,一般情况相当于1em
[length] 浮点数据和单位标识符组成的长度值,非负,常用px、em单位的任何整数值;
如果同时设置了column-width属性,可能会导致列被撑破,使列数减1

column-rule:

定义列之间的边框宽度、样式、颜色,类似border属性,但不占用任何空间位置
[column-rule-width]|[column-rule-style]|[column-rule-color]
默认值分别为 medium | none | 前景色color值
如果column-rule-width宽度超过列间距,列边框就会消失

column-span:

定义一个分列元素中的子元素能跨多少列
none 默认值,表示不跨任何列
all 表示跨所有列,并定位在列的Z轴之上

column-fill:

定义多列中每一列的高度是否统一
auto 默认值,各列的高度随其内容的变化自动变化
balance 各列的高度将会根据内容最多的一列的高度进行统一