【CSS3】flex布局实践篇 | 7种常见网页布局方案

news2024/11/16 13:44:19

1、垂直居中

截屏2023-03-17 21.13.49.png

垂直居中一度是前端面试时必问知识点。 目前的垂直解决方案 使用了 从负外边距 到 display:table-cell 等荒谬的奇技淫巧,包括全高的伪元素。这些方法是又复杂又难写。

不知道大家第一次使用flex布局做什么,反正我是用来做垂直居中,使用它实在是太简单了,两行代码搞定。

 
<div class="main">
    <h2>我居中啦!</h2>
    <p>这个元素水平垂直居中了。</p>
</div>

 

2、sticky footer布局

业务场景:

当页面内容少时,让页脚粘在底部;当内容超过一屏时,页脚跟在后面。

这一度也是一个CSS布局难题。但flex布局可以完美解决这个问题。

<div class="container">
  <header>header</header>
  <main>
    <div class="content">
      今夜我不会遇见你 </br>
      今夜我遇见了世上的一切</br>
      但不会遇见你。
    </div>
  </main>
  <footer>footer</footer>
</div>



.container {
    display: flex;
    flex-derection: column;
}

header, footer{
    height: 100px;
}

截屏2023-03-17 21.52.13.png

头部和尾部定高,中间内容设置高度后,当内容少时,页脚会在上面,不会固定在底部。

这种效果显然不是我们期望的,要想实现业务要求,就需要使用到flex-grow属性,它的默认值是0。即当有空余空间时,也不放大。这时我们需要将中间main设置flex-grow为1,这样当有空余空间,他就会放大,填充剩余空间。

main { flex-grow: 1; }

内容少时-吸附在底部:

截屏2023-03-17 21.57.15.png

内容多时-跟随滚动:

截屏2023-03-17 22.01.28.png

这样我们就实现了这个经典布局了。

3、圣杯布局

这是一个经典的 CSS 布局挑战,历史上出现的方案都没有完美解决。直到 Flexbox 布局的出现,终于成为可能。

圣杯布局由页头 (header),中间部分 (center),页脚 (footer),和三栏组成。中间的一栏是主要内容,左边和右边提供如广告、导航的链接。

截屏2023-03-17 22.20.41.png

<div class="HolyGrail">
  <header>header</header>
  <div class="HolyGrail-body">
    <main class="HolyGrail-content">content</main>
    <nav class="HolyGrail-nav">nav</nav>
    <aside class="HolyGrail-ads">ads</aside>
  </div>
  <footer>footer</footer>
</div>


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

header,footer {
  height: 100px;
}

.HolyGrail-body {
  flex: 1;

  display: flex;
  justify-content: space-between;
}

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

.HolyGrail-content {
  flex: 1;
}

.HolyGrail-nav {
  /* 导航放置最左边 */
  order: -1;
}

小屏幕时,中间内容自动成垂直布局,三列。

截屏2023-03-17 22.30.47.png

 
/* 响应式 */
@media (max-width: 768px) {
  .HolyGrail-body {
    flex-direction: column;
  }

  .HolyGrail-nav, .HolyGrail-ads, .HolyGrail-content {
    flex: 1;
  }
}

4、经典导航栏布局

截屏2023-03-17 22.52.08.png

<header>
  <div class="header-left">
    <div class="logo"></div>
    <nav>
      <a>首页</a>
      <a>档案</a>
    </nav>
  </div>

  <div class="header-right">
    <div class="user">echo</div>
    <div class="logout">退出</div>
  </div>
</header>



header {
  display: flex;
  justify-content: space-between;
  align-items: center;
}

.header-left,.header-right {
  display: flex;
  align-items: center;
}

.logo {
  flex: 0 0 32px;
}

.user {
  margin-right: 20px;
}

5、栅格布局

基础栅格布局

最简单的网格布局就是平均分布。在容器中平均分配空间,需要设置项目的自动缩放。

截屏2023-03-17 23.11.39.png

<div class="grid">
  <div class="cell"></div>
  ...
</div>


.grid {
  display: flex;
}

.cell {
  flex: 1;
}

独立尺寸布局

当你的需求不是等宽栅格的时候,可以添加尺寸属性到特定的栅格中。没有尺寸属性的栅格将简单地继续平分剩下的可用空间。

下边加了 “auto” 标签的栅格没有指定任何尺寸属性。

截屏2023-03-17 23.27.49.png

<div class="grid">
  <div class="cell u-1of2"></div>
  <div class="cell"></div>
  <div class="cell"></div>
</div>


.u-1of2 {
  flex: 0 0 50%;
}

.u-1of3 {
  flex: 0 0 33.33%;
}

