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 相关文章推荐
IE滤镜与CSS3效果(详细整理分享)
Jan 25 HTML / CSS
html5+css3气泡组件的实现
Nov 21 HTML / CSS
CSS3之2D与3D变换的实现方法
Jan 28 HTML / CSS
CSS3+HTML5+JS 实现一个块的收缩与展开动画效果
Nov 17 HTML / CSS
如何使用html5与css3完成google涂鸦动画
Dec 16 HTML / CSS
html5中为audio标签增加停止按钮动作实现方法
Jan 04 HTML / CSS
html5 Canvas画图教程(8)—canvas里画曲线之bezierCurveTo方法
Jan 09 HTML / CSS
html5新增的属性和废除的属性简要概述
Feb 20 HTML / CSS
HTML5中新标签和常用标签详解
Mar 07 HTML / CSS
Html5 滚动穿透的方法
May 13 HTML / CSS
AmazeUI 列表的实现示例
Aug 17 HTML / CSS
HTTP中的Content-type详解
Jan 18 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
vBulletin HACK----关于排版的两个HACK
2006/10/09 PHP
PHP mysql与mysqli事务使用说明 分享
2013/08/17 PHP
Yii操作数据库实现动态获取表名的方法
2016/03/29 PHP
完美利用Yii2微信后台开发的系列总结
2016/07/18 PHP
thinkPHP数据库增删改查操作方法实例详解
2016/12/06 PHP
php实现留言板功能(代码详解)
2017/03/28 PHP
TP5框架实现一次选择多张图片并预览的方法示例
2020/04/04 PHP
利用javascript查看html源文件
2006/11/08 Javascript
jQuery 核心函数以及jQuery对象
2010/03/23 Javascript
用js来获取上传的文件名纯粹是为了美化而用
2013/10/23 Javascript
open 动态修改img的onclick事件示例代码
2013/11/13 Javascript
js判断是否为ie的方法小结
2014/01/13 Javascript
手机号码,密码正则验证
2014/09/04 Javascript
JS限制文本框只能输入数字和字母方法
2015/02/28 Javascript
利用JS实现页面删除并重新排序功能
2016/12/09 Javascript
js 原型对象和原型链理解
2017/02/09 Javascript
vue interceptor 使用教程实例详解
2018/09/13 Javascript
element ui table 增加筛选的方法示例
2018/11/02 Javascript
JavaScript 类的封装操作示例详解
2020/05/16 Javascript
JavaScript ES 模块的使用
2020/11/12 Javascript
在Python下利用OpenCV来旋转图像的教程
2015/04/16 Python
Python 爬虫模拟登陆知乎
2016/09/23 Python
python队列原理及实现方法示例
2019/11/27 Python
Python 中由 yield 实现异步操作
2020/05/04 Python
通过实例解析python and和or使用方法
2020/11/14 Python
Linux系统下升级pip的完整步骤
2021/01/31 Python
教师评优事迹材料
2014/01/10 职场文书
校园摄影活动策划方案
2014/02/05 职场文书
大学生职业规划书的范本
2014/02/18 职场文书
财务会计自荐信范文
2014/02/21 职场文书
银行奉献演讲稿
2014/09/16 职场文书
2014年维稳工作总结
2014/11/18 职场文书
幼儿园教师个人总结
2015/02/05 职场文书
新店开张宣传语
2015/07/13 职场文书
Python max函数中key的用法及原理解析
2021/06/26 Python
Go中的条件语句Switch示例详解
2021/08/23 Golang