对于三栏布局,你知道多少?

网页设计给了用户不一样的全新浏览体验,好比规划一座城市、设计一片公园...我们可以尽情地在这片空间释放我们的奇思妙想,用户良好的体验反馈是我们最大的满足与认可。三栏布局,作为一种经典实用的布局方式,在很多网站有着它的使用,同时,也是面试中经典的考题。

三栏布局的实现方式

最简单的'三栏布局'

实现三栏布局,我们首先就是要规划出三个区域出来,并且横向摆放在页面上。

我们可以很轻松的将三块区域划分出来,但是如何让他们横向排列呢?如果不使用浮动等布局呢? 答案自然是可以的。 要将三个块级元素转换成行内块级元素。我们只需要在父容器中设置display: inline-block;各位可以试一试。

  • 元素会在同一行内显示,但宽高却不能设置了。
  • 元素之间会有默认的空白间距,这是由于代码的换行会读取换行符号当做空字符通常需要用font-size: 0;letter-spacing: -1px;覆盖默认的空白间距。同时在page下的div中设置字体大小,就会显示文字了。

在浏览器中,我们需要优先加载主要内容,如果我们将content放在第一行,就无法实现我们想要的优先加载了。

圣杯布局

我们可以用浮动布局来完成。当主要内容并不在中间呢,我们如何将两个广告位放置在主要内容的一左一右呢?

css 复制代码
.page{
            height: 200px;
            padding:0 200px;
        }
        .left,.right{
            height: 200px;
            width: 200px;
            background: #406e91;
        }
        .content{
            height: 200px;
            width: 100%;
            background: #7f575b;
        }
        .page div{
            float: left;
            border: 1px solid #5d3232;
        }
        
<div class="page">
         //这里将content优先加载
        <div class="content">主要内容</div>
        <div class="left">广告位</div>
        <div class="right">广告位</div>
    </div>

我们可以将主要内容占满容器的宽度 并为容器设置内边距来放置左右两边的内容

那么问题来了 如果都已经占满了容器 左右势必会被挤出容器的。但是总是保证自己的顶部和上一个元素的底部对齐。

因为设置了浮动属性,我们也就能使用margin- 来控制它们的位置

他们虽然被挤下去了,但他们实际位置应该在content后面的,由于放置不下才被挤下去,我们可以认为找了个地缝钻进去了 。 我们可以用margin-leftmargin-right把他们揪出来。

css 复制代码
.left{
            margin-left: -200px;//向左移
            position: relative;
            left:-100%
        }
        .right{
            margin-right: -200px;
        }

这里为什么要用margin呢?

  • 负的margin-left:将元素向左移动,这在需要将元素部分或完全从其正常流中向左偏移时非常有用。
  • 正的margin-left:将元素向右移动,增加其与前一个元素或父容器左边界的距离。

双飞翼布局

主要依赖于 CSS 的浮动和负边距技术来实现,其目的是使得内容主体能够优先加载并放置在文档流的前面,从而使得搜索引擎更容易获取到内容。

css 复制代码
    * {                             .page {
          margin: 0;                       height: 200px;
          padding: 0;                     }
      }
     .left,
     .right {                       .content {
            width: 200px;                     height: 200px;     
            height: 200px;                    background: #966f73;
            background: #2f9dd0;              width: 100%;
                                            }
        }
                                        /* 这里的div是page下的所有div */
        .inner {                    .page>div {
            margin: 0 20px;                       float: left;
        }                                      }
     
    <div class="page">
        <div class="content">
            <div class="inner">主要内容</div>
        </div>
        <div class="left">广告位</div>
        <div class="right">广告位</div>
    </div>

那么各位 我们现在知道如何去将广告位放在左右两边了么?

sql 复制代码
        //向左移动父容器的宽度
        .left {
            margin-left: -100%;
        }
       //当.left 向左移动后 由于浮动 .right会移动到前者移动前的位置
       //此时再向左移动 则回到父容器
        .right {
            margin-left: -200px;
        }

那么这里为何不用margin-right 正值呢? 这是因为右边没有元素 并且也不适合用margin-right

