几种常见的CSS三栏布局?介绍下粘性布局(sticky)?自适应布局?左边宽度固定,右边自适应?两种以上方式实现已知或者未知宽度的垂直水平居中?

几种常见的CSS三栏布局

流体布局

效果:
请添加图片描述

参考代码:

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>流体布局</title>
  <style>
    .left {
      float: left;
      width: 100px;
      height: 200px;
      background: lightcoral;
    }

    .right {
      float: right;
      width: 200px;
      height: 200px;
      background: lightblue;
    }

    .main {
      margin-left: 120px;
      margin-right: 220px;
      height: 200px;
      background: lightgreen;
    }
  </style>
</head>

<body>
  <div class="container">
    <div class="left"></div>
    <div class="right"></div>
    <div class="main"></div>
  </div>
</body>

</html>

圣杯布局

效果:
请添加图片描述

参考代码:

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>圣杯布局</title>
  <style>
    .container {
      margin-left: 120px;
      margin-right: 220px;
    }

    .main {
      float: left;
      width: 100%;
      height: 300px;
      background: lightgreen;
    }

    .left {
      position: relative;
      left: -120px;
      float: left;
      height: 300px;
      width: 100px;
      margin-left: -100%;
      background: lightcoral;
    }

    .right {
      position: relative;
      right: -220px;
      float: right;
      height: 300px;
      width: 200px;
      margin-left: -200px;
      background: lightblue;
    }
  </style>
</head>

<body>
  <div class="container">
    <div class="main"></div>
    <div class="left"></div>
    <div class="right"></div>
  </div>
</body>

</html>

双飞翼布局

效果:
请添加图片描述

参考代码:

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>双飞翼布局</title>
  <style>
    .content {
      float: left;
      width: 100%;
    }

    .main {
      height: 200px;
      margin-left: 110px;
      margin-right: 220px;
      background: lightgreen;
    }

    .main::after {
      content: '';
      display: block;
      font-size: 0;
      height: 0;
      zoom: 1;
      clear: both;
    }

    .left {
      float: left;
      height: 200px;
      width: 100px;
      margin-left: -100%;
      background: lightcoral;
    }

    .right {
      float: right;
      height: 200px;
      width: 200px;
      margin-left: -200px;
      background: lightblue;
    }
  </style>
</head>

<body>
  <div class="content">
    <div class="main"></div>
  </div>
  <div class="left"></div>
  <div class="right"></div>
</body>

</html>

灵活布局(Flexbox)

效果:
请添加图片描述
代码参考:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>灵活布局(Flexbox)</title>
  <style>
    .container {
      display: flex;
    }
    .left, .right {
      flex: 0 0 200px; /* 不放大,不缩小,初始宽度 200px */
    }
    .left {
      background-color: lightblue;
    }
    .right {
      background-color: lightcoral;
    }
    .center {
      flex: 1; /* 自适应宽度 */
      background-color: lightgreen;
    }
  </style>
</head>
<body>
  <div class="container">
    <div class="left">Left</div>
    <div class="center">Center</div>
    <div class="right">Right</div>
  </div>
</body>
</html>

灵活布局:使用flex布局,设置display: flex,左右两栏flex: 0 0 200px,中间自适应。

定位布局

效果:
请添加图片描述
参考代码:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>定位布局 </title>
  <style>
    .container {
      position: relative;
      width: 100%;
    }
    .left, .right {
      position: absolute;
      width: 200px;
      top: 0;
      bottom: 0;
    }
    .left {
      left: 0;
      background-color: lightblue;
    }
    .right {
      right: 0;
      background-color: lightcoral;
    }
    .center {
      margin: 0 200px; /* 左右两栏宽度之和 */
      background-color: lightgreen;
    }
  </style>
</head>
<body>
  <div class="container">
    <div class="left">Left</div>
    <div class="right">Right</div>
    <div class="center">Center</div>
  </div>
</body>
</html>

定位布局:使用position属性,左右两栏设置为position: absolute,中间自适应。

Grid 布局

