CSS 面试题 目录

如何实现一个三栏布局,两侧固定宽度,中间自适应(圣杯布局/双飞翼布局)?请写出至少两种实现方式。

推荐答案

方式一:圣杯布局

-- -------------------- ---- -------
--------- -----
------
------
-------------------
-------
---- -
    ---------- ------ -- ----------- --
-
---------- -
    ------------- ------
    -------------- ------
-
----- -
    ------ -----
    ------ -----
-
------------- -
    ------------ ------
    ------------- ------
    ----------------- ----------
-
----- -
    ------ -----
    ------ ------
    ------------ ------
    ----------------- -----------
    --------- ---------
    ----- -------
-
------ -
    ------ -----
    ------ ------
    ------------ -------
    ----------------- -----------
    --------- ---------
    ------ -------
-
---------------- -
    -------- ---
    -------- ------
    ------ -----
-
--------
-------
------
    ---- ---------------- ----------
        ---- -------------
            ---- ---------------------
                -------
            ------
        ------
        ---- -------------
           ------
        ------
        ---- --------------
            ------
        ------
    ------
-------
-------

方式二:双飞翼布局

-- -------------------- ---- -------
--------- -----
------
------
    --------------------
    -------
        ---- -
            ---------- ------ -- ----------- --
        -
        ---------- -
            ------ -----
            ------ -----
        -
        ----- -
            ------ -----
            ------ -----
        -
        ------------- -
            ------------ ------
            ------------- ------
            ----------------- ----------
        -
        ----- -
            ------ -----
            ------ ------
            ------------ ------
            ----------------- -----------
        -
        ------ -
            ------ -----
            ------ ------
            ------------ -------
            ----------------- -----------
        -
       ---------------- -
            -------- ---
            -------- ------
            ------ -----
        -
    --------
-------
------
    ---- ---------------- ----------
        ---- -------------
            ---- ---------------------
                -------
            ------
        ------
        ---- -------------
            ------
        ------
        ---- --------------
            ------
        ------
    ------
-------
-------

本题详细解读

圣杯布局

  1. 核心思想:使用 paddingmargin 来实现两侧固定宽度,中间自适应的效果。
  2. HTML结构
    • 一个包裹容器 .container
    • 三个子元素: .main (中间自适应内容)、 .left (左侧固定宽度)、 .right (右侧固定宽度)。 注意,这里的 HTML 结构,中间自适应内容必须在最前面,两侧的内容必须在中间内容之后。
  3. CSS样式
    • .container 设置左右 padding 值,留出左右侧边的空间,clearfix清除浮动。
    • .main 设置 float: leftwidth: 100%,使得宽度充满容器,并向左浮动。
    • .main-content 设置 margin-leftmargin-right,留出左右侧边栏的空间,中间内容自适应。
    • .left 设置 float: left 和固定 width,同时设置 margin-left: -100%,将其移到左侧,通过 position: relativeleft: -200px 定位到正确位置。
    • .right 设置 float: left 和固定 width,同时设置 margin-left-150px,将其移到右侧,通过 position: relativeright: -150px 定位到正确位置。
  4. 优点:结构清晰,兼容性好。
  5. 缺点:使用了 position: relative,稍微复杂。

双飞翼布局

  1. 核心思想:通过 margin 来实现两侧固定宽度,中间自适应的效果。
  2. HTML结构
    • 一个包裹容器 .container
    • 三个子元素: .main (中间自适应内容)、 .left (左侧固定宽度)、 .right (右侧固定宽度)。 注意,这里的 HTML 结构,中间自适应内容必须在最前面,两侧的内容必须在中间内容之后。
  3. CSS样式
    • .container 设置 width: 100% float:leftclearfix清除浮动。
    • .main 设置 float: leftwidth: 100%,使得宽度充满容器,并向左浮动。
    • .main-content 设置 margin-leftmargin-right,留出左右侧边栏的空间,中间内容自适应。
    • .left 设置 float: left 和固定 width,同时设置 margin-left: -100%,将其移到左侧。
    • .right 设置 float: left 和固定 width,同时设置 margin-left-150px,将其移到右侧。
  4. 优点:结构清晰,易于理解。
  5. 缺点:需要额外的 div .main-content来撑开主内容区域。

这两种布局方式都能够实现三栏布局,两侧固定宽度,中间自适应的效果,开发者可以根据实际情况选择合适的布局方式。双飞翼的结构更加容易理解,代码更简洁。

纠错
反馈