整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

CSS3图片占位,解决页面布局跑位

们经常会遇到这样的一个问题。

设计出了很牛逼的设计稿,客户确认了,前端静态制作也出来,还原设计稿95%以上,客户也确认了。

那是个完美啊!!做完程序了,交给客户了。然后客户自己上传了图片了。那个悲催啊!!惨不忍睹啊!!

完全和设计稿两码事?图片不好看,到处都跑位。

客户就骂过来了,你们是否也遇到这样的事情?因为客户的公司没有设计师啊,哈哈,这个问题可能遇到的不少。

其实大家都会说,这归根到底都是客户没有处理图片的问题所造成的。然后大家都推来推去。

那么,前端制作工程师是否有办法解决这样的问题,其实是可以的。如果因图片问题导致布局变了,解决了这个问题就只剩下图片的美观性,那这个就可以跟客户说你要请个设计师帮你处理图片啊。这样不就解决问题了吗?

这种方式和微信朋友圈的九宫格图片展示方式类似,只显示图片中间的内容,其他的将会被隐藏。

举个栗子:

这个列表是不是很整齐,看起来比较舒服,虽然图片有那么点点的变形,但不影响阅读。

如果其中有一张图片的尺寸稍微有一点点不一样,肯定会出现跑位的情况。就像下面这样。这样客户看到不被投诉才怪哦!!

那么就以这个来说说解决方式。

大家都知道图片有一种特性,就是当图片的宽度改变时,高度也会随着等比例在改变。

例如:一张宽高都为100px的图片,如果把宽度调至200px,那么高度是不是也会随之变成200px;没错的,就是利用这个特性来解决布局乱的情况。

这里就拿上一次说到的 “图文列表 纯css布局” 那次说的布局来说说,因为都是做好,和上面那个图类似。偷偷懒。如果没看过那篇,搜一下 “图文列表 纯css布局”,就可以找到了。(如需下载源码,请关注微信公众号:JS学吧)

效果是这样的:

如何切出占位图呢?如下操作

用PS打开文件,用裁剪工具把图片完整的裁下来,如下图

裁完成,再点击菜单栏目 “图像 > 图像大小” 或 按着 Alt键,再点两次 I 键。可以调出 “图像大小” 弹窗。

可以看到 “像素大小” 的宽度和高度都为260px,那么只要调其中一个就可以,就可以达到等比例调整。

我们先调成10px,确定后,再把图层的 “小眼睛” 关掉,另存为一个 png24 的透明图片,记得哦!!一定是要png24的。名字自己定啦!!

然后把 img 中的图片路径改为如下:

<a href=""><img src="rect.png" alt="" width="100%"></a>然后刷新看看效果,是不是发现原来的图片不见的,变成空白的,但是原来的布局结构没有改变。其实要的就是这样的效果。

然后我们在 img 的外层再包个div,就拿这个div来放图片。顺便加个背景色看看效果。

<a href="">

<div style="background: #000;">

<img src="rect.png" alt="" width="100%">

</div>

</a>

看,占位图片的效果出来了。外层div的宽度和高度都被img撑开了。是不是达到了想要的效果。

关键的时候来了。就是处理图片。我们要把产品图片做为背景的形式输出即可以。把图片的路径写在div上面的就解决了。再加上css3新属性就可以了。

HTML如下:

<a href="">

<div class="cover-img" style="background-image: url(pic001.jpg);">

<img src="rect.png" alt="" width="100%">

</div>

</a>

用背景样式 background-image 定入路径。再添加一个 cover-img 的类名。然后 cover-img 的样式如下:

.cover-img {

background-position: center;

background-repeat: no-repeat;

background-size: cover;

}

注意、注意、注意,中要的事说三遍。重点就在于 css3 的新属性 background-size: cove;

这个属性就是会把背景图片,以等比例的形式保持图像本身的宽高比例,将图片缩放到正好完全覆盖定义背景的区域。

是不是不明白,那就对了,挺不好理解。最好还是用实际效果来看看。

最终出来的效果就是和最开始的那张图片一样的,只是看不出来而已。

那么我们就来玩真的。直接上网整一张大图的路径放进去看看就知道了。