效果:
请添加图片描述
代码参考:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Grid 布局</title>
  <style>
    .container {
      display: grid;
      grid-template-columns: 200px auto 200px;
    }
    .left {
      background-color: lightblue;
    }
    .right {
      background-color: lightcoral;
    }
    .center {
      background-color: lightgreen;
    }
  </style>
</head>
<body>
  <div class="container">
    <div class="left">Left</div>
    <div class="center">Center</div>
    <div class="right">Right</div>
  </div>
</body>
</html>

使用 CSS Grid 属性,定义网格布局,可以轻松实现三栏布局。

介绍下粘性布局(sticky)

粘性布局(sticky)是 CSS3 中新增的一种定位方式。当一个元素被设置为 sticky 时,它会在页面滚动时保持在特定位置,直到滚动到指定的偏移值之后,此时元素将变成固定定位(fixed),并保持在屏幕上的位置。这样可以确保用户在浏览网页时能够轻松访问重要的导航或其他相关信息,提供更好的用户体验。

这里有几个要点需要注意:

  1. 文档流和定位影响:与 fixed 定位不同,sticky 元素并不脱离文档流,仍然保留元素原本在文档中的位置。

  2. 相对偏移计算:元素的固定位置是相对于离它最近的具有滚动功能的祖先元素计算的。如果没有滚动的祖先元素,那么偏移量将相对于视口(viewport)进行计算。

  3. 滚动过程中的行为:当页面滚动时,sticky 元素会固定在特定位置,直到滚动到指定的偏移值,然后它将变成固定定位。

自适应布局

自适应布局是指网页能够根据不同设备的屏幕尺寸和分辨率进行自动调整,以确保页面内容完整显示,而不会因为屏幕尺寸过小而导致出现滚动条。

在两栏布局中,常见的一种做法是将左侧栏设置为固定宽度,而右侧栏则会自动填充剩余空间。这可以通过以下方式实现:

  1. 将左侧栏使用浮动或者绝对定位固定在左侧,然后给右侧栏添加边距使其自动填充空间。
  2. 使用一个包裹性的 <div> 标签将两栏包裹起来,然后给右侧栏添加负边距来创建块级格式化上下文(BFC),从而实现两栏自动排列。
  3. 使用 CSS 弹性盒子布局(Flexbox),可以简单地实现一栏固定宽度,一栏自动填充的两栏布局。

以上是一些常见的自适应布局方法,但具体实现还需根据实际情况选择合适的技术方案。总的来说,自适应布局可以让网页内容能够自动适应不同屏幕,从而给用户带来更好的阅读体验。

左边宽度固定,右边自适应

左边固定宽度,右边自适应的布局可以通过使用 float 或者 Flexbox 来实现。左侧元素设置固定宽度,而右侧元素则会根据剩余空间自动调整宽度。

HTML结构如下:

<div class="outer">
  <div class="left">固定宽度</div>
  <div class="right">自适应宽度</div>
</div>

在外层 div(类名为 outer)中,有两个子 div,类名分别为 left 和 right。其中 left 为固定宽度,而 right 为自适应宽度。

以下是几种常见的实现方法:

方法1: 使用浮动

效果:
请添加图片描述
参考代码:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <style>
    .outer {
      width: 100%;
      height: 200px;
      background-color: yellow;
    }
    .left {
      width: 200px;
      height: 200px;
      background-color: red;
      float: left;
    }
    .right {
      height: 200px;
      background-color: blue;
      overflow: hidden; /* 清除浮动 */
    }
  </style>
</head>
<body>
  <div class="outer">
    <div class="left">固定宽度</div>
    <div class="right">自适应宽度</div>
  </div>
</body>
</html>

方法2: 使用绝对定位

效果:
请添加图片描述
参考代码:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <style>
    .outer {
      width: 100%;
      height: 200px;
      background-color: yellow;
      position: relative;
    }
    .left {
      width: 200px;
      height: 200px;
      background-color: red;
      position: absolute;
    }
    .right {
      height: 200px;
      background-color: blue;
      margin-left: 200px;
    }
  </style>
