当前位置: 首页 > article >正文

CSS 实现 两栏布局、三栏布局,以及常见的水平居中的方法

CSS 常见的页面布局

      • 两栏布局
        • 方式一:浮动
        • 方式二:浮动
        • 方式三:flex 布局
        • 方式四:利用定位
        • 方式五;利用定位
      • 三栏布局
        • 方式一:flex 布局
        • 方式二:定位
        • 方式三:浮动
        • 圣杯布局
        • 双飞翼布局
      • 常见的水平居中方法
        • 固定宽高
        • 未知元素宽高

两栏布局

一般两栏布局指的是:左边一栏宽度固定,右边一栏宽度自适应。

<div class="container">
  <div class="left">固定</div>
  <div class="right">自适应</div>
</div>
方式一:浮动

左边浮动,右边 marigin-left

  • 左边:元素宽度设置为 200px,并向左浮动。
  • 右边:元素的 margin-left 设置为 200px(避免重叠),宽度设置为 auto(默认为 auto,撑满整个父元素)。
.left {
  float: left;
  width: 200px;
}

.right {
  margin-left: 200px;
  width: auto;
}
方式二:浮动

左边浮动,右边 overflow: hidden; 触发BFC

  • 左边:元素设置固定大小,并向左浮动,
  • 右边:元素设置 overflow: hidden; 这样右边就触发了 BFC,BFC 的区域不会与浮动元素发生重叠。
.left{
  float: left;
  width: 100px;
 }

 .right{
  overflow: hidden;
 }
方式三:flex 布局

父元素利用 flex 布局,左边固定宽度,右边 flex:1。

.container {
  display: flex;
}
.left {
  width: 200px;
}
.right {
  flex: 1;
}
方式四:利用定位

父元素相对定位,左边绝对定位+固定宽度,右边 margin-left

.container {
  position: relative;
}
.left {
  position: absolute;
  width: 200px;
}
.right {
  margin-left: 200px;
}
方式五;利用定位

父元素相对定位,左边固定宽度,右边绝对定位,left 定位为固定值,其余方向为0

.container{
  position: relative;
}
.left{
  width: 200px;
}
.right{
  position: absolute;
  top: 0;
  bottom: 0;
  right: 0;
  left: 200px;
}

三栏布局

三栏布局一般指的:左右两栏宽度固定,中间自适应的布局。

<div class="container">
  <div class="left">left 固定</div>
  <div class="center">center 自适应</div>
  <div class="right">right 固定</div>
</div>
方式一:flex 布局

利用 flex 布局,左右两栏设置固定大小,中间一栏设置为 flex:1。

.container {
  display: flex;
}

.left {
  width: 100px;
  background: tomato;
}

.right {
  width: 200px;
  background: gold;
}

.center {
  flex: 1;
  background: lightgreen;
}
方式二:定位

父元素相对定位
左右两栏设置为绝对定位,
中间设置对应方向大小的 margin 的值。

.container {
  position: relative;
}

.left {
  position: absolute;
  width: 100px;
  background: tomato;
}

.right {
  position: absolute;
  top: 0;
  right: 0;
  width: 200px;
  background: gold;
}

.center {
  margin-left: 100px;
  margin-right: 200px;
  background: lightgreen;
}
方式三:浮动

利用浮动,
左右两栏设置固定大小,并设置对应方向的浮动。
中间一栏设置左右两个方向的 margin 值,注意这种方式**,中间一栏必须放到最后**

<div class="container">
  <div class="left">left</div>
  <div class="right">right</div>
  <div class="center">center 中间一栏必须放到最后</div>
</div>
.left {
  float: left;
  width: 100px;
  background: tomato;
}

.right {
  float: right;
  width: 200px;
  background: gold;
}

.center {
  margin-left: 100px;
  margin-right: 200px;
  background: lightgreen;
}
圣杯布局

圣杯布局,原理是利用父级内边距实现的。

父级元素设置左右的 padding,三列均设置向左浮动,
中间一列放在最前面,宽度设置为父级元素的宽度,
因此后面两列都被挤到了下一行,通过设置 margin 负值将其移动到上一行,再利用相对定位,定位到两边。

<div class="container">
  <div class="center">center</div>
  <div class="left">left</div>
  <div class="right">right</div>
</div>

.container {
  display: flex;
}

.center {
  flex: 1;
}

.left {
  flex: 0 0 200px;
}