上某某网站找特大尺寸的图片来,例如下面这张:尺寸是2533x1583,够大了,也不是正方形哦!!我们一开始说的都是正方形,现在弄个不是正方形的图片来试试效果。

HTML如下:

<a href="">

<div class="cover-img" style="background-image: url(pic002.jpg);">

<img src="rect.png" alt="" width="100%">

</div>

</a>

更改url里的路径即可

出来的效果如下:

是不是自动调整了。

我们再换一张高形状的图片。二哈图:尺寸是2448x3264

HTML:如下

<a href="">

<div class="cover-img" style="background-image: url(pic003.jpg);">

<img src="rect.png" alt="" width="100%">

</div>

</a>

最终效果:

怎么样,效果还可以吧!!不知道你们看出了什么了没有。

第一张是宽形状的图片,是以高度填满 div 的区域。

第二张是高形状的图片,是以宽度填满 div 的区域。

全都是靠着 background-size: cover; 这个属性解决了。但也是有不好的地方。

例如不支持IE浏览器,图片显示不全,多一个文件服务器要多请求一次.....等等问题!!做图时的内容尽可能在正中间。

然后,不管客户上传什么鬼形状的图片,都不会产生布局变乱的情况。



获取《vue3.0大公司后台管理系统开发 正规开发流程项目实践》视频,

请点击下面 “了解更多” 或 请关注微信公众号《手把手撸码前端》

局和脚部是 HTML 页面中两个重要的区域。布局区域用于组织页面上的内容,而脚部区域通常包含与页面内容无关但重要的信息。


布局区域

布局区域用于将页面上的内容分组和排列。最常用的布局区域是:

  • 主内容区:包含页面上的主要内容。
  • 侧栏:包含与页面内容相关的额外信息,例如导航菜单或侧边栏。
  • 脚部:包含与页面内容无关但重要的信息,例如版权信息或联系方法。

脚部区域

脚部区域通常包含以下内容:

  • 版权信息:表明页面的所有权归于特定个人或组织。
  • 联系方式:提供与发送电子邮件或访问其他网站的链接。
  • 社交媒体链接:提供与页面或组织的社交媒体帐号。

布局和脚部的组合

布局区域可以包含脚部区域。例如,以下代码展示了如何将脚部区域包含在布局区域内:

html
<!DOCTYPE html>
<html>
<head>
  <!-- ... -->
</head>
<body>
  <div id="layout">
    <!-- ... -->
    <footer>
      <p>© 20 vicisslet 20 vicisslet</p>
      <p>联系:...</p>
      <p>社交媒体:...</p>
    </footer>
  </div>
</body>
</html>

最佳实践

  • 使用合适的布局区域来组织页面内容。
  • 在脚部区域中提供与页面内容无关但重要的信息。
  • 保持脚部区域简短且易于浏览。

结论

布局和脚部是 HTML 页面中两个重要的区域。通过了解布局和脚部区域的用法,您可以创建拥有清晰结构和良好阅读体验的页面。

们前端开发过程中,写css(包括sass, less, stylus这样的预处理器)进行设计稿的样式还原是一项重要的工作,而其中,关于页面布局的部分,又是书写样式代码时候的重点和难点,这篇文章就尽可能的去总结常见的一些页面布局实现方案(并不是全部,布局实现方法太多了),希望能够对大家有所帮助。

在开始正题之前,有一点要说明:css布局中遇到的一个绕不开的问题就是浏览器兼容性,下面方案会遇到类似transform, flex等的兼容性问题,且由于grid布局兼容性问题,暂不涉及grid布局内容,在不同场景,大家选择合适的布局实现方案即可。

1. 居中相关的布局

1.1 水平居中布局

效果图如下:

方案一. inline-block + text-align

分析:display设置为inline-block的元素,具有文本元素的性质,其父元素可以通过设置文本对齐属性text-align来控制其在行内的对齐方式,text-align: center即为水平对齐

注意:text-align属性是具有继承性的,会导致自己元素内部的文本也是居中显示的,需要自身设置text-align覆盖

