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


Posted in HTML / CSS onMay 15, 2022

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

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

.left {
  width: 200px;
}

我的理解分四大类

  • flex 布局

    • 需设置父元素高度
  • grid 布局

    • 需设置父元素高度
  • 绝对定位

    • 双子元素 absolute

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

      • 不需要设置父元素高度
      • 子元素都设置高度,右边子元素 margin-left: 200px + width: 100%
  • 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 最简单

到此这篇关于左边固定宽右边自适应的6种方法的文章就介绍到这了!

 
HTML / CSS 相关文章推荐
css3绘制百度的小度熊
Oct 29 HTML / CSS
35款精致的 CSS3 和 HTML5 网页模板 推荐
Aug 03 HTML / CSS
CSS3 制作旋转的大风车(充满童年回忆)
Jan 30 HTML / CSS
一款纯css3实现的非常实用的鼠标悬停特效演示
Nov 05 HTML / CSS
利用css3-animation实现逐帧动画效果
Mar 10 HTML / CSS
HTML5使用Audio标签实现歌词同步的效果
Mar 17 HTML / CSS
HTML5之web workers_动力节点Java学院整理
Jul 17 HTML / CSS
html5-Canvas可以在web中绘制各种图形
Dec 26 HTML / CSS
HTML5 video标签(播放器)学习笔记(一):使用入门
Apr 24 HTML / CSS
整理HTML5中支持的URL编码与字符编码
Feb 23 HTML / CSS
如何用canvas实现在线签名的示例代码
Jul 10 HTML / CSS
CSS3实现三角形不断放大效果
Apr 13 HTML / CSS
解决flex布局中子项目尺寸不受flex-shrink限制
May 11 #HTML / CSS
css3 选择器
May 11 #HTML / CSS
六个好看实用的 HTML + CSS 后台登录入口页面
HTML CSS 一个标签实现带动画的抖音LOGO
常用的文件对应的MIME类型汇总
Apr 26 #HTML / CSS
通过feDisplacementMap和feImage实现水波特效
什么是css原子化,有什么用?
Apr 24 #HTML / CSS
You might like
乐信RP2100的电路分析和打磨
2021/03/02 无线电
磨咖啡豆的密诀
2021/03/03 冲泡冲煮
如何开发一个虚拟域名系统
2006/10/09 PHP
PHP高级OOP技术演示
2009/08/27 PHP
PHP中输出转义JavaScript代码的实现代码
2011/04/22 PHP
php实现发送微信模板消息的方法
2015/03/07 PHP
PHP获取当前相对于域名目录的方法
2015/06/26 PHP
php实现网站文件批量压缩下载功能
2015/10/28 PHP
PHP基于GD2函数库实现验证码功能示例
2019/01/27 PHP
javascript 添加和移除函数的通用方法
2009/10/20 Javascript
javascript跨域刷新实现代码
2011/01/01 Javascript
JQuery插件Style定制化方法的分析与比较
2012/05/03 Javascript
使用JQuery实现的分页插件分享
2015/11/05 Javascript
Google 地图类型详解及示例代码
2016/08/06 Javascript
浅谈js数据类型判断与数组判断
2016/08/29 Javascript
从零学习node.js之mysql数据库的操作(五)
2017/02/24 Javascript
从零学习node.js之详解异步控制工具async(八)
2017/02/27 Javascript
jQuery实现的事件绑定功能基本示例
2017/10/11 jQuery
详解Angular5路由传值方式及其相关问题
2018/04/28 Javascript
jQuery实现表单动态添加数据并提交的方法
2018/07/19 jQuery
vue实现评论列表功能
2019/10/25 Javascript
非常漂亮的js烟花效果
2020/03/10 Javascript
[02:16]DOTA2英雄基础教程 干扰者
2014/01/15 DOTA
[00:52]黑暗之门更新 新英雄孽主驾临DOTA2
2016/08/24 DOTA
[02:00]最后,我终于出了辉耀
2018/03/27 DOTA
浅谈Python生成器generator之next和send的运行流程(详解)
2017/05/08 Python
django创建最简单HTML页面跳转方法
2019/08/16 Python
画pytorch模型图,以及参数计算的方法
2019/08/17 Python
2020版Python学习路线图(附学习资料)
2020/09/15 Python
HTML5中Localstorage的使用教程
2015/07/09 HTML / CSS
欧缇丽英国官方网站:Caudalie英国
2016/08/17 全球购物
医药专业应届毕业生求职信范文
2014/01/01 职场文书
《假如》教学反思
2014/04/17 职场文书
Opencv中cv2.floodFill算法的使用
2021/06/18 Python
node.js如何自定义实现一个EventEmitter
2021/07/16 Javascript
css常用字体属性与背景属性介绍
2022/02/28 HTML / CSS