</head>
<body>
  <div class="outer">
    <div class="left">固定宽度</div>
    <div class="right">自适应宽度</div>
  </div>
</body>
</html>

方法3: 使用绝对定位和 margin

效果:
请添加图片描述
参考代码:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <style>
    .outer {
      width: 100%;
      height: 200px;
      background-color: yellow;
      position: relative;
    }
    .left {
      width: 200px;
      height: 200px;
      background-color: red;
      position: absolute;
    }
    .right {
      height: 200px;
      background-color: blue;
      margin-left: 200px;
    }
  </style>
</head>
<body>
  <div class="outer">
    <div class="left">固定宽度</div>
    <div class="right">自适应宽度</div>
  </div>
</body>
</html>

方法4: 使用Flexbox布局

效果:
请添加图片描述
参考代码:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <style>
    .outer {
      width: 100%;
      height: 200px;
      background-color: yellow;
      display: flex;
    }
    .left {
      width: 200px;
      height: 200px;
      background-color: red;
    }
    .right {
      height: 200px;
      background-color: blue;
      flex: 1;
    }
  </style>
</head>
<body>
  <div class="outer">
    <div class="left">固定宽度</div>
    <div class="right">自适应宽度</div>
  </div>
</body>
</html>

这四种方法的优缺点:

方法1: 使用浮动

  • 优点: 浏览器兼容性较好,适用于较为古老的浏览器。
  • 缺点: 需要清除浮动以避免影响其他元素布局,可能导致一些意外的显示问题。

方法2: 使用绝对定位

  • 优点: 可以精确地控制元素的位置,适合一些特定的布局需求。
  • 缺点: 如果页面结构发生变化,需要手动调整绝对定位元素的位置,不够灵活。

方法3: 使用绝对定位和 margin

  • 优点: 具有一定的灵活性,可以在保持左侧固定宽度的同时让右侧自适应。
  • 缺点: 当页面结构复杂时,可能需要更多的调整来确保布局的稳定性。

方法4: 使用Flexbox布局

  • 优点: 简单、直观,能够轻松实现左右布局,且支持响应式设计。
  • 缺点: 对于一些较老版本的浏览器支持不够完善,需要额外处理兼容问题。

两种以上方式实现已知或者未知宽度的垂直水平居中

已知宽度的垂直水平居中、未知宽度的垂直水平居中(使用 Flexbox 布局)和未知宽度的垂直水平居中(使用表格布局)

效果:
请添加图片描述

以下HTML 文件,包括已知宽度和未知宽度的垂直水平居中效果的示例:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <style>
    /* 已知宽度的垂直水平居中 */
    .wrapper {
      position: relative;
      width: 200px; /* 假设容器宽度为 200px */
      height: 200px; /* 假设容器高度为 200px */
      background-color: #f0f0f0;
    }

    .box {
      position: absolute;
      top: 50%;
      left: 50%;
      width: 100px;
      height: 100px;
      margin-top: -50px; /* 将上边距设为自身高度的一半 */
      margin-left: -50px; /* 将左边距设为自身宽度的一半 */
      background-color: #ff0000;
      text-align: center;
      line-height: 100px;
    }

    /* 未知宽度的垂直水平居中 - Flexbox 布局 */
    .wrapper-flex {
      display: flex;
      justify-content: center;
      align-items: center;
      width: 300px; /* 假设容器宽度为 300px */
      height: 200px; /* 假设容器高度为 200px */
      background-color: #f0f0f0;
    }

    .box-flex {
      background-color: #00ff00;
      padding: 10px;
    }

    /* 未知宽度的垂直水平居中 - 表格布局 */
    .wrapper-table {
      display: table;
      width: 100%;
      height: 200px; /* 假设容器高度为 200px */
      background-color: #f0f0f0;
    }

    .box-table {
      display: table-cell;
      text-align: center;
      vertical-align: middle;
      background-color: #0000ff;
    }
  </style>
  <title>垂直水平居中示例</title>