<style>
    .wrap {
        width: 100%;
        height: 200px;
        background-color: aqua;
        text-align: center;
    }
    .content {
        width: 200px;
        height: 200px;
        background-color: blueviolet;
        display: inline-block;
    }
</style>
<body>
    <div class="wrap">
        <div class="content"></div>
    </div>
</body>

方案二. 定位 + transform

分析:父元素开启定位(relative,absolute,fixed都可以)后,子元素设置绝对定位absolute后,left设置为50%,再使用transform: translateX(-50%)将子元素往反方向移动自身宽度的50%,便完成水平居中。

注意:父级元素是否脱离文档流,不影响子元素水平居中效果,但是transform是css3属性,存在浏览器兼容问题

<style>
    .wrap {
        position: relative;
        width: 100%;
        height: 200px;
        background-color: aqua;
    }
    .content {
        position: absolute;
        left: 50%;
        transform: translateX(-50%);
        width: 200px;
        height: 200px;
        background-color: blueviolet;
    }
</style>
<body>
    <div class="wrap">
        <div class="content"></div>
    </div>
</body>

方案三. display: block + margin: 0 auto

分析:这个方法只需要对子元素进行设置就可以实现水平居中,margin设置auto表示浏览器会自动分配,实现来外边距等分效果。

注意:这里子元素设置display为block或者table都是可以的,如果子元素脱离文档流(浮动,定位),会导致margin属性的值无效。

<style>
    .wrap {
        width: 100%;
        height: 200px;
        background-color: aqua;
    }
    .content {
        width: 200px;
        height: 200px;
        background-color: blueviolet;
        display: table;
        margin: 0 auto;
    }
</style>
<body>
    <div class="wrap">
        <div class="content"></div>
    </div>
</body>

1.2 垂直居中布局

效果图如下:

方案一. 定位 + transform

这种方案和之前水平居中布局的方案二是同样的原理,不在赘述

<style>
    .wrap {
        position: relative;
        width: 200px;
        height: 600px;
        background-color: aqua;
    }
    .content {
        position: absolute;
        top: 50%;
        transform: translateY(-50%);
        width: 200px;
        height: 200px;
        background-color: blueviolet;
    }
</style>
<body>
    <div class="wrap">
        <div class="content"></div>
    </div>
</body>

方案二. display: table-cell + vertical-align

分析:设置display: table-cell的元素具有td元素的行为,它的子元素布局方式类似文本元素,可以在父元素使用vertical-align: middle;实现子元素的垂直居中。

注意:vertical-align属性具有继承性,导致父元素内文本也是垂直居中显示的。

<style>
    .wrap {
        display: table-cell;
        vertical-align: middle;
        width: 200px;
        height: 600px;
        background-color: aqua;
    }
    .content {
        width: 200px;
        height: 200px;
        background-color: blueviolet;
    }
</style>
<body>
    <div class="wrap">
        <div class="content"></div>
    </div>
</body>

1.3 水平垂直居中布局

效果图如下:

前面分别总结了一些水平居中和垂直居中的布局方式,那么进行水平垂直居中的布局,也就没什么特别要说的了,直接上代码:

方案一.定位 + transform

<style>
    .wrap {
        position: relative;
        width: 1200px;
        height: 800px;
        background-color: aqua;
    }
    .content {
        position: absolute;
        left: 50%;
        top: 50%;
        transform: translate(-50%, -50%);
        width: 200px;
        height: 200px;
        background-color: blueviolet;
    }
</style>
<body>
    <div class="wrap">
        <div class="content"></div>
    </div>
</body>

方案二. 结合水平布局方案三,垂直布局方案二

<style>
    .wrap {
        display: table-cell;
        vertical-align: middle;
        width: 1200px;
        height: 800px;
        background-color: aqua;
    }
    .content {
        margin: 0 auto;
        width: 200px;
        height: 200px;
        background-color: blueviolet;
    }
</style>
<body>
    <div class="wrap">
        <div class="content"></div>
    </div>
</body>

1.4 使用flex进行居中布局

分析:使用flex,水平垂直居中会变得非常容易,默认情况下,align-items: center垂直居中(交叉轴排列方式),justify-content: center水平居中(主轴排列方式) 注意:需要考虑浏览器兼容性问题。

