美文网首页基础前端前端前端
面试常见 CSS 布局方式

面试常见 CSS 布局方式

作者: CondorHero | 来源:发表于2019-11-09 22:06 被阅读0次

前几天面试去做面试题的时候,遇见几次让手写三栏布局(两边固定,中间自适应),其中一家还让给出不止一种,在加上我对圣杯布局和双飞翼布局一直傻傻分不清楚。索性来梳理一下,下次去面试就能侃侃而谈~

开始:

一、单列布局
1. 单列等宽布局
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>单列布局</title>
    <style>
        .container{
            max-width: 980px;
            margin: 0 auto;
        }
        .header{
            height: 50px;
            background-color: #493;
        }
        .main{
            height: 500px;
            background-color: #438;
        }
        .footer{
            height: 30px;
            background-color: #5e3;
        }
    </style>
</head>
<body>
    <h3>单列等宽布局</h3>
    <div class="container">
        <div class="header">头部</div>
        <div class="main">主体</div>
        <div class="footer">底部</div>
    </div>
</body>
</html>
2. 单列固定布局(常见的版心布局)
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>单列固定布局</title>
    <style>
        .inner{
            max-width: 980px;
            margin: 0 auto;
        }
        .header{
            height: 50px;
            background-color: #493;
        }
        .main{
            height: 500px;
            background-color: #438;
        }
        .footer{
            height: 30px;
            background-color: #5e3;
        }
    </style>
</head>
<body>
    <h3>单列固定布局</h3>
    <div class="header">
        <div class="inner">头部</div>
    </div>
    <div class="main">
        <div class="inner">主体</div>
    </div>
    <div class="footer">
        <div class="inner">底部</div>
    </div>
</body>
</html>
二、两列布局

两列布局采用浮动的方式一定的注意两点:

  1. 浮动元素要在主体内容之前
  2. margin-leftmargin-right 的值一定要大于固定盒子宽。
1. 两列布局左侧固定右侧自适应
两列布局_左侧固定_右侧自适应
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>两列布局_左侧固定_右侧自适应</title>
    <style>
        .left{
            float: left;
            width: 200px;
            height: 500px;
            background-color: #493;
        }
        .main{
            height: 500px;
            margin-left: 210px;
            background-color: #438;
        }
    </style>
</head>
<body>
    <h3>两列布局_左侧固定_右侧自适应</h3>
    <div class="left">左侧</div><!--注意左侧一定的在主体之前-->
    <div class="main">右侧主体</div>
</body>
</html>
2. 两列布局右侧固定左侧自适应
两列布局_右侧固定_左侧自适应
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>两列布局_右侧固定_左侧自适应</title>
    <style>
        .right{
            float: right;
            width: 200px;
            height: 500px;
            background-color: #963;
        }
        .main{
            height: 500px;
            margin-right: 210px;
            background-color: skyblue;
        }
    </style>
</head>
<body>
    <h3>两列布局_右侧固定_左侧自适应</h3>
    <div class="right">右侧</div><!--注意右侧一定的在主体之前-->
    <div class="main">主体左侧</div>
</body>
</html>

两列布局的方式除了采用 float 的方式,很显然你也可以改成 position 定位的方式。

三、三列布局

最常见的三列布局要求就是左右固定中间自适应。例如下图:


三列布局_左右固定_中间自适应

具体实现方法:

1. 三栏式浮动布局
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>三列布局_左右固定_中间自适应</title>
    <style>
        .left{
            float: left;
            width: 300px;
            height: 500px;
            background-color: #971199;
        }
        .right{
            float: right;
            width: 300px;
            height: 500px;
            background-color: #2bbc8d;
        }
        .main{
            margin: 0 310px;
            height: 500px;
            background-color: #d4f960;
        }
    </style>
</head>
<body>
    <h3>三列布局_左右固定_中间自适应</h3>
    <div class="left">左侧</div>
    <div class="right">右侧</div>
    <div class="main">主体</div>
</body>
</html>

上面是 float 版,下面给出 position 版:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>三列布局_左右固定_中间自适应_定位版</title>
    <style>
        .left{
            position: absolute;
            left: 0;
            width: 300px;
            height: 500px;
            background-color: #971199;
        }
        .right{
            position: absolute;
            right: 0;
            width: 300px;
            height: 500px;
            background-color: #2bbc8d;
        }
        .main{
            margin: 0 310px;
            height: 500px;
            background-color: #d4f960;
        }
    </style>