</head>
<body>
  <h2>已知宽度的垂直水平居中</h2>
  <div class="wrapper">
    <div class="box">已知宽度</div>
  </div>

  <h2>未知宽度的垂直水平居中 - Flexbox 布局</h2>
  <div class="wrapper-flex">
    <div class="box-flex">未知宽度 - Flexbox</div>
  </div>

  <h2>未知宽度的垂直水平居中 - 表格布局</h2>
  <div class="wrapper-table">
    <div class="box-table">未知宽度 - 表格布局</div>
  </div>
</body>
</html>

说出 space-between 和 space-around 的区别?

space-betweenspace-aroundFlexbox 布局中的两种对齐方式,它们的区别在于间距的分配方式。

space-between:这个值会使得项目沿着主轴均匀分布,并且首个元素位于起始位置,末尾元素位于结束位置,中间的元素则平均分布在主轴上,没有额外的空白间隔。

space-around:该值会使得项目沿着主轴均匀分布,并且在每个项目周围均匀留有相等的空白空间,使得项目之间和项目与容器边界之间的空白空间大小相等。

这两种对齐方式的主要区别在于 space-around 在每个项目周围均匀留有空白空间,而 space-between 则只在首尾没有额外的空白空间。

持续学习总结记录中,回顾一下上面的内容:
几种常见的CSS三栏布局?介绍下粘性布局(sticky)?自适应布局?左边宽度固定,右边自适应?两种以上方式实现已知或者未知宽度的垂直水平居中?

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Vue3 使用 Teleport 封装 一个 Dialog

文章目录 什么是Teleport ?用法:1. 通过 to 指定传送的位置2. 禁用 teleport3. 共享一个 Teleport封装一个Dialog效果:什么是Teleport ? 是一个内置组件,它可以将一个组件内部的一部分模板“传送”到该组件的 DOM 结构外层的位置去。 简单的说,Telep

网络协议

一、 网络协议 1.1 网络模型 1.1.1 OSI七层模型 开放系统互联参考模型&#xff08;Open System Interconnect&#xff09;是国际标准化组织&#xff08;ISO&#xff09;制订的一个用于计算机或通信系统间互联的标准体系。采用七层结构&#xff0c;自下而上依次为&#xff1a;…

pytest安装失败,报错Could not find a version that satisfies the requirement pytest

问题 安装pytest失败&#xff0c;尝试使用的命令有 pip install pytest pip3 install pytest pip install -U pytest pip install pytest -i https://pypi.tuna.tsinghua.edu.cn/simple但是都会报同样的错&#xff1a; 解决方案 发现可能是挂了梯子的原因&#xff0c;关掉…

听GPT 讲Rust源代码--compiler(15)

File: rust/compiler/rustc_arena/src/lib.rs 在Rust源代码中&#xff0c;rustc_arena/src/lib.rs文件定义了TypedArena&#xff0c;ArenaChunk&#xff0c;DroplessArena和Arena结构体&#xff0c;以及一些与内存分配和容器操作相关的函数。 cold_path<F: FnOnce,drop,new,…

Simply简洁博客主题源码 | EmlogPro主题模版

Simply是一款简约风格的Emlog博客模板&#xff0c;响应式布局、界面简单大方&#xff0c;实用性强&#xff01; 支持夜间模式&#xff0c;采用localStorage存储配置。IOS系统下支持随系统自动切换浅/深色模式。 文章页支持显示文章字数及阅读时间。 支持http/https 响应式主…

计算机进入BIOS - Win/Linux

计算机进入BIOS - Win/Linux 快捷键方法&#xff08;通用&#xff09;Win系统方法Linux系统方法 快捷键方法&#xff08;通用&#xff09; 此方法为通用方法&#xff0c;适用于任何型号的计算机&#xff0c;包括台式机和笔记本&#xff0c;也包括Win系统和Linux系统。 进入BI…

package-info.java delete

package-info.java delete

解决Gitee每次push都需要输入用户名和密码

其实很简单&#xff0c;只需要使用命令 git config --global credential.helper store 在你下次push时只需要再输入一次用户名和密码&#xff0c;电脑就会保存下来&#xff0c;之后就无需进行输入了。

宏基因组序列分析工具EukRep