<style>
     .wrap {
         display: flex;
         align-items: center;
         justify-content: center;
         width: 1200px;
         height: 800px;
         background-color: aqua;
     }
     .content {
         width: 200px;
         height: 200px;
         background-color: blueviolet;
     }
</style>
 <body>
     <div class="wrap">
         <div class="content"></div>
     </div>
 </body>

2. N列布局

2.1 两列布局

这里的两列布局指的是,其中一列是定宽元素,另一列元素宽度自适应。比如,我们实现左列定宽,右列自适应的布局。

效果图如下:

方案一. 左边元素浮动,定宽,右边元素设置margin-left

分析:一个最简单的做法,左边元素设置浮动,定宽,右边元素的margin-left设置为左边元素宽度大小,可以实现效果。

注意:我们左边元素使用了浮动,但是右边元素没有浮动

<style>
    .l, .r {
        height: 600px;
    }
    .l {
        width: 400px;
        background-color: aqua;
        float: left;
    }
    .r {
        background-color: blueviolet;
        margin-left: 400px;
    }
</style>
<body>
    <div class="l">定宽</div>
    <div class="r">自适应</div>
</body>

方案二. 左边元素浮动,定宽,右边元素设置overflow:hidden

分析:右边元素由于设置overflow:hidden开启BFC,与外界隔离,所以能实现效果

注意:overflow:hidden的设置也使得右边元素内容超出隐藏。这里如果不设置overflow:hidden,右边元素的宽度是100%,有一部分被左边浮动元素盖住,不是我们要的结果,虽然看起来没什么区别。

<style>
    .l, .r {
        height: 600px;
    }
    .l {
        width: 400px;
        background-color: aqua;
        float: left;
    }
    .r {
        background-color: blueviolet;
        overflow: hidden;
    }
</style>
<body>
    <div class="l">定宽</div>
    <div class="r">自适应</div>
</body>

方案三.将左右元素用一个display:table的元素包裹,左右元素设置为display: table-cell

分析:这里主要是基于表格元素,在没有设置宽度时,会自动分配宽度来实现布局的。

注意:设置为表格后,在某些浏览器可能会受到表格本身特有行为的影响,比如表格边框等等。

<style>
    .w {
        display: table;
        table-layout: fixed;
        width: 100%;
    }
    .l, .r {
        display: table-cell;
        height: 600px;
    }
    .l {
        width: 400px;
        background-color: aqua;
    }
    .r {
        background-color: blueviolet;
    }
</style>
<body>
    <div class="w">
        <div class="l">定宽</div>
        <div class="r">自适应</div>
    </div>
</body>

方案四. flex布局

分析:父容器采用flex布局,左边元素定宽之后,右边元素,因为只有一个,所以flex属性设置为不是0的正值(也就是设置flex-grow),都会占满剩余空间。

注意:依然是,注意兼容性问题。

2.2 三列布局

这里的三列布局,主要分三种情况介绍,第一种是普通三列布局,还有两种是比较有名的圣杯布局和双飞翼布局(两者都是实现一个两侧宽度固定,中间宽度自适应的三列布局,区别在于双飞翼布局比起圣杯布局,中间元素会多一个子元素,而左右元素需要定位relative)

2.2.1. 普通三列布局

我们这里实现的是,左中两列定宽,右边一列自适应的布局,这个实际上和前面的两列布局是类似的。

效果图如下:<style>
     .p {
         display: flex;
         height: 600px;
     }
     .l {
        background-color: aqua;
        width: 400px;
     }
     .r {
         flex: 1;
         background-color: blueviolet;
     }
</style>
 <body>
     <div class="p">
         <div class="l">定宽</div>
         <div class="r">自适应</div>
     </div>
 </body>

2.2 三列布局

这里的三列布局,主要分三种情况介绍,第一种是普通三列布局,还有两种是比较有名的圣杯布局和双飞翼布局(两者都是实现一个两侧宽度固定,中间宽度自适应的三列布局,区别在于双飞翼布局比起圣杯布局,中间元素会多一个子元素,而左右元素需要定位relative)

2.2.1. 普通三列布局

