经典面试布局

本文介绍了圣杯布局和双飞翼布局两种经典的三栏网页布局方式,它们都通过负margin实现自适应,但HTML结构和腾位策略有所不同。圣杯布局用padding避免内容被两侧固定栏遮挡,而双飞翼布局则通过main-content的margin调整。了解这两种布局有助于提升前端开发面试准备。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

介绍两个经典布局:
一、圣杯布局和双飞翼布局
简单介绍一下:这两种布局作为经典的三栏式布局是面试中的常客。两种布局都是两边两栏宽度固定,中间栏宽度自适应。 在HTML结构上中间栏在最前面保证了最先渲染中间提升性能(因为这两种布局都比较老,在现在浏览器中这点性能优化效果并不是很大),并且兼容性良好。两种布局的实现方法前半部分相同,后半部分的实现各有利弊,下面详细介绍一下两者的区别:
二、圣杯布局
首先,既然是三栏式布局我们需要3个div:

    <header>圣杯布局</header>
    <div class="bd">
        <div class="main text">
            main
        </div>
        <div class="left text">
            left
        </div>
        <div class="right text">
            right
        </div>
    </div>
    <footer>footer</footer>

给main设置width:100%,让它始终占满窗口,这样才有自适应的效果。
然后再给它加上点样式区分,效果如下:

在这里插入图片描述
为了形成在一行三栏布局,给三个方块都加上浮动float:left(注意清除浮动,因为浮动回导致父元素高度塌陷)
在这里插入图片描述
接着我们要把三个方块拉到一行,这里要利用负margin的技巧。

  • -left要放到main的左边,设置margin-left: -100%,因为margin的百分比是相对与父元素的,所以需要整整一行的宽度才能补偿这个margin的值,所以left就能到main的左边。

  • 接着让right到main的右边,只需要设置margin-left的值为负的right的宽,比如margin-left:
    -200px;,正好使main重叠right的宽度,因为设置了浮动所以right就会到main的右边了。
    下面我们来看一下效果:
    在这里插入图片描述
    虽然已经达到了效果,但是其实我们给两个方块变透明,再给中间加点内容看看是这样的:
    在这里插入图片描述
    可见,由于三个方块都设置了浮动,脱离的文档流,两边固定宽度的两栏会挡住我们的内容。
    因此,我们需要中间栏给两边的位置腾出来。我们可以设置paddingmargin都可以用来腾位置,这两个属性分别就是圣杯布局和双飞翼布局的区别,不过双飞翼布局还需要稍微的改造一下HTML的结构。
    圣杯布局——使用的是padding属性给两边的固定宽度的两栏腾位置。( padding: 0 200px 0 200px

  • 第一步:为三个元素的父元素加上padding属性,腾开位置
    在这里插入图片描述

  • 第二步:由于腾开位置后会产生空白,所以使用position: relative;属性来移动左右两栏,这样就不会遮挡了。这样我们需要的圣杯布局就显示出来了,如下:
    在这里插入图片描述
    注意事项:有一个最小宽度,当页面小于最小宽度时布局就会乱掉。所以最好给body 设置一个min-with。整个min-with是计算出来的。就是left-width*2+right-width。简单来说就是:“由于设置了相对定位,所以当left原来的位置和right的位置产生重叠时,由于浮动的原因一行放不下就会换行”。所以布局就被打乱了,但是使用双飞翼布局就可以避免这个问题。
    三、双飞翼布局—使用margin属性
    首先我们需要对HTML结构进行更改:

<header>双飞翼布局</header>
    <div class="bd">
        <div class="main text">
            <div class="main-content">main</div>
        </div>
        <div class="left text">
            left
        </div>
        <div class="right text">
            right
        </div>
    </div>
<footer>footer</footer>

在main里面又加了一个内容层,如果知道盒子模型,就知道我们是不能直接给main添加margin属性,因为我们已经设置了width:100%,再设置margin的话就会超过窗口的宽度,所以我们再创造一个内容层,将所有要显示的内容放到了main-content中,给main-content设置margin就可以了。
为了不改变父元素,所以只需要给main-content设置margin: 0 200px 0 200px 属性就可以达到效果。
两种布局的区别:
两者都是通过设置负margin来实现元素的排布,

  • 不同的是html结构,双飞翼是在main设置一个main-content并设置它的左右margin,而圣杯布局设置的是bd的padding,来排除两边元素的覆盖。
  • 双飞翼布局可以多了一个html结构,但是可以不用设置left,right元素的定位。

在这里插入图片描述圣杯布局是中间栏为两边腾开位置。在这里插入图片描述
双飞翼布局则是中间栏不变,将内容部分分别为两边腾开。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值