.right {
  flex: 0 0 200px;
}
双飞翼布局

原理是,自身 margin 外边距实现的。

双飞翼布局是圣杯布局的优化版,由淘宝UED提出。
左右位置的保留是通过中间列的 margin 值来实现的,本质上来说,也是通过浮动和外边距负值来实现的。

<div class="container">
  <div class="main-content">
    <div class="inner-content">Main Content</div>
  </div>
  <div class="left-sidebar">Left Sidebar</div>
  <div class="right-sidebar">Right Sidebar</div>
</div>
.container {
  overflow: hidden;
}

.main-content {
  float: left;
  width: 100%;
}

.inner-content {
  margin: 0 200px; /* 左右两侧栏的宽度 */
}

.left-sidebar {
  float: left;
  width: 200px;
  margin-left: -100%;
  position: relative;
  left: -200px;
}

.right-sidebar {
  float: left;
  width: 200px;
  margin-left: -200px;
}

常见的水平居中方法

主要分为两大类:固定宽高的元素和不需要固定宽高的元素。

固定宽高

方法1:position + margin 负值

由于子元素绝对定位且 top 与 left 都平移了50%,此时元素的左上角在正中心。
因此还需要使用 margin 设置宽高的二分之一,从而达到子元素在父元素中占据垂直居中的位置。

.child {
    width: 200px;
    height: 200px;
    background-color: pink;
  
    position: absolute; /* 父元素需要相对定位 */
    top: 50%;
    left: 50%;
    margin-top: -100px; /* 设为高度的1/2 */
    margin-left: -100px; /* 设为宽度的1/2 */
}

方法2:position + margin: auto + 四个定位属性都为0

如果没有不设置宽度,将会撑满

.child {
    width: 200px;
    height: 200px;
    background-color: cornflowerblue;
  
    position: absolute; /* 父元素需要相对定位 */
    margin: auto; /* 关键一步,不可缺少 */
    left: 0; /* 让四个定位属性都为0 */
    top: 0;
    right: 0;
    bottom: 0;
}
未知元素宽高

方法1:设置元素相对父级定位,方式兼容性好,被广泛使用的一种方式。

.child {
    width: 200px;
    height: 200px;
    background-color: pink;
  
    position: absolute; /* 父元素需要相对定位 */
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%); /* 在水平和垂直方向上各偏移 -50=% */
}

方法2:flex 布局居中

垂直居中一个img 简便

#parent {
    width: 300px;
    height: 300px;
    background-color: cornflowerblue;
  
    display: flex; /* 设置外层盒子display为flex */
    align-items: center; /* 设置内层盒子的垂直居中 */
    justify-child: center; /* 设置内层盒子的水平居中 */
}


http://www.kler.cn/a/284395.html

相关文章:

  • [DEBUG] 服务器 CORS 已经允许所有源,仍然有 304 的跨域问题
  • acwing算法基础02一高精度,前缀和,差分
  • 【R78/G15 开发板测评】串口打印 DHT11 温湿度传感器、DS18B20 温度传感器数据,LabVIEW 上位机绘制演化曲线
  • [运维][Nginx]Nginx学习(1/5)--Nginx基础
  • 【算法】——二分查找合集
  • flink sql + kafka + mysql 如何构建实时数仓
  • C++实现堆排序
  • 电脑丢失dll文件一键修复之dll确实损坏影响电脑运行
  • Ubuntu下安装和配置MQTT服务器Mosquitto
  • hdfs dn锁拆分
  • 【记忆回溯】【深度搜索】【动态规划】【字符串】【力扣】单词拆分
  • Hive SQL 练习
  • 2024 年的 Web3 游戏:演变、趋势和市场动态
  • 【云游戏】点量云流赋能大型游戏新体验
  • MP条件构造器之常用功能详解(or、and、exists、notExists)
  • 【机器学习】9. softmax(Multinomial Logistic Regression)
  • SQL数据库教案(入门必备)
  • 【C++ 第十六章】哈希
  • C# 弹出USB移动存储设备【附源码】
  • 假如我是前端面试官
  • 解决移动端使用Vant van-overlay 遮罩层导致的弹窗不可滚动问题
  • Linux 非root用户部署elasticsearch 7.17.23和ik分词器
  • cnocr 安装
  • 华为云征文|Flexus云服务器搭建基础环境
  • 聚合函数的艺术:SQL中的SUM、AVG、MAX、MIN深度解析
  • JavaScript在网页设计