我们这里实现的是,左中两列定宽,右边一列自适应的布局,这个实际上和前面的两列布局是类似的。

效果图如下:

方案一. 定宽 + overflow:hidden

分析:这个方案和两列布局方案二是相同的。

<style>
    .l, .c, .r {
        height: 600px;
    }
    .l {
        width: 400px;
        background-color: aqua;
        float: left;
    }
    .c {
        width: 400px;
        background-color: blueviolet;
        float: left;
    }
    .r {
        background-color: brown;
        overflow: hidden;
    }
</style>
<body>
    <div class="l">定宽</div>
    <div class="c">定宽</div>
    <div class="r">自适应</div>
</body>

方案二. flex布局

分析:这里布局原理和两列布局中flex布局方式是相同的。

<style>
     .w {
         display: flex;
         height: 600px;
     }
     .l {
         width: 400px;
         background-color: aqua;
     }
     .c {
         width: 400px;
         background-color: blueviolet;
     }
     .r {
         flex: 1;
         background-color: brown;
     }
</style>
 <body>
     <div class="w">
         <div class="l">定宽</div>
         <div class="c">定宽</div>
         <div class="r">自适应</div>
     </div>
 </body>

2.2.2. 圣杯布局

两侧宽度固定,中间宽度自适应的三列布局(中间元素不需要嵌套子元素)

效果图如下:

方案一. 左右两侧浮动,中间元素使用margin

分析:这种方法就是左右两边浮动,给定宽度,中间元素使用margin空出左右两边元素的位置,实现比较简单。

注意:这种方式,需要在书写html结构时,将右侧元素写在中间元素的前面,因为如果右侧元素在中间元素后面,由于浮动元素位置上不能高于(或平级)前面的非浮动元素,导致右侧元素会下沉。但是,中间元素一般都是页面的核心部分,放在比较后面的位置,不利于SEO。

<style>
    .l, .c, .r {
        height: 600px;
    }
    .l {
        width: 400px;
        background-color: aqua;
        float: left;
    }
    .c {
        background-color: blueviolet;
        margin-left: 400px;
        margin-right: 400px;
    }
    .r {
        width: 400px;
        background-color: brown;
        float: right;
    }
</style>
<body>
    <div class="l">定宽</div>
    <div class="r">定宽</div>
    <div class="c">自适应</div>
</body>

方案二. 父容器使用margin,左中右元素均浮动,利用定位和margin移动到正确位置

分析:这种方法将中间元素c放置在最前面,有利于SEO。

注意:实现细节在参考下面代码中的注释。

<style>
    .w {
        /* margin-left对应左边元素l的宽度,margin-right对应右边元素r的宽度 */
        margin-left: 400px;
        margin-right: 400px;
    }
    .l, .c, .r {
        height: 600px;
        float: left;
    }
    .l {
        width: 400px;
        background-color: aqua;
        position: relative;
        /* 为了让l元素从当前行移动到第一行同一位置*/
        margin-left: -100%;
        /* 移动到中间元素左侧正确位置 */
        left: -400px;
    }
    .c {
        width: 100%;
        background-color: blueviolet;
    }
    .r {
        width: 400px;
        background-color: brown;
        position: relative;
        /* 为了让l元素从当前行移动到上一行*/
        margin-left: -400px;
        right: -400px;
    }
</style>
<body>
    <div class="w">
        <div class="c">自适应</div>
        <div class="l">定宽</div>
        <div class="r">定宽</div>
    </div>
</body>

2.2.3. 双飞翼布局

两侧宽度固定,中间宽度自适应的三列布局(中间元素内部增加子元素用于放置内容)

效果图如下:

方案一. 中间元素子元素设置margin,左中右元素均设置浮动,左右元素通过margin移动到正确位置

分析:这种方法为中间元素增加子元素作为内容区域,通过子元素设置margin完成。

注意:和圣杯布局对照,有相似处,也有不同,实现的结果是一样的。

