博主信息
富贵人生
博文
87
粉丝
0
评论
0
访问量
3471
积分:0
P豆:174

CSS两列布局的N种实现

2021年10月06日 19:04:09阅读数:27博客 / 富贵人生

一、什么是两列布局

两列布局分为两种,一种是左侧定宽、右侧自适应,另一种是两列都自适应(即左侧宽度由子元素决定,右侧补齐剩余空间)。在css面试题里面属于常考题,也是一个前端开发工程师必须掌握的技能,下面将分别介绍实现方式。

二、左侧定宽、右侧自适应如何实现?

1.双inline-block

原理:两个元素都设置dislpay:inline-block,为了消除html空格的影响,父元素的font-size需要设置为0,右侧自适应元素的宽度使用calc函数计算。如果两个元素的高度不一样,可以给元素设置vertical-align:top调整。

缺点:由于父元素设置了font-size为0,子元素内文字不会显示

<!DOCTYPE html><html><head><meta charset="utf-8"><title></title><style>*{padding: 0;margin: 0;
}.box{height: 600px;width: 100%;font-size:0;
}.left{display: inline-block;width: 100px;height: 200px;background-color: red;vertical-align: top;
}.right{display: inline-block;width: calc(100% - 100px);height: 400px;background-color: blue;vertical-align: top;
}</style></head><body><div><div><span>1234</span></div><div><span>1234</span></div></div></body></html>

2.双浮动

原理:两个元素设置浮动,右侧自适应元素宽度使用calc函数计算

缺点:父元素需要清除浮动

<!DOCTYPE html><html><head><meta charset="utf-8"><title></title><style>*{padding: 0;margin: 0;
}.box{height: 600px;width: 100%;
}.left{float: left;width: 100px;height: 200px;background-color: red;
}.right{float: left;width: calc(100% - 100px);height: 400px;background-color: blue;
}</style></head><body><div><div><span>123adadadddddddddddddddddddddddddddddddddddddddd</span></div><div></div></div></body></html>

3.浮动+margin

原理:左侧定宽元素浮动,右侧自适应元素设置margin-left的值大于定宽元素的宽度即可

缺点:父元素需要清除浮动

<!DOCTYPE html><html><head><meta charset="utf-8"><title></title><style>*{padding: 0;margin: 0;
}.box{height: 600px;width: 100%;
}.left{float: left;width: 100px;height: 200px;background-color: red;
}.right{margin-left: 100px;height: 400px;background-color: blue;
}</style></head><body><div><div><p>1234</p></div><div><p>1234</p></div></div></body></html>

4.浮动+BFC

原理:父元素设置overflow:hidden,左侧定宽元素浮动,右侧自适应元素设置overflow:auto创建BFC

缺点:左侧元素的内容如果超过设定宽度会重叠到右侧元素上

<!DOCTYPE html><html><head><meta charset="utf-8"><title></title><style>*{padding: 0;margin: 0;
}.box{height: 600px;width: 100%;overflow: hidden;
}.left{float: left;width: 100px;height: 200px;background-color: red;
}.right{overflow: auto;height: 400px;background-color: blue;
}</style></head><body><div><div>111111111111111111111111</div><div>111111111111111111111111111111111111111111111</div></div><div></div></body></html>

5.absolute+margin-left

原理:父元素相对定位,左侧元素绝对定位,右侧自适应元素设置margin-left的值大于定宽元素的宽度

缺点:父元素设置了相对定位

<!DOCTYPE html><html><head><meta charset="utf-8"><title></title><style>*{padding: 0;margin: 0;
}.box{height: 600px;width: 100%;position: relative;
}.left{position: absolute;width: 100px;height: 200px;background-color: red;
}.right{margin-left: 100px;height: 400px;background-color: blue;
}</style></head><body><div><div></div><div></div></div></body></html>

6.flex布局

原理:父元素设置display:flex,自适应元素设置flex:1

缺点:存在兼容性问题,IE10以下不支持

<!DOCTYPE html><html><head><meta charset="utf-8"><title></title><style>*{padding: 0;margin: 0;
}.box{height: 600px;width: 100%;display: flex;
}.left{width: 100px;height: 200px;background-color: red;
}.right{flex: 1;height: 400px;background-color: blue;
}</style></head><body><div><div></div><div></div></div></body></html>

三、左右两侧元素都自适应

严格来讲,并不算两个元素都是自适应,QQ买卖地图只是将上面的定宽改为由子元素撑开而已