</head>
<body>
    <h3>三列布局_左右固定_中间自适应_定位版</h3>
    <div class="left">左侧</div>
    <div class="right">右侧</div>
    <div class="main">主体</div>
</body>
</html>
2. 双飞翼布局
双飞翼布局
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>双飞翼布局</title>
    <style>
        div{
            height: 300px;
        }
        .left{
            float: left;
            width: 200px;
            background-color: green;
            margin-left: -100%;
        }
        .right{
            float: left;
            width: 200px;
            background-color: blue;
            margin-left: -200px;
        }
        .center{
            float: left;
            width: 100%;
            background-color: yellow;
        }
        .center div{
            background-color: #4dc7ec;
            height: 100%;
            margin: 0 220px;
        }
    </style>
</head>
<body>
    <h3>双飞翼布局</h3>
    <div class="center"><div></div></div>
    <div class="left"></div>
    <div class="right"></div>
</body>
</html>

对于上面的代码你可能会看不懂 margin-left:-100%;margin-right:-200px; 的真正含义。当 center left right同时进行左浮动的时候,没有使用 margin 进行拉伸的效果是:

因为 center 盒子会撑满第一行,所以 left 和 right 盒子会在第二行排列。现在我们的目的是怎么让 left 和 right 盒子,挂在两边。当然的使用 margin 来进行拉伸了,这时候上图可以等价图下:

这时候明白 margin-left:-100%;margin-right:-200px; 的意思了吧。

3. 圣杯布局
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>双飞翼布局</title>
<style>
    .wrap{
        padding: 0 250px 0 200px;
    }
    .wrap>div{
        height: 300px;
    }
    .left{
        float: left;
        width: 200px;
        background-color: green;
        margin-left: -100%;
        position: relative;
        left:-200px;
    }
    .right{
        float: left;
        width: 250px;
        background-color: blue;
        margin-left: -250px;
        position: relative;
        right: -250px;
    }
    .center{
        float: left;
        width: 100%;
        background-color: yellow;
    }
    </style>
</head>
<body>
    <h3>双飞翼布局</h3>
    <div class="wrap">
        <div class="center"></div>
        <div class="left"></div>
        <div class="right"></div>
    </div>
</body>
</html>

相关文章

  • 面试常见 CSS 布局方式

    前几天面试去做面试题的时候,遇见几次让手写三栏布局(两边固定,中间自适应),其中一家还让给出不止一种,在加上我对圣...

  • CSS实现三栏布局

    CSS实现三栏布局(5种) 常见的布局方式: float布局、Position定位、table布局、弹性(flex...

  • 【CSS】 Index

    CSS 一、使用CSS样式的方式CSS 二、定义样式表CSS 三、常见属性CSS 四、DIV+CSS布局

  • 常见 CSS 布局方式

    前言 温馨提示:本文较长,图片较多,本来是想写一篇 CSS 布局方式的,但是奈何 CSS 布局方式种类太多并且实现...

  • css中的几种布局方式

    在css中,常见的布局方式:表格,浮动,定位, flex.

  • css

    css基础css选择器css常见样式1css常见样式2CSS布局上CSS布局下flex布局塔防小游戏flex布局青...

  • 【CSS】三、常见属性

    CSS 一、使用CSS样式的方式CSS 二、定义样式表CSS 三、常见属性CSS 四、DIV+CSS布局## 三、...

  • 【CSS】 一、使用CSS样式的方式

    CSS 一、使用CSS样式的方式CSS 二、定义样式表CSS 三、常见属性CSS 四、DIV+CSS布局## 一、...

  • 【CSS】 二、定义样式表

    CSS 一、使用CSS样式的方式CSS 二、定义样式表CSS 三、常见属性CSS 四、DIV+CSS布局## 二、...

  • 【CSS】四、DIV+CSS布局

    CSS 一、使用CSS样式的方式CSS 二、定义样式表CSS 三、常见属性CSS 四、DIV+CSS布局## 四、...

网友评论

    本文标题:面试常见 CSS 布局方式

    本文链接:https://www.haomeiwen.com/subject/zefnbctx.html