<style>
    .l, .c, .r {
        height: 600px;
        float: left;
    }
    .l {
        width: 400px;
        background-color: aqua;
        /* 为了让l元素从当前行移动到第一行同一位置*/
        margin-left: -100%;
    }
    .c {
        width: 100%;
        background-color: blue;
    }
    .i {
        height: 600px;
        background-color: blueviolet;
        margin-left: 400px;
        margin-right: 400px;
    }
    .r {
        width: 400px;
        background-color: brown;
         /* 为了让r元素移动到第一行*/
        margin-left: -400px;
    }
</style>
<body>
    <div class="c">
        <div class="i">自适应</div>
    </div>
    <div class="l">定宽</div>
    <div class="r">定宽</div>
</body>

2.2.4. flex布局实现(中间自适应,左右等宽)

分析:flex实现就很简单了,可以参照普通三列布局flex实现。

注意:还是要注意浏览器兼容性问题。

<style>
    .w {
        display: flex;
        height: 600px;
    }
    .l {
        width: 400px;
        background-color: aqua;
    }
    .c {
        flex: 1;
        background-color: blueviolet;
    }
    .r {
        width: 400px;
        background-color: brown;
    }
</style>
<body>
    <div class="w">
        <div class="l">定宽</div>
        <div class="c">自适应</div>
        <div class="r">定宽</div>
    </div>
</body>

2.3 多列等分布局

所谓多列等分布局,就是若干列在容器中自适应等分宽度,我们以五列等分布局为例。

效果图如下:

方案一. 浮动 + 百分数平分

分析:这种方案就是每一列浮动,之后按照百分比平分宽度,实现简单。

<style>
   .col {
       float: left;
       width: 20%;
       height: 300px;
   }
   .col1 {
       background-color: blue;
   }
   .col2 {
       background-color: blueviolet;
   }
   .col3 {
       background-color: aqua;
   }
   .col4 {
       background-color: beige;
   }
   .col5 {
       background-color: salmon;
   }
</style>
<body>
    <div class="w">
        <div class="col col1"></div>
        <div class="col col2"></div>
        <div class="col col3"></div>
        <div class="col col4"></div>
        <div class="col col5"></div>
    </div>
</body>

方案二. 使用display: table布局

分析:父容器指定display: table,设置布局行为table-layout: fixed,指定每个表格等宽。

注意:table-layout: fixed是需要设置的,默认情况下,列宽度由单元格内容设定,设置之后,列宽由表格宽度和列宽度设定。

<style>
    .w {
        display: table;
        /* 列宽由表格宽度和列宽度设定 */
        table-layout: fixed;
        width: 100%;
    }
   .col {
       display: table-cell;
       height: 300px;
   }
   .col1 {
       background-color: blue;
   }
   .col2 {
       background-color: blueviolet;
   }
   .col3 {
       background-color: aqua;
   }
   .col4 {
       background-color: beige;
   }
   .col5 {
       background-color: salmon;
   }
</style>
<body>
    <div class="w">
        <div class="col col1"></div>
        <div class="col col2"></div>
        <div class="col col3"></div>
        <div class="col col4"></div>
        <div class="col col5"></div>
    </div>
</body>

方案三. 使用column布局

分析:使用column布局,指定内容区域需要分为5列即可。

注意:浏览器兼容性问题。

<style>
     .w {
         /* 指定列数 */
         column-count: 5;
         /* 指定列与列之间的间隙,默认1em */
         column-gap: 0;
     }
     .col {
         height: 300px;
     }
     .col1 {
         background-color: blue;
     }
     .col2 {
         background-color: blueviolet;
     }
     .col3 {
         background-color: aqua;
     }
     .col4 {
         background-color: beige;
     }
     .col5 {
         background-color: salmon;
     }
</style>
 <body>
     <div class="w">
         <div class="col col1"></div>
         <div class="col col2"></div>
         <div class="col col3"></div>
         <div class="col col4"></div>
         <div class="col col5"></div>
     </div>
 </body>

方案四. 使用flex布局

分析:使用flex布局十分简单,指定每一列所占空间相同即可

<style>
     .w {
        display: flex;
     }
     .col {
         height: 300px;
         flex: 1;
     }
     .col1 {
         background-color: blue;
     }
     .col2 {
         background-color: blueviolet;
     }
     .col3 {
         background-color: aqua;
     }
     .col4 {
         background-color: beige;
     }
     .col5 {
         background-color: salmon;
     }
