• 工资「喂饱肚子」,副业「养活灵魂」!

  • 感谢大家访问本站,希望本站的内容可以帮助到大家!

  • 如果觉得本站的内容有帮助,可以考虑打赏博主哦!

  • 在本站开通年度VIP,无限制下载本站资源和阅读本站文章

  • 欢迎大家交换友链,可在https://www.stubbornhuang.com/申请友情链接进行友链交换申请!

  • 计算机图形学与计算几何经典必备书单整理,下载链接可参考:https://www.stubbornhuang.com/1256/

  • 本站由于前段时间遭受到大量临时和国外邮箱注册,所以对可注册的邮箱类型进行了限制!

  • 问题反馈可发送邮件到stubbornhuang@qq.com

  • 本站会放置Google广告用于维持域名以及网站服务器费用。

CSS – 使用Flex实现常用布局

CSS 发布于2023-10-28 阅读 1,667次 0次评论 0次点赞 本文共2491个字,阅读需要7分钟。

转载自:https://zhuanlan.zhihu.com/p/60516052 ,如侵联删。

1 网格布局

1.1 基本网格布局

最简单的网格布局,就是平均分布。

html代码如下

<div class="Grid">
    <div class="Grid-cell">1/2</div>
    <div class="Grid-cell">1/2</div>
  </div>
  <div class="Grid">
    <div class="Grid-cell">1/3</div>
    <div class="Grid-cell">1/3</div>
    <div class="Grid-cell">1/3</div>
  </div>

css代码如下

.Grid {
  display: flex;
}

.Grid-cell {
  flex: 1;
  background: #eee;
  margin: 10px;
}

这里最关键的就是flex:1使得各个子元素可以等比伸缩

CSS - 使用Flex实现常用布局-第0张图片

1.2 百分比布局

某个网格的宽度为固定的百分比,其余网格平均分配剩余的空间。

html如下

<div class="Grid">
    <div class="Grid-cell col2">50%</div>
    <div class="Grid-cell">auto</div>
    <div class="Grid-cell ">auto</div>
</div>
<div class="Grid">
    <div class="Grid-cell">auto</div>
    <div class="Grid-cell col2">50%</div>
    <div class="Grid-cell clo3">1/3</div>
</div>

css代码如下

.col2 {
  flex: 0 0 50%;
}
.col3 {
  flex: 0 0 33.3%;
}

这里最关键的是通过flex的第三个属性,也就是flex-basis来定义元素占据的空间

CSS - 使用Flex实现常用布局-第1张图片

2 圣杯布局

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

html代码如下

<div class="container">
    <header class="bg">header</header>
    <div class="body">
      <main class="content bg">content</main>
      <nav class="nav bg">nav</nav>
      <aside class="ads bg">aside</aside>
    </div>
    <footer class="bg">footer</footer>
  </div>

css代码如下

.container {
  display: flex;
  flex-direction: column;
  min-height: 100vh;
}

.body {
  display: flex;
  flex: 1;
}

header,
footer {
  flex: 0 0 100px;
}
.content {
  flex: 1;
}

.ads,
.nav {
  flex: 0 0 100px;
}

.nav {
  order: -1;
}

.bg {
  background: #eee;
  margin: 10px;
}

@media (max-width: 768px) {
  .body {
    flex-direction: column;
    flex: 1;
  }

  .nav,
  .ads,
  .content {
    flex: auto;
  }
}

这里面需要注意的点有:

  • container的flex-direction: column这样保证了header,body,footer是在垂直轴上排列
  • header,footer的高度可以通过flex: 0 0 100px来控制
  • nav可以通过order:-1来调整位置
  • 通过@media (max-width: 768px)来调整小屏幕的页面结构
CSS - 使用Flex实现常用布局-第2张图片

3 侧边栏固定布局

侧边固定宽度,右边自适应布局。

html如下

<div class="container1">
    <div class="aside1 bg">aside</div>
    <div class="body1">
      <div class="header1 bg">header</div>
      <div class="content1 bg">content</div>
      <div class="footer1 bg">footer</div>
    </div>
</div>

css代码如下

.bg {
  background: #eee;
  margin: 10px;
}
.container1 {
  min-height: 100vh;
  display: flex;
}
.aside1 {
  /* flex: 0 0 200px; */
  flex: 0 0 20%;
}
.body1 {
  display: flex;
  flex-direction: column;
  flex: 1;
}
.content1 {
  flex: 1;
}
.header1, .footer1 {
  flex: 0 0 10%;
}

显示如下

CSS - 使用Flex实现常用布局-第3张图片

4 流式布局

每行的项目数固定,会自动分行。

html如下

<div class="container2">
    <div class="item"></div>
    <div class="item"></div>
    <div class="item"></div>
    <div class="item"></div>
    <div class="item"></div>
    <div class="item"></div>
    <div class="item"></div>
    <div class="item"></div>
    <div class="item"></div>
</div>

css代码如下

.container2 {
  width: 200px;
  height: 150px;
  display: flex;
  flex-flow: row wrap;
  align-content: flex-start;
}

.item {
  box-sizing: border-box;
  background: #eee;
  flex: 0 0 20%;
  height: 40px;
  margin: 5px;
}

这里主要使用到了flex-flow: row wrap使得子元素水平排列,并且换行

CSS - 使用Flex实现常用布局-第4张图片

欢迎扫码关注我的微信公众号,及时获取文章更新

微信公众号二维码

本文作者:StubbornHuang

版权声明:本文为站长原创文章,如果转载请注明原文链接!

原文标题:CSS – 使用Flex实现常用布局

原文链接:https://www.stubbornhuang.com/2872/

发布于:2023年10月28日 20:10:17

修改于:2023年10月28日 20:13:59

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

文章末尾
上一篇
CSS - Flex布局
CSS
下一篇
语音识别的RTF和RTX评价指标
深度学习
当前分类随机文章推荐

发表评论

您必须 [ 登录 ] 才能发表留言!

关注我们的公众号

微信公众号