左边固定宽,右边自适应的6种方法

简介: 左边固定宽,右边自适应的6种方法

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


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


.left {
  width: 200px;
}


我的理解分四大类


  • flex 布局


  • 需设置父元素高度


  • grid 布局


  • 需设置父元素高度


  • 绝对定位


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


  • float 浮动


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


flex 布局



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


.father {
  display: flex;
  height: 200px;
}
.right {
  flex: 1;
}


grid 布局



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


.grid {
  display: grid;
  grid-template-columns: 200px 100%;
  height: 200px;
}


双子元素 + absolute



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


.father {
  position: relative;
  height: 200px;
}
.left {
  position: absolute;
  height: 200px;
}
.right {
  position: absolute;
  left: 200px;
  height: 200px;
  width: 100%;
}


左元素 absolute + 右元素 margin-left



.father {
  position: relative;
  height: 200px;
}
.left {
  position: absolute;
  width: 200px;
  height: 200px;
}
.right {
  width: 100%;
  height: 200px;
  margin-left: 200px;
}


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



前两种都需要有个父元素,但浮动不需要


左边浮动,下一个元素独占位置,并排一行


同样,需要设置高度,子元素才能撑开


.left {
  float: left;
  height: 200px;
}
.right {
  height: 200px;
}


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



浮动不需要父元素,浮动就区别于正常文档流


我的理解是正常文档流是二维层面,而浮动相当于成了三维,区别于 Z 轴


右边元素有浮动不够,还需要设置宽度


.left {
  float: left;
  height: 200px;
}
.right {
  float: right;
  height: 200px;
  width: calc(100% - 200px);
}


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


总结



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

各大方法 优缺点 需要什么
flex 布局简单 需要父元素、高度。子项 flex:1
grid 布局最简单,但兼容性更现代 只需要父元素设置属性就好
绝对定位 兼容性更高 需要父元素做相对定位、高度
浮动 兼容性更高 不需要父元素,子项都需要宽高


float 区别于其他三种,不需要父元素做容器


grid 区别于其他三种,不需要设置子元素(左元素的)宽


绝对定位区别于其他三种,它的方法不仅要父元素有高,其子元素也要有高


flex 最简单


附上线上 demo(https://azhubaby.com/demo/左边固定,右边自适应.html)


相关文章
|
3月前
|
网络协议 安全 数据建模
2026阿里云免费SSL证书全攻略:申请流程、下载教程及常见问题解答
阿里云免费SSL证书是Digicert颁发的DV单域名证书,每人每年可领20张,有效期3个月,适用于测试与个人非生产环境。支持一键申请、手动DNS/文件/自动授权验证,提供Nginx/Tomcat/Apache等多格式证书下载,零费用快速启用HTTPS。
|
5月前
|
存储 人工智能 数据库
2026 AI Agent 搭建师职业全景指南:从技术基石到商业闭环
2026年,AI职业迎来范式变革,“AI Agent搭建师”取代提示词工程师,成为集架构设计、系统集成与智能协同于一体的“数字流程总设计师”。他们构建具备感知-思考-行动闭环的智能体,推动企业从“聊天机器人”迈向“行动中心”与“数字员工团队”。通过异构模型路由、多智能体编排、MCP工具协议与GraphRAG记忆系统等核心技术,实现业务流程自动化与决策智能化。该职业融合技术、业务与战略,人才缺口巨大,薪酬领先,被誉为AI时代的“黄金职业”,并持续向AI架构师与伦理治理等方向演进。
1893 1
|
资源调度 JavaScript
|
缓存 JavaScript 搜索推荐
vue中的一个内置组件Keep-Alive的作用及使用方法介绍——缓存不活动的组件实例
vue中的一个内置组件Keep-Alive的作用及使用方法介绍——缓存不活动的组件实例
1400 1
|
前端开发 JavaScript
【项目笔记】:elementui下拉框数据太多造成页面卡顿怎么解决?
针对前端下拉框数据过多造成页面卡顿,元芳你怎么看?
1065 2
|
JavaScript 前端开发 开发者
如何在 Visual Studio Code (VSCode) 中使用 ESLint 和 Prettier 检查代码规范并自动格式化 Vue.js 代码
随着前端开发技术的快速发展,代码规范和格式化工具变得尤为重要。本文介绍如何在 Visual Studio Code (VSCode) 中使用 ESLint 和 Prettier 检查代码规范并自动格式化 Vue.js 代码。通过安装和配置这些工具,可以确保代码风格一致,提高代码质量和可读性。
1858 1
|
缓存 前端开发 JavaScript
前端项目性能优化:使用vite的分包策略
【8月更文挑战第4天】Vite性能优化-分包策略
960 2
前端项目性能优化:使用vite的分包策略
|
机器学习/深度学习 自然语言处理 算法
视频字幕自动生成
8月更文挑战第12天
1083 2