</style>
 <body>
     <div class="w">
         <div class="col col1"></div>
         <div class="col col2"></div>
         <div class="col col3"></div>
         <div class="col col4"></div>
         <div class="col col5"></div>
     </div>
 </body>
 </html>

2.4 多列等高布局

所谓多列等高布局,就是多类内容可能不一样,但是保证每一列的高度是相同的,这个高度应该由内容最多的那一列决定。

效果图如下:

方案一. 使用display: table布局

分析:父元素设置display: table,子元素设置display: table-cell,这样布局就是按照表格行为布局,表格单元格默认等高。

 <style>
    .w {
        display: table;
    }
    .col {
        display: table-cell;
        width: 20%;
    }
    .col1 {
        background-color: blue;
    }
    .col2 {
        background-color: blueviolet;
    }
    .col3 {
        background-color: aqua;
    }
    .col4 {
        background-color: beige;
    }
    .col5 {
        background-color: salmon;
    }
</style>
 <body>
     <div class="w">
         <div class="col col1">啊啊啊啊啊啊啊啊啊啊啊啊</div>
         <div class="col col2">啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊</div>
         <div class="col col3">啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊</div>
         <div class="col col4"></div>
         <div class="col col5">啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊</div>
     </div>
 </body>

方案二. 使用flex布局

分析:默认情况下,display: flex的元素align-items属性值为stretch,如果项目未设置高度或设为auto,将占满整个容器的高度。

<style>
    .w {
        display: flex;
    }
    .col {
        flex: 1;
    }
    .col1 {
        background-color: blue;
    }
    .col2 {
        background-color: blueviolet;
    }
    .col3 {
        background-color: aqua;
    }
    .col4 {
        background-color: beige;
    }
    .col5 {
        background-color: salmon;
    }
</style>
 <body>
     <div class="w">
         <div class="col col1">啊啊啊啊啊啊啊啊啊啊啊啊</div>
         <div class="col col2">啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊</div>
         <div class="col col3">啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊</div>
         <div class="col col4"></div>
         <div class="col col5">啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊</div>
     </div>
 </body>

3. 全屏布局

所谓全屏布局,就是实现经典的头部,内容区,底部三大区域占满全屏的布局,这种布局很常见。

实现效果如下:

分析:这里采用的方案是,头部底部使用fixed定位,中间使用之前讲到的两列布局技术。

注意:头部底部可以使用header, footer标签,内容区域结构与布局都是多种多样的。

<style>
        html, body {
            margin: 0;
            overflow: hidden;
        }
        .header {
            position: fixed;
            left: 0;
            top: 0;
            right: 0;
            height: 100px;
            background-color: salmon;
        }

        .w {
            position: fixed;
            left: 0;
            right: 0;
            top: 100px;
            bottom: 100px;
            overflow: auto;
            background-color: palevioletred;
        }

        .w .l {
            width: 400px;
            /* height: 100%; */
            position: fixed;
            left: 0;
            top: 100px;
            bottom: 100px;
            background-color: greenyellow;
        }

        .w .r {
            position: fixed;
            left: 400px;
            right: 0;
            top: 100px;
            bottom: 100px;
            background-color: blueviolet;
        }

        .footer {
            position: fixed;
            left: 0;
            right: 0;
            bottom: 0;
            height: 100px;
            background-color: goldenrod;
        }
</style>
    <body>
        <div class="header"></div>
        <div class="w">
            <div class="l"></div>
            <div class="r"></div>
        </div>
        <div class="footer"></div>
    </body>

本篇文章总结了一些常见布局的实现方案,css布局的实现方案很多,需要我们平时多去积累,选择合适的方案。

最后,希望随着时间的推移,兼容性不再成为我们技术实现的障碍,愿世界越来越美好。

最后送福利了,自己是从事了五年的前端工程师,整理了一份最全面前端学习资料,只要私信:“前端"等3秒后即可获取地址,

里面概括应用网站开发,css,html,JavaScript,jQuery,Ajax,node,angular等。等多个知识点高级进阶干货的相关视频资料,等你来拿