flex布局笔记1(基本概念与容器的属性)

网页布局是CSS的一个重点应用

      网页布局的传统解决方案为盒子模型,依赖于display + position + float属性。这种解决方案的缺点是对于特殊布局的实现比较麻烦,如元素的垂直居中。

      2009年W3C提出flex布局(Flexible Box)。即弹性布局。

      任何一个元素都可以作为弹性布局的容器。设为Flex布局以后,子元素的float、clear和vertical-align属性将失效。

flex布局概念

       采用flex布局的元素成为flex容器(flex container),所有的子元素自动成为容器成员,成为容器项目(flex item)

       容器默认存在两根轴:水平的主轴(main axis)和垂直的交叉轴(cross axis)。水平主轴的起始位置叫 main start,终止位置叫 main end。垂直交叉轴的起始位置叫 cross start,终止位置叫cross end。

       项目默认沿主轴排列,单个项目占用的主轴空间叫做main size,占用的交叉轴空间叫做 cross size。

容器的属性

    容器具有以下六个属性:flex-direction、flex-wrap、flex-flow、justify-content、align-items、align-content。

 1.flex-direction属性:该属性决定主轴的方向,它有四个值。

.box {
  flex-direction: row | row-reverse | column | column-reverse;
}

 

row(默认值):主轴为水平方向,起点在左端。

row-reverse:主轴为水平方向,起点在右端。

column:主轴为垂直方向,起点在上沿。

column-reverse:主轴为垂直方向,起点在下沿。

四个属性值测试


    <div style="display:flex ;border: #0f0f0f 1px solid;margin-bottom: 10px">
    <p>弹性布局1</p>
    <div style="width: 200px;height: 200px;background: #ff4d4d">
    </div>
    <div style="width: 200px;height: 200px;background:  #ff9999">
    </div>
    <div style="width: 200px;height: 200px;background:  #ffe5e5">
    </div>
</div>

<div style="display:flex ;flex-direction: row-reverse;border: #0f0f0f 1px solid;margin-bottom: 10px">
    <p>弹性布局2</p>
    <div style="width: 200px;height: 200px;background: #ff4d4d">
    </div>
    <div style="width: 200px;height: 200px;background:  #ff9999">
    </div>
    <div style="width: 200px;height: 200px;background:  #ffe5e5">
    </div>
</div>

<div style="display:flex ;flex-direction: column;border: #0f0f0f 1px solid;margin-bottom: 10px">
    <p>弹性布局3</p>
    <div style="width: 200px;height: 200px;background: #ff4d4d">
    </div>
    <div style="width: 200px;height: 200px;background:  #ff9999">
    </div>
    <div style="width: 200px;height: 200px;background:  #ffe5e5">
    </div>
</div>
<div style="display:flex ;flex-direction: column-reverse;border: #0f0f0f 1px solid;margin-bottom: 10px">
    <p>弹性布局4</p>
    <div style="width: 200px;height: 200px;background: #ff4d4d">
    </div>
    <div style="width: 200px;height: 200px;background:  #ff9999">
    </div>
    <div style="width: 200px;height: 200px;background:  #ffe5e5">
    </div>
</div>

效果如图所示

2.flex-wrap属性:默认情况下,项目都排在一条直线上。flex-flow属性定义如果一条轴线排不下,如何换行。它有3个值。

.box{
  flex-wrap: nowrap | wrap | wrap-reverse;
}

nowrap(默认):不换行。

wrap:换行,第一行在上方。

wrap-reverse:换行,第一行在下方。

以上是同一个div,带一个属性名字的标题和12个色块,其中只有flex-wrap值不同。三个属性的区别可以明显的看出来。

3. flex-flow属性:flex-flow属性是flex-direction属性和flex-wrap属性的简写形式,默认值为row nowrap。

.box {
  flex-flow: <flex-direction> || <flex-wrap>;
}

4.justify-content属性:justify-content属性定义了项目在主轴上的对齐方式。

.box {
  justify-content: flex-start | flex-end | center | space-between | space-around;
}

flex-start(默认):对齐方式为主轴的起始位置

flex-end:对齐方式为主轴的终止位置

center:居中对齐

space-between:两端对齐,项目之间的间隔都相等

space-around:每个项目两侧的间隔相等。所以,项目之间的间隔比项目与边框的间隔大一倍。

5.align-items属性:align-items属性定义项目在交叉轴上如何对齐。

.box {
  align-items: flex-start | flex-end | center | baseline | stretch;
}

flex-start:交叉轴的起点对齐。