1.浮动+BFC

原理和上面一样,只是左侧元素的宽度没有设置,由子元素撑开

2.table布局

原理:父元素display:table,左侧元素外围用一个div包裹,该div设置display:table-cell,width:0.1%(保证最小宽度),左侧元素内部设置margin-right,右侧元素设置display:table-cell。

缺点:IE7及以下不支持,当display:table时,padding失效,父元素的line-height属性失效,当display:table-cell时,margin失效。

<!DOCTYPE html><html><head><meta charset="utf-8"><title></title><style>.parent{display: table;width: 100%;
}.box{display: table-cell;width: 0.1%;
}.left{margin-right: 20px;background-color: red;height: 200px;
}.right{display: table-cell;background-color: blue;height: 300px;
}</style></head><body><div><div><div>126545453dddddddd453453453</div></div><div>12121</div></div></body></html>

3.flex布局

原理、缺点同上面的flex布局

4.grid布局

原理:父元素设置display:grid,grid-template-columns:auto 1fr;(这个属性定义列宽,auto关键字表示由浏览器自己决定长度。fr是一个相对尺寸单位,表示剩余空间做等分)grid-gap:20px(行间距)

缺点:兼容性太差,IE11都不支持,谷歌57以上才可以

<!DOCTYPE html><html><head><meta charset="utf-8"><title></title><style>.parent{display:grid;grid-template-columns:auto 1fr;grid-gap:20px}.left{background-color: red;height: 200px;
}.right{height:300px;background-color: blue;
}</style></head><body><div><div>1111111111111111111111111</div><div></div></div></body></html>


版权申明:本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!

全部评论

文明上网理性发言,请遵守新闻评论服务协议

条评论
  • 本篇文章带大家了解一下使用CSS九宫格方法。有一定参考价值,有需要朋友可以参考一下,希望对大家有所帮助。
    方法:1、个盒子元素都设置“dislpay:inline-block”;2、个盒子元素设置浮动;3、左侧定宽元素浮动,右侧元素设置margin-left,且值大于定宽元素宽度;4、浮动+BFC;5
    css方法有:1、一,一般都是固定宽高;2、,使用float来;3、三侧定宽中间自适应;4、混合,在一基础上,保留top和foot部分;5、其他等。
    ​本文就来为大家介绍3常见CSS页面:双飞翼、粘连、左右,希望对大家有一定帮助。
    css方法:1、利用multi-column多
    css方法:1、float浮动;2、绝对定位;3、flexbox弹性,存在IE上兼容性问题,只能支持IE9以上;4、table表格,不利于搜索引擎抓取信息;5、gird网格
    CSS怎么流?下面本篇文章给大家介绍一下使用CSS方式,希望对大家有所帮助!

    2021-04-02

    329

    div是框架,css是样式,用来装饰框架;详细点来说,div就是给整个网页css就是负责控制div样式,想让div在哪里怎么显示,都可以通过css
    【DIV+CSS】是WEB设计标准,它是一网页方法,与传统中通过表格定位方式不同,它可以网页页面内容与表相分离;DIV是网页HTML标签,CSS是层叠样式表是用于控制网页样式并允许将样式信息与网页内容分离标记性语言
    有些情况下,我需要用一简单方法来创建网格。 例如,每次我改变主意时,在不修改CSS情况下快速画出五网格。 在本文中,我们一起探索一些用例,并思考如果及使用它们。
    区别是:1、CSS为网页表、JS为网页行为;2、css对网页进行静态修饰,可以使页面以一定方式显示出来,而js对页面动态效果进行处理,可用来网页和人交互功能等。
    css盒子模式就是在网页设计中经常用到CSS技术所使用思维模型,其作用就是通过定义一系与盒子相关属性,可以丰富和促进各个盒子以及整个HTML文档效果和结构。
    区别:vuejs是一套构建用户界面渐进式JavaScript框架,其目标是通过尽可能简单API响应式数据绑定和可组合视图组件;而Bulma是一个基于Flexbox代化CSS框架,用于简单或者复制响应式内容
    这篇文章主要介绍了使用CSS三栏自适应(边宽度固定,中间自适应),文中通过示例代码介绍非常详细,对大家学习或者工作具有一定参考学习价值,需要朋友们下面随着小编来一起学习学习吧
    CSS是层叠样式表,一用来表HTML或XML等文件样式计算机语言,是可以做到网页和内容进行分离样式语言。