CSS flex布局

html-css026

CSS flex布局,第1张

flex布局是一种无论对于块级元素还是行内元素都可以被采用的布局,且它使用起来也是十分的方便

首先是要指定flex布局

当我们指定flex布局方式的时候,其属性值 float、clear、vertical-align就失效了

无论是块级元素还是行内元素,当他们指定使用flex布局的时候,就被称为“ 容器 ”(flex container)

他们的子元素自动成为容器成员,被称为“ 项目 ”(flex item)。

flex布局是通过两根轴决定的,其实现方式其实和直角坐标系很像,都是通过轴来进行定位

每个容器都有两根轴,分别为水平的 主轴 (main axis)和垂直的 交叉轴 (cross axis)。主轴开始位置为main start,结束位置为main end。交叉轴的开始位置为cross start,结束位置为cross end

容器内的项目都是沿着主轴排列的,这点和块级元素有较大的不同,因为每个块级元素默认是占有一整行的,且排列方式为由上到下排列。

每个项目都占有一定的主轴空间和交叉轴空间,分别被称为main size和cross size

flex布局下,容器和项目都有其各自的属性

决定主轴的方向,即决定项目的排列方向,其属性值有

决定了当一行放不下所有的项目时,其换行与否以及换行方式

定义了项目在主轴上的对齐方式,假设主轴是从左向右的水平排列

定义了项目在交叉轴上的对齐方式,假设交叉轴是从上到下排列

在这里重点说一下上面这两个属性。

这样可以很方便的设置水平垂直居中

另外说一下align-items:baseline这个属性值。如描述,这个属性值是通过文字来进行对齐,而不是每个项目的边界或是中心

在容器内具有多根主轴线时,可以定义这些轴线的对齐方式

align-content属性和justify-content属性,这两者的属性值有较大的相似之处,这是因为,justify-content属性定义的是多个项目在主轴上的对齐方式,而align-content属性定义的是多根主轴在交叉轴上的对齐方式,这两者描述的对象就几乎一致

定义了多个项目的排列顺序,其使用方式和z-index属性值有异曲同工之处,都是指定属性值,属性值为整数。对于order属性,属性值越小,则排列越靠前;对于z-index属性,则属性值越小,就越在底层

设置了项目的放大比例,其默认值为1。

设置了项目的缩小比例,默认值为1。

在分配多余空间之前,为项目定义其占据的主轴空间

用来设置单个项目与其他项目不同的对齐方式,其属性值和align-items的属性的属性值基本一致,不过其默认值为auto,表示继承父元素的属性值。

如Alert弹出窗口的旋转特效

css中

@namespace

s

"library://ns.adobe.com/flex/spark"

@namespace

mx

"library://ns.adobe.com/flex/mx"

mx|Alert

{

fontFamily:

VerdanaEmbedded

creationCompleteEffect:

myEffect

}

mxml中

<fx:Style

source="css/style.css"

/>

<fx:Declarations>

<mx:Sequence

id="myEffect">

<mx:Parallel>

<mx:Zoom

/>

<mx:Fade

/>

</mx:Parallel>

<mx:Rotate

/>

</mx:Sequence>

</fx:Declarations>

这样弹出窗口时就有了旋转特效

如果只是改样式的话有以下几种

直接改写默认控件样式

mx|button{

……

}

对指定控件增加样式,#后为控件ID

mx|Button#check{

……

}

或直接指定ID

#haloButton

{

base-color:#0000ff

}

通过状态定义样式

s|Button:down

{

color:#33CC33

}

增加控件样式,用styleName+"样式名"的方式应用于控件

.myButton{

……

}

增加子样式

mx|TabNavigator{

firstTabStyleName:

"MyFirstTab"

}

.MyTabs

{

……

}

在css中,我们可以使用flex去实现垂直居中,但是flex并不是一个很好的方法,现在很多浏览器并不支持flex,例如IE8,9。

首先我们要先给图片添加一个div,并且定义为宽度为100px,高度也是100px,并且给它定义一些基本的属性,其中我们把div中的display元素设置成flex,然后把另外一条添加align-items:center属性。

css代码:

body{background:#999}

.flexbox{width:300pxheight:250pxbackground:#fffdisplay:flexalign-items:center}

.flexboximg{width:100pxheight:100pxalign-items:center}

如果情况容许的话,可以用以下方法,兼容性更好:

body{background:#ccc}

.posdiv{width:300pxheight:250pxbackground:#fffposition:relativemargin:0auto}

.posdivimg{width:100pxposition:absolutetop:50%margin-top:-50px}