.u-1of4 {
  flex: 0 0 25%;
}

6、悬挂式布局

这种布局很普遍,当我们在做一个新闻列表模块时,通常它每一栏的的左侧或右侧,需要展示一个图片栏。

截屏2023-03-17 23.45.39.png

<div class="list">
  <div class="item">
    <div class="img"></div>
    <div class="info"></div>
  </div>
  <div class="item">
    <div class="img"></div>
    <div class="info"></div>
  </div>
</div>


.list {
  display: flex;
  flex-direction: column;
  align-items: center;
}

.item {
  display: flex;
  gap: 10px;
}

.item:nth-of-type(2n) {
  flex-direction: row-reverse;
}

.img {
  width: 32px;
  height: 32px;
}

.info {
  flex: 1;
}

7、输入框附加布局

我们常常需要在输入框的前方添加提示,后方添加按钮。

截屏2023-03-18 00.13.31.png

<!-- 后置 -->
<div class="InputAddOn next">
    <input class="InputAddOn-field" />
    <span class="InputAddOn-item">搜索</span>
</div>


.InputAddOn {
  display: flex;
}

.InputAddOn-field {
  flex: 1;
}

.InputAddOn-item {
  flex: 0 0 60px;
}

结语

以上介绍的7种布局基本覆盖了大部分业务场景下的页面布局。或有不足之处,欢迎大家补充讨论。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1423747.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

<网络安全>《12 数据库安全审计系统》

1 概念 数据库安全审计系统通过对用户访问数据库行为的记录、分析和汇报&#xff0c;来帮助用户事后生成合规报告、事故追根溯源&#xff0c;同时通过大数据搜索技术提供高效查询审计报告&#xff0c;定位事件原因&#xff0c;以便日后查询、分析、过滤&#xff0c;实现加强内…

【iOS ARKit】手动配置环境探头

在上节中我们已经了解了环境探头以及如何使用自动环境探头&#xff0c;这节一起了解如何使用手动配置环境探头。 在使用自动环境反射时&#xff0c;开发人员无须进行有关环境反射的任何操作&#xff0c;只需要设置自动环境反射即可&#xff0c;其余工作完全由 RealityKit 自动完…

TRIZ经典矛盾矩阵.exe

TRIZ经典矛盾矩阵.exe 一、概要二、技术细节I&#xff0e;函数open_dialog&#xff08;&#xff09;和open_version_dialog&#xff08;&#xff09;II&#xff0e;函数resolvent&#xff08;&#xff09;III&#xff0e;函数Invention_Principle_Content&#xff08;&#xff…

Log4j2-24-log4j2 相同的日志打印 2 次

现象 相同的日志打印了两次&#xff0c;且因为日志的配置不同&#xff0c;导致脱敏的情况不一致。 代码与配置 代码 package com.ryo.log4j2.cfg.additivity;import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger;public class SimpleDemo…

蓝桥杯省赛无忧 编程14 肖恩的投球游戏加强版

#include <stdio.h> #define MAX_N 1003 int a[MAX_N][MAX_N], d[MAX_N][MAX_N]; // 差分数组的初始化 void init_diff(int n, int m) {for (int i 1; i < n; i) {for (int j 1; j < m; j) {d[i][j] a[i][j] - a[i-1][j] - a[i][j-1] a[i-1][j-1];}} } // 对差…

oracle数仓rac两个节点查询耗时不一致问题处理

问题描述 数据库节点1查询比节点2查询慢。现场操作应用发现发现同一sql语句在节点2上只要2分钟左右&#xff0c;在节点1&#xff0c;该条sql执行要超过30分钟。 处理过程 根据问题&#xff0c;初步判断是由于错误的执行计划&#xff0c;导致性能问题&#xff0c;但实际上对两…

【云原生】docker容器实现https访问

目录 步骤一&#xff1a;在宿主机生成服务端的公钥证书和私钥文件 步骤二&#xff1a;准备Dockerfile文件构建镜像 步骤三&#xff1a;docker run启动容器并将其映射到443端口 步骤一&#xff1a;在宿主机生成服务端的公钥证书和私钥文件 //生成ca证书 &#xff08;1&#x…

0131-2-关于事件捕获和冒泡

关于事件捕获和冒泡 DOM事件流分为三个阶段&#xff1a;捕获阶段、目标阶段、冒泡阶段 点击目标元素后&#xff0c;不会马上触发目标元素&#xff0c;而是先执行事件捕获&#xff0c;从顶部逐步到目标元素&#xff1b;处于目标阶段的时候触发目标元素&#xff1b;最后冒泡阶段…

随机 Transformer

