flex布局--小实例

圣杯布局(Holy Grail Layout)指的是一种最常见的网站布局。页面从上到下,分成三个部分:头部(header),躯干(body),尾部(footer)。其中躯干又水平分成三栏,从左到右为:导航、主栏、副栏。

本章就用flex布局来设计圣杯布局

先放上代码

html代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
    <link href="2-2.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div class="box">
<header class="header">#header</header>
<div class="main-content">
<div class="child left">#left</div>
<div class="child center">#center</div>
<div class="child right">#right</div>
</div>
<footer class="footer">#footer</footer>
</div>
</body>
</html>      

css代码

*{
    text-align:center;
    font-size:30px;    
}
.box{
    display:flex;
    flex-wrap:wrap;
   // border:1px solid red;
    flex-direction:column;//我们这里设置的排列方式竖向排列,也就是说主轴是从上到下的。
    height:600px;
    width:900px;
}
.header{
    flex-basis:20%;//这个属性设置的改项目占主轴长度的比例。
    background:rgb(102,102,102);
    color:rgb(255,255,255);
    line-height:4.5em;
}
.main-content{
    flex-basis:60%;
    display:flex;//中间部分又分三个模块,所以将中间部分也设置成flex布局。
    background:yellow;
    color:rgb(0,0,0);
    line-height:13.5em;
}
.footer{
    flex-basis:20%;
    background:rgb(102,102,102);
    color:rgb(255,255,255);
    line-height:4.5em;
}
.child:nth-child(1){
    flex-basis:20%;
    background:rgb(119,187,221);
}
.child:nth-child(2){
    flex-basis:60%;
    background:rgb(214,214,214);
}
.child:nth-child(3){
    flex-basis:20%;
    background:rgb(255,102,51);
}

注意事项:1.flex布局中项目是不分块状元素与内联元素的。也即是原来html中的内敛元素也是可以设置宽度的。

2.我们可以给其中的项目设置长和宽的值,这样是可以的,如果你没有设置宽度的话,你可以通过flex-basis属性设置项目在主轴上的长度比例。

举一个例子

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
    <link href="1.css" rel="stylesheet" type="text/css"/>
</head>
<div class="box">
<span class="child"></span>
<span class="child"></span>
</div>
</body>
</html>      

如果我们没有设置span的长和宽的话,设置它们的flex-basis属性为:50%;justify-content:space-between;且如果我们设置的主轴就是横轴的话,那这两个项目会在一排排列,结果如下

且大家注意到了一个地方,他的高是占据整个容器的高度的。也就是说如果我们没有设置项目在交叉轴上的长度话,项目就一直会延伸变长,除非碰到父容器的边界和其他项目为止。

如果我多添加几个项目

结果变成这样了,也就是说如果我们没有设置项目在交叉轴上的长度的话,那么项目的长度会只适应长度。如果设置了固定长度的话,他就会以固定的长度来显示。

如果主轴上没有设置固定宽度,又没有设置flex-basis属性的话,那么项目在主轴上的宽度就会只适应,也就是宽度为项目内容的宽度。

3.我们还可以通过项目的flex-grow属性来设置项目在主轴上是如何分配剩余空间的。

原文地址:https://www.cnblogs.com/yuaima/p/5262595.html