flex-end:交叉轴的终点对齐。

center:交叉轴的中点对齐。

baseline: 项目的第一行文字的基线对齐。

stretch(默认值):如果项目未设置高度或设为auto,将占满整个容器的高度。

6.align-content属性:align-content属性定义了多根轴线的对齐方式。如果项目只有一根轴线,该属性不起作用。

.box {
  align-content: flex-start | flex-end | center | space-between | space-around | stretch;
}

flex-start:与交叉轴的起点对齐。

flex-end:与交叉轴的终点对齐。

center:与交叉轴的中点对齐。

space-between:与交叉轴两端对齐,轴线之间的间隔平均分布。

space-around:每根轴线两侧的间隔都相等。所以,轴线之间的间隔比轴线与边框的间隔大一倍。

stretch(默认值):轴线占满整个交叉轴。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 好的,以下是使用flex布局实现educoder顶部导航栏容器布局的代码: HTML代码: ``` <div class="nav-container"> <div class="logo">educoder</div> <div class="nav-links"> <a href="#">首页</a> <a href="#">课程</a> <a href="#">问答</a> <a href="#">讨论</a> <a href="#">笔记</a> <a href="#">我的</a> </div> </div> ``` CSS代码: ``` .nav-container { display: flex; justify-content: space-between; align-items: center; padding: 20px; background-color: #fff; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); } .logo { font-size: 24px; font-weight: bold; } .nav-links { display: flex; } .nav-links a { margin-right: 20px; color: #333; text-decoration: none; font-size: 16px; font-weight: bold; } .nav-links a:hover { color: #f00; } ``` 希望能对您有所帮助! ### 回答2: 在进行educoder顶部导航栏容器布局时,可以使用flex布局来实现。 首先,可以创建一个header容器作为导航栏的容器,并设置display属性为flex,这样可以使其成为一个flex容器: ``` <header class="container"> ... </header> .container { display: flex; } ``` 接下来,可以使用flex容器的 justify-content 属性来设置主轴对齐方式,从而使导航栏中的元素水平居中对齐。在这个例子里,我们将导航栏中的元素横向排列,所以采用 justify-content: center 。 ``` .container { display: flex; justify-content: center; } ``` 紧接着,使用 flex 容器的 align-items 属性来设置垂直对齐方式,从而使导航栏中的元素垂直居中对齐。在这个例子里,因为导航栏中元素高度相等,所以使用 align-items: center 即可。 ``` .container { display: flex; justify-content: center; align-items: center; } ``` 最终,完整的educoder顶部导航栏容器布局如下: ``` <header class="container"> <div class="logo">educoder</div> <nav class="nav"> <ul> <li><a href="#">首页</a></li> <li><a href="#">学习</a></li> <li><a href="#">问答</a></li> <li><a href="#">社区</a></li> <li><a href="#">实验室</a></li> </ul> </nav> </header> .container { display: flex; justify-content: center; align-items: center; } .logo { font-size: 2em; font-weight: bold; color: #333; } nav ul { display: flex; list-style: none; } nav li { margin-right: 1em; } nav a { text-decoration: none; color: #333; font-size: 1.2em; } ``` 通过以上的设置,可以轻松地使用flex布局实现educoder顶部导航栏容器布局。可以根据实际需求适当调整css属性值,从而实现最佳的效果。同时,需要注意兼容性问题。 ### 回答3: flex是CSS3新增的布局模式,它能够让容器的子元素以弹性的方式排列。当我们需要实现一个顶部导航栏容器布局时,可以选择使用flex进行布局。 首先,需要为容器添加样式display: flex;,这样容器里面的子元素便可以使用flex属性进行布局。 接着,我们可以使用justify-content属性来定义子元素在容器中的水平对齐方式。顶部导航栏容器通常是从左到右依次排列,所以这里可以使用justify-content: space-between;,使每个元素之间有相同的间距。 下一步,我们可以使用align-items属性来定义子元素在容器中的垂直对齐方式。通常情况下,顶部导航栏的高度是相等的,所以这里可以使用align-items: center;,使每个元素垂直居中对齐。 最后,为了适应不同的屏幕大小,还需要为容器添加响应式布局效果。在容器上添加flex-wrap: wrap;,可以使子元素自动换行;在子元素上使用flex-basis属性,可以设置子元素的占比大小,实现自适应效果。 以上是使用flex布局实现educoder顶部导航栏容器布局的步骤。通过灵活运用flex的属性,可以轻松实现不同布局需求。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值