在这篇博客中&#xff0c;我们将通过一个端到端的示例来讲解 Transformer 模型中的数学原理。我们的目标是对模型的工作原理有一个良好的理解。为了使内容易于理解&#xff0c;我们会进行大量简化。我们将减少模型的维度&#xff0c;以便我们可以手动推理模型的计算过程。例如&…

CSS 3D三角彩色锥形旋转动画效果

<template><view class="pyramid-loader"><view class="wrapper"><span class="side side1"></span> <!-- 金字塔的一个面 --><span class="side side2"></span> <!-- 金字塔的…

基于stm32F4卷积神经网络手写数字识别项目

加我微信hezkz17 可以申请加入嵌入式人工智能技术研究开发交流答疑群&#xff0c;赠送企业嵌入式AI 图像理解/音/视频项目核心开发资料 1 采用CNN BP反向传播算法更新权重系数 2 原理解析 3 实现策略 训练与识别分离&#xff0c;先在电脑上训练好CNN BP神经网络的模型&#…

[Python] 什么是PCA降维技术以及scikit-learn中PCA类使用案例(图文教程,含详细代码)

什么是维度&#xff1f; 对于Numpy中数组来说&#xff0c;维度就是功能shape返回的结果&#xff0c;shape中返回了几个数字&#xff0c;就是几维。索引以外的数据&#xff0c;不分行列的叫一维&#xff08;此时shape返回唯一的维度上的数据个数&#xff09;&#xff0c;有行列…

Java数组-初识数组

签名&#xff1a;但行好事&#xff0c;莫问前程。 文章目录 前言一、数组的概述1、数组中的概念2、数组的特点 二、数组的声明与初始化1、先声明后初始化2、声明的同时直接初始化3、静态初始化数组4、动态初始化数组 三、数组的赋值与取值1、给数组的元素赋值2、遍历数组的元素…

【Midjourney】新手指南:命令

1./ask 向Midjourney提问&#xff0c;不过问题和回答都是英文的&#xff0c;例如&#xff1a; 2./blend 将两张图片合并为一张 ​ 3./describe 上传一张图片&#xff0c;Midjourney会生成四组该图片相关的关键词&#xff0c;可以使用这些关键词再生成图片。 ​ 4./turbo …

缓存之SpringCache整合redis(五)

SpringCache整合redis 一、引入pom二、配置1.springCache自动配置了redis2.配置yml3.开启缓存功能4.测试使用缓存5.缓存保存JSON格式 三、springCache的读写模式1.读模式2.写模式&#xff08;缓存和数据库一致性&#xff09; 一、引入pom <!--springCache依赖 --> <d…

在Meteor Lake上测试基于Stable Diffusion的AI应用

上个月刚刚推出的英特尔新一代Meteor Lake CPU&#xff0c;预示着AI PC的新时代到来。AI PC可以不依赖服务器直接在PC端处理AI推理工作负载&#xff0c;例如生成图像或转录音频。这些芯片的正式名称为Intel Core Ultra处理器&#xff0c;是首款配备专门用于处理人工智能任务的 …

Java EE 5 SDK架构

Java EE 5 SDK架构 大型组织每天都要处理大量数据和多用户的相关事务。为管理该组织如此大型而又复杂的系统,开发了企业应用程序。企业应用程序是在服务器上托管的应用程序,通过计算机网络同时向大量用户提供服务。这种应用程序可采用各种技术开发,如Java EE 5。Java EE 5平…

Git--07--GitExtension

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、GitExtension下载GitExtension官网下载教程 二、GitExtension安装三、GitExtension配置四、GitExtension使用 一、GitExtension下载 官网下载&#xff1a; http…

day38 ● 509. 斐波那契数 ● 70. 爬楼梯 ● 746. 使用最小花费爬楼梯

动态规划是前一个状态推导过来的&#xff0c;贪心是局部最优解。 class Solution { public:int fib(int n) {int a0;int b1;int res0;if(n1) return 1;for(int i2;i<n;i){resab;ab;bres;}return res;} }; 可以由前面状态推出后面状态&#xff0c;是动态规划。由于始终只要后…

【正点原子STM32】IWDG 独立看门狗(简介、工作原理、IWDG寄存器配置操作步骤、IWDG溢出时间计算、IWDG配置步骤、独立看门狗流程)

一、IWDG简介 IWDG有什么作用&#xff1f; 二、IWDG工作原理 三、IWDG框图 四、IWDG寄存器 键寄存器&#xff08;IWDG_KR&#xff09;预分频器寄存器 (IWDG_PR)重装载寄存器(IWDG_RLR) 状态寄存器(IWDG_SR) 寄存器配置操作步骤 五、IWDG溢出时间计算 IWDG溢出时间计算公式…