tnblog
首页
视频
资源
登录

css实现左边div固定宽度,右边div自适应撑满剩下的宽度。左边定宽,左边固定,右边自适应。flex 占剩下的宽度

4924人阅读 2022/10/8 13:33 总访问:829697 评论:0 收藏:0 手机
分类: 前端

这是一道面试题,你有多少种办法呢?

这里我们假设左边名为 left,宽度为 200 px,右边名为 right。即默认

  1. .left {
  2. width: 200px;
  3. }

我的理解分四大类

flex 布局

  • 需设置父元素高度

AJ补充:其实只需要设置min-height的一个值就行了,高度比这个高也是可以自适应高度的。或者不设置,直接设置它的子容器高度也是可以的

grid 布局

  • 需设置父元素高度

绝对定位

  • 双子元素 absolute
    不需要设置父元素高度
    子元素都设置高度,右边子元素 left:200px + width: 100%
  • 左元素 absolute + 右元素 margin-left
    不需要设置父元素高度
    子元素都设置高度,右边子元素 margin-left: 200px + width: 100%

float 浮动

  • 左元素左浮动,右元素不动
    无需父元素
    左元素需设置宽高和浮动,右元素设置高度即可

  • 左元素左浮动,右元素右浮动
    无需父元素
    左元素设置宽高和左浮动,右元素设置右浮动以及高和宽(width: calc(100% - 200px))

补充:其实还可以使用其他布局框架实现这种布局,比如vue element ui的Layout 布局

可以通过它提供的24分栏,迅速简便地创建布局。

flex 布局

需要一个父元素做 flex 布局,且需要给它一个高度(撑开容器)

  1. .father {
  2. display: flex;
  3. height: 200px;
  4. }
  5. .right {
  6. flex: 1;
  7. }

grid 布局

高级的布局方式,子元素不需要设置宽度,单单设置父元素属性即可。

  1. .grid {
  2. display: grid;
  3. grid-template-columns: 200px 100%;
  4. height: 200px;
  5. }

双子元素 + absolute

需要给子元素设置宽高,不然撑不起来。右元素设置left: 200px

  1. .father {
  2. position: relative;
  3. height: 200px;
  4. }
  5. .left {
  6. position: absolute;
  7. height: 200px;
  8. }
  9. .right {
  10. position: absolute;
  11. left: 200px;
  12. height: 200px;
  13. width: 100%;
  14. }

左元素 absolute + 右元素 margin-left

  1. .father {
  2. position: relative;
  3. height: 200px;
  4. }
  5. .left {
  6. position: absolute;
  7. width: 200px;
  8. height: 200px;
  9. }
  10. .right {
  11. width: 100%;
  12. height: 200px;
  13. margin-left: 200px;
  14. }

无父元素 + 左元素左浮动,右元素不动

前两种都需要有个父元素,但浮动不需要
左边浮动,下一个元素独占位置,并排一行
同样,需要设置高度,子元素才能撑开

  1. .left {
  2. float: left;
  3. height: 200px;
  4. }
  5. .right {
  6. height: 200px;
  7. }

无父元素 + 左边左浮动,右边有浮动

浮动不需要父元素,浮动就区别于正常文档流
我的理解是正常文档流是二维层面,而浮动相当于成了三维,区别于 Z 轴
右边元素有浮动不够,还需要设置宽度

  1. .left {
  2. float: left;
  3. height: 200px;
  4. }
  5. .right {
  6. float: right;
  7. height: 200px;
  8. width: calc(100% - 200px);
  9. }

只要是 float 实现此功能的,都不需要父元素,以及自身都需要设置高度

总结

简单来说,实现布局最好的方式是 flex,简单兼容现代浏览器和机型。当然,我是因为还没有学 grid(但 grid 要记得参数比较多)。绝对定位和浮动各有优缺点

float 区别于其他三种,不需要父元素做容器
grid 区别于其他三种,不需要设置子元素(左元素的)宽
绝对定位区别于其他三种,它的方法不仅要父元素有高,其子元素也要有高
flex 最简单

作者:Johan约翰
链接:https://www.zhihu.com/question/37208845/answer/2430865917
来源:知乎

还可以参考:
https://zhuanlan.zhihu.com/p/28728224


欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739。有需要软件开发,或者学习软件技术的朋友可以和我联系~(Q:815170684)

评价

css弹性盒子flex布局

css弹性盒子由于版本不同浏览器问题造成了一些不同的写法display:flexbox;在google浏览器中如果使用下面的写法就不行displa...

css图片和文字对齐问题

文字和图片写到一排经常会出现对不齐的问题 这样感觉图片会上来一点没有和文字对齐,如下图 但是如果修改下html结...

css实现简单矩形对话框

在前端做项目时,我们可能会遇到写对话框的需求,这次做视频会议页面就遇到了,记录下日后有个参照。//网页部分 <divcla...

如何修改css中存在的element.style内联样式

改腾讯地图的时候调整了下样式,发现样式一直存在问题,修改style里面的值,一点用都没有,html中这个值还找不到是在哪里出...

珍藏!! JS css不传之秘集合

<!--其中5指每隔5秒刷新一次页面--> <metahttp-equiv="refresh"content="5"> =========...

css中单位pxemrem和vh/vw的理解

>px像素(Pixel)。相对长度单位。像素px是相对于显示器屏幕分辨率而言的。em是相对长度单位。相对于当前对象内文本的字...

div+css网页布局常用的一些基础知识整理

一.文件命名规范全局样式:global.css;框架布局:layout.css;字体样式:font.css;链接样式:link.css;打印样式:print...

css相对定位与绝对定位

一般相对定位和绝对定位可以配合起来使用 例如实现如下的效果 只需要在外层div设置为相对定位,在内部设置为绝对定位就...

修改了css让浏览器从缓存中更新

当我们修改了css后,如果不做一些操作,浏览器是不会自动更新我们的样式文件的。除非是过期或者用户手动刷新清理缓存等。所...

css定位的简单运用

父容器使用相对定位position: relative子容器使用绝对定位position: relative这样就可以子容器相对父容器定位了,可以写一...

jscss异步加载

有些时候为了效率,我们需要js与css能够异步加载方法1:直接在后面加一个async的关键字<scriptsrc="~/lib/jquery/d...

css3样式学习代码

上代码!上代码!不说了<!DOCTYPEhtml> <htmllang="en"> <head> <metacharset="UT...

css实现动画效果案列:冒泡案列

css实现动画效果案列:冒泡案列效果图:代码:<!DOCTYPEhtml> <html> <head> <metacharset="...

html/css样式

代码: <!DOCTYPEhtml> <html> <head> <metacharset="utf-8"/> <title&gt...

css div水平居 文字垂直居中 flex的方式实现div的垂直与水平居中布局模板

DIV等元素水平居中定宽度+margin:top auto可以让一个块级别元素在外层居中例如这样:效果:可以看到这个div已经居中了但是...

使用jquery操作元素的css样式(获取、修改等等)

使用jquery操作元素的css样式(获取、修改等等) //1、获取和设置样式 $("#tow").attr("class")...
这一生多幸运赶上过你.
排名
8
文章
222
粉丝
7
评论
7
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术