Flexbox基础+项目实战视频
源码链接
CSS是Cascading Style Sheet(层叠样式表)的缩写。是用于(增强)控制网页样式并允许将样式信息与网页内容分离的一种标记性语言。
Selector {property:value}
你可以用以下三种方式将样式表加入您的网页。而最接近目标的样式定义优先权越高。高优先权样式将继承低优先权样式的未重叠定义但覆盖重叠的定义。
内联定义即是在对象的标记内使用对象的style属性定义适用其的样式表属性。
示例代码:
<p style="color:#f00;">这一行的字体颜色将显示为红色p>
你可以在你的HTML文档的标记里插入一个
块对象,再在
里面插入如下代码。
示例代码:
body {
background:#fff;
color:#000;
}
p {
font-size:14px;
}
你可以先建立外部样式表文件*.css,然后使用HTML的link对象。
示例代码:
<link rel="stylesheet" href="*.css" />
网页布局(layout)是CSS的一个重点应用。
布局的传统解决方案,基于盒状模型,依赖 display属性 + position属性 + float属性。
CSS Flexible Box Layout Module 简称 Flexbox Layout,Flexbox 布局是CSS3中一种新的布局模式,用于改进传统模式中标签对齐、方向、以及排序等等缺陷。
The prime characteristic of the flex container is the ability to modify the width or height of its children to fill the available space in the best possible way on different screen sizes.
最重要的特点是当父视图因为不同的屏幕而改变自身大小时,父视图可以动态的改变子视图的宽和高来尽可能的填充父视图可用的空间。
许多设计师和开发者发现flexbox布局更容易使用,元素的定位相对于传统布局只需要使用更少的代码即可实现,使开发过程更简单。
查看浏览器支持特性.
要想使用 flexbox 布局只需要在父标签设置display属性即可:
.flex-container {
display: -webkit-flex; /* Safari */
display: flex;
}
如果你希望你的子元素能够使用flexbox布局,你可以这样写:
.flex-container {
display: -webkit-inline-flex; /* Safari */
display: inline-flex;
}
Note
:这是让container能够使用flexbox布局的唯一属性,它能够让所有的子视图立刻变成flex items。
在我们开始学习flexbox相关属性之前,我们先介绍一下flexbox model。
类:它是抽象的概念,比如div
,p
,span
,input
等等标签
对象:对象是具体的东西,比如,
,
,
等等
<html lang="en">
<head>
<meta charset="UTF-8">
<title>flexbox-modeltitle>
<style>
.flexbox-model-container {
background-color: #FECE3F;
width: 600px;
height: 250px;
display: flex;
}
.flexbox-model {
background-color: green;
width: 200px;
height: 50px;
padding: 50px;
border: 10px solid red;
margin: 20px;
}
style>
head>
<body>
<div class="flexbox-model-container">
<div class="flexbox-model">
flexbox-model
div>
div>
body>
html>
盒子的宽度 = 效果图中蓝色边框的宽度
盒子的高度 = 效果图中蓝色边框的高度
<html lang="en">
<head>
<meta charset="UTF-8">
<title>flexbox-modeltitle>
<style>
.flex-item {
width: 120px;
height: 120px;
background-color: white;
margin: 20px;
}
.flex-container {
background-color: #FECE3F;
width: 600px;
height: 220px;
display: flex;
justify-content: center;
align-items: center;
}
style>
head>
<body>
<div class="flex-container">
<div class="flex-item">flex-itemdiv>
<div class="flex-item">flex-itemdiv>
<div class="flex-item">flex-itemdiv>
div>
body>
html>
下图中黄色的图是flex-container
,三个白色的正方形是flex-item
,flex-container
是flex-item
的父视图,我们通常叫容器
,flex-item
是flex-container
的子视图,我们通常叫做项目
,容器
中可以有多个项目
,一个项目
只有一个直接的容器
,容器
里面的多个项目
有排列方向,下图中,三个项目的排列方向是从左到右排列,我们把和排列方向一致的这条线叫做主轴
,另外一条线叫做交叉轴
.
CSS flex-direction 属性指定了内部元素是如何在 flex 容器中布局的,定义了主轴的方向(正方向或反方向)。
请注意,值 row 和 row-reverse 受 flex 容器的方向性的影响。 如果它的 dir 属性是 ltr,row 表示从左到右定向的水平轴,而 row-reverse 表示从右到左; 如果 dir 属性是 rtl,row 表示从右到左定向的轴,而 row-reverse 表示从左到右。
flex容器的主轴被定义为与文本方向相同。 主轴起点和主轴终点与内容方向相同。
.flex-container {
-webkit-flex-direction: row; /* Safari */
flex-direction: row;
}
表现和row相同,但是置换了主轴起点和主轴终点
.flex-container {
-webkit-flex-direction: row-reverse; /* Safari */
flex-direction: row-reverse;
}
flex容器的主轴和块轴相同。主轴起点与主轴终点和书写模式的前后点相同
.flex-container {
-webkit-flex-direction: column; /* Safari */
flex-direction: column;
}
表现和column相同,但是置换了主轴起点和主轴终点.
.flex-container {
-webkit-flex-direction: column-reverse; /* Safari */
flex-direction: column-reverse;
}
Default value: row
这个属性主要是设置container中的items是否会换行。
.flex-container {
-webkit-flex-wrap: nowrap; /* Safari */
flex-wrap: nowrap;
}
.flex-container {
-webkit-flex-wrap: wrap; /* Safari */
flex-wrap: wrap;
}
.flex-container {
-webkit-flex-wrap: wrap-reverse; /* Safari */
flex-wrap: wrap-reverse;
}
Default value: nowrap
flex-flow是flex-direction和flex-wrap的组合。
.flex-container {
-webkit-flex-flow: <flex-direction> || <flex-wrap>; /* Safari */
flex-flow: <flex-direction> || <flex-wrap>;
}
row nowrap
justify-content
主要用设置flex items
在容器
里面严着主轴的排列方式。
.flex-container {
-webkit-justify-content: flex-start; /* Safari */
justify-content: flex-start;
}
.flex-container {
-webkit-justify-content: flex-end; /* Safari */
justify-content: flex-end;
}
.flex-container {
-webkit-justify-content: center; /* Safari */
justify-content: center;
}
.flex-container {
-webkit-justify-content: space-between; /* Safari */
justify-content: space-between;
}
.flex-container {
-webkit-justify-content: space-around; /* Safari */
justify-content: space-around;
}
Default value: flex-start
当flex items
在主轴上只有一排
时,align-items
属性主要用于设置交叉轴
上flex items
的排列方式。
.flex-container {
-webkit-align-items: stretch; /* Safari */
align-items: stretch;
}
.flex-container {
-webkit-align-items: flex-start; /* Safari */
align-items: flex-start;
}
.flex-container {
-webkit-align-items: flex-end; /* Safari */
align-items: flex-end;
}
.flex-container {
-webkit-align-items: center; /* Safari */
align-items: center;
}
.flex-container {
-webkit-align-items: baseline; /* Safari */
align-items: baseline;
}
Default value: stretch
当flex items
在主轴上有多排(只有一排时此属性不起作用)
时,align-content
属性主要用于设置交叉轴
上flex items
的排列方式。
.flex-container {
-webkit-align-items: stretch; /* Safari */
align-items: stretch;
}
.flex-container {
-webkit-align-items: flex-start; /* Safari */
align-items: flex-start;
}
.flex-container {
-webkit-align-items: flex-end; /* Safari */
align-items: flex-end;
}
.flex-container {
-webkit-align-items: center; /* Safari */
align-items: center;
}
.flex-container {
-webkit-align-items: space-between; /* Safari */
align-items: space-between;
}
.flex-container {
-webkit-align-items: space-around; /* Safari */
align-items: space-around;
}
Default value: stretch
order
用于改变容器
中项目
的默认的排列顺序。
.flex-item {
-webkit-order: <integer>; /* Safari */
order: <integer>;
}
通过修改flex-item的值可以让flex items重新按照order
值重新排列。
Default value: 0
flex-grow
属性的默认值为0
,当它为0时,尽管flex-container
剩余很多多余的空间,但是当前的flex-item
并不会自动伸缩以填充flex-container
多余的空间。
其实我们可以这么总结,flex-grow
属性值决定它相对与其他兄弟视图自动填充flex-container
剩余空间的比例。
.flex-item {
-webkit-flex-grow: <number>; /* Safari */
flex-grow: <number>;
}
当所有的item
的flex-grow
的值相同时,他们所占据的空间相同。
下图中5个flex-item
的比例关系为:1:3:1:1:1
Default value: Default value: 0
flex-shrink
属性和flex-grow
相反,默认值为0
,当flex-container
空间就算不够时,也不允许缩小,当flex-shrink
的值为非0
的正数时,表示当前flex-item
相对与其他的兄弟item
的缩小比例值。
.flex-item {
-webkit-flex-shrink: <number>; /* Safari */
flex-shrink: <number>;
}
假设下图中除了2
的flex-shrink
值为默认值0
,其他的都为1
,那么当空间不足时,2
并不会变小,其它的兄弟视图等比例缩小。
Default value: 1
制定某一个item
在主轴上的大小,或者在主轴上相对于flex-container
大小的比例关系。
.flex-item {
-webkit-flex-basis: auto | <width>; /* Safari */
flex-basis: auto | <width>;
}
Default value: auto
flex
是flex-grow
, flex-shrink
andflex-basis
的缩写,auto
等价于1 1 auto
,none
等价于0 0 auto
.
.flex-item {
-webkit-flex: none | auto | [ <flex-grow> <flex-shrink>? || <flex-basis> ]; /* Safari */
flex: none | auto | [ <flex-grow> <flex-shrink>? || <flex-basis> ];
}
Default value: 0 1 auto
align-self
主要用在当因为flex-container
上的属性align-items
属性改变了自己的状态但是又希望自己的状态和其它兄弟视图之间的状态不一样时,就可以使用align-self
来的自身的状态进行设置。
.flex-item {
-webkit-align-self: auto | flex-start | flex-end | center | baseline | stretch; /* Safari */
align-self: auto | flex-start | flex-end | center | baseline | stretch;
}
Default value: auto