Flex 布局

相信大家是有点晕,为啥要这么大费周折呢? 当然,Flex布局能够更快更易于理解地实现

oder属性

怎么这么像点餐

当然 你可以这么理解

在 Flexbox 布局中,order 属性用于改变项目的排列顺序。默认情况下,所有项目的 order 值都是 0,但你可以通过设置不同的 order 值来调整项目在容器中的显示顺序。order 属性可以是正数、负数或者零。数值越小,项目越靠前显示。

  1. 默认值 :每个 flex 项目的默认 order 值是 0
  2. 负数值 :负数 order 值会使项目排在那些 order 值为 0 或正数的项目之前。
  3. 相同的 order :如果多个项目有相同的 order 值,它们将按照它们在源文档中的顺序显示。

使用 order 属性,可以轻松调整项目的显示顺序,而无需改变 HTML 的结构。这对于创建响应式布局特别有用,可以在不同的屏幕尺寸下动态调整项目的排列顺序。

Flex三栏布局,就留给各位了,相信脑子里早已跃出答案了吧~

CSS Grid

CSS Grid 是一种非常强大的布局工具,使用二维网格系统可以同时处理行和列,拥有强大的灵活性和控制力。

基本语法

创建网格容器

css 复制代码
css
复制代码
.container {
    display: grid;
}

定义网格轨道

使用 grid-template-columnsgrid-template-rows 定义列和行。

css 复制代码
.container {
    display: grid;
    grid-template-columns: 100px 200px auto;
    grid-template-rows: 100px 200px auto;
}

这将创建一个三列三行的网格,列宽分别为 100px, 200px 和自动适应,行高分别为 100px, 200px 和自动适应。

放置网格项目

css 复制代码
.item1 {
    grid-column: 1 / 3; /* 从第1列开始到第3列结束 */
    grid-row: 1 / 2; /* 从第1行开始到第2行结束 */
}

关键属性

网格模板区域

你可以使用 grid-template-areas 属性定义布局区域。

css 复制代码
.container {
    display: grid;
    grid-template-areas: 
        "header header header"
        "sidebar main main"
        "footer footer footer";
    grid-template-rows: 50px 1fr 50px;
    grid-template-columns: 150px 1fr;
}

.header { grid-area: header; }
.sidebar { grid-area: sidebar; }
.main { grid-area: main; }
.footer { grid-area: footer; }

间隙 (Gap)

使用 grid-gapgrid-row-gapgrid-column-gap 来设置行和列之间的间距。

css 复制代码
.container {
    display: grid;
    grid-template-columns: 1fr 1fr 1fr;
    grid-template-rows: auto;
    grid-gap: 10px; /* 行和列之间的间距 */
}

自动放置 (Auto-Placement)

你可以使用 grid-auto-rowsgrid-auto-columns 来自动生成额外的行和列。

css 复制代码
.container {
    display: grid;
    grid-template-columns: 100px 100px;
    grid-auto-rows: 50px; /* 额外行的高度 */
}

三栏布局虽然是一个简单的布局格式,但也深藏着很多学问,除了以上几种方法,也还有其他方法可以实现,欢迎一起讨论!

相关推荐
崔庆才丨静觅4 小时前
hCaptcha 验证码图像识别 API 对接教程
前端
passerby60615 小时前
完成前端时间处理的另一块版图
前端·github·web components
掘了5 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
崔庆才丨静觅5 小时前
实用免费的 Short URL 短链接 API 对接说明
前端
崔庆才丨静觅6 小时前
5分钟快速搭建 AI 平台并用它赚钱!
前端
崔庆才丨静觅6 小时前
比官方便宜一半以上!Midjourney API 申请及使用
前端
Moment6 小时前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端
崔庆才丨静觅6 小时前
刷屏全网的“nano-banana”API接入指南!0.1元/张量产高清创意图,开发者必藏
前端
剪刀石头布啊6 小时前
jwt介绍
前端
爱敲代码的小鱼7 小时前
AJAX(异步交互的技术来实现从服务端中获取数据):
前端·javascript·ajax