文章&#xff1a;Genome-reconstruction for eukaryotes from complex natural microbial communities | bioRxiv 仓库&#xff1a;patrickwest/EukRep: Classification of Eukaryotic and Prokaryotic sequences from metagenomic datasets (github.com) 推荐使用conda进行安…

揭开 JavaScript 作用域的神秘面纱(上)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

Mac 安装Nginx教程

Nginx官网 Nginx官网英文 1.在终端输入brew search nginx 命令检查nginx是否安装了 2. 安装命令&#xff1a;brew install nginx 3. 查看Nginx信息命令brew info nginx 4. 启动 nginx方式&#xff1a;在终端里输入 nginx 5.查看 nginx 是否启动成功 在浏览器中访问http://l…

通过使用别名让 SQL 更简短-数据库教程shulanxt.com-帆软软件有限公司

MySQL视频教程导航 https://www.shulanxt.com/database/mysqlvideo/p1 SQL 别名 SQL 别名 通过使用 SQL&#xff0c;可以为表名称或列名称指定别名。 基本上&#xff0c;创建别名是为了让列名称的可读性更强。 列的 SQL 别名语法 SELECT column_name AS alias_name FROM …

【java】期末复习知识点

简单不先于复杂&#xff0c;而是在复杂之后。 文章目录 填空题封装包主类开发过程的改变interfaceabstract class访问控制关键字继承多态object 类Java I/O(输入/输出)异常线程和进程创建线程的两种基本方法 编程题Hello World编写Swing程序&#xff0c;显示一个空白窗口 填空题…

Huggy Lingo: 利用机器学习改进 Hugging Face Hub 上的语言元数据

太长不看版: Hub 上有不少数据集没有语言元数据&#xff0c;我们用机器学习来检测其语言&#xff0c;并使用 librarian-bots 自动向这些数据集提 PR 以添加其语言元数据。 Hugging Face Hub 已成为社区共享机器学习模型、数据集以及应用的存储库。随着 Hub 上的数据集越来越多&…

【AI视野·今日Sound 声学论文速览 第三十八期】Mon, 1 Jan 2024

AI视野今日CS.Sound 声学论文速览 Mon, 1 Jan 2024 Totally 5 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Sound Papers The Arrow of Time in Music -- Revisiting the Temporal Structure of Music with Distinguishability and Unique Orientability as the …

案例093:基于微信小程序的南宁周边乡村游设计与实现

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…

【CMake】1. VSCode 开发环境安装与运行

CMake 示例工程代码 https://github.com/LABELNET/cmake-simple 插件 使用 VSCode 开发C项目&#xff0c;安装 CMake 插件 CMakeCMake ToolsCMake Language Support &#xff08;建议&#xff0c;语法提示) 1. 配置 CMake Language Support , Windows 配置 donet 环境 这…

nginx连接数和性能优化

目录 一&#xff1a;介绍 二&#xff1a;优化配置 三&#xff1a;其他优化策略 一&#xff1a;介绍 Nginx是一个高性能的HTTP和反向代理服务器&#xff0c;具有许多用于优化连接数和性能的配置选项。以下是一些关键的配置和优化建议&#xff1a; 1&#xff1a;worker_proc…

Fast DDS 官方--C++ API Reference

Fast DDS 官方--C API Reference 1 介绍2 接口2.1 DDS DCPS PIM2.1.1 Core2.1.1.1 Entity 【基类】2.1.1.2 DomainEntity2.1.1.3 Policy 【枚举】2.1.1.3.1 DataRepresentationId2.1.1.3.2 DataRepresentationQosPolicy2.1.1.3.3 DataSharingQosPolicy2.1.1.3.4 DataSharingKin…

Spark MLlib简介与机器学习流程

在大数据领域&#xff0c;机器学习是一个关键的应用领域&#xff0c;可以用于从海量数据中提取有价值的信息和模式。Apache Spark MLlib是一个强大的机器学习库&#xff0c;可以在分布式大数据处理环境中进行机器学习任务。本文将深入介绍Spark MLlib的基本概念、机器学习流程以…