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 相关文章推荐
CSS教程:CSS3圆角属性
Apr 02 HTML / CSS
css背景图片的背景裁切、背景透明度、背景变换等效果运用
Dec 24 HTML / CSS
CSS3实现多背景展示效果通过CSS3定位多张背景
Aug 10 HTML / CSS
CSS3实例分享--超炫checkbox复选框和radio单选框
Sep 01 HTML / CSS
一款利用纯css3实现的360度翻转按钮的实例教程
Nov 05 HTML / CSS
CSS3实现自定义Checkbox特效实例代码
Apr 24 HTML / CSS
CSS3实现伪类hover离开时平滑过渡效果示例
Aug 10 HTML / CSS
用HTML5中的Canvas结合公式绘制粒子运动的教程
May 08 HTML / CSS
HTML5 History API 实现无刷新跳转
Jan 11 HTML / CSS
多视角3D可旋转的HTML5 Logo动画
Mar 02 HTML / CSS
AmazeUI 折叠面板的实现代码
Aug 17 HTML / CSS
如何解决flex文本溢出问题小结
Jul 15 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
php下通过伪造http头破解防盗链的代码
2010/07/03 PHP
php模拟post行为代码总结(POST方式不是绝对安全)
2012/02/22 PHP
浅析php中json_encode()和json_decode()
2014/05/25 PHP
php实现发送微信模板消息的方法
2015/03/07 PHP
PHP开发中解决并发问题的几种实现方法分析
2017/11/13 PHP
Juqery Html(),append()等方法的Bug解决方法
2010/12/13 Javascript
javascript中的__defineGetter__和__defineSetter__介绍
2014/08/15 Javascript
使用jQuery实现input数值增量和减量的方法
2015/01/24 Javascript
js实现的二级横向菜单条实例
2015/08/22 Javascript
JS通过Cookie判断页面是否为首次打开
2016/02/05 Javascript
微信小程序 template模板详解及实例代码
2017/03/09 Javascript
js学习总结之DOM2兼容处理重复问题的解决方法
2017/07/27 Javascript
Vue 过滤器filters及基本用法
2017/12/26 Javascript
了解ESlint和其相关操作小结
2018/05/21 Javascript
vue 1.0 结合animate.css定义动画效果
2018/07/11 Javascript
JSONP原理及应用实例详解
2018/09/13 Javascript
js简单粗暴的发布订阅示例代码
2021/01/23 Javascript
Python检测网络延迟的代码
2018/05/15 Python
Python基础教程之if判断,while循环,循环嵌套
2019/04/25 Python
python求最大值,不使用内置函数的实现方法
2019/07/09 Python
django的聚合函数和aggregate、annotate方法使用详解
2019/07/23 Python
Form表单及django的form表单的补充
2019/07/25 Python
Python IDE Pycharm中的快捷键列表用法
2019/08/08 Python
Python tkinter三种布局实例详解
2020/01/06 Python
django实现模板中的字符串文字和自动转义
2020/03/31 Python
CSS3中媒体查询结合rem布局适配手机屏幕
2019/06/10 HTML / CSS
Html5游戏开发之乒乓Ping Pong游戏示例(二)
2013/01/21 HTML / CSS
SK-II神仙水美国官网:SK-II美国
2020/02/25 全球购物
网络信息管理员岗位职责
2014/01/05 职场文书
预备党员思想汇报
2014/01/08 职场文书
大学毕业寄语大全
2014/04/10 职场文书
2014年小学辅导员工作总结
2014/12/23 职场文书
2015年初中教师个人工作总结
2015/07/21 职场文书
Python读取文件夹下的所有文件实例代码
2021/04/02 Python
通过Qt连接OpenGauss数据库的详细教程
2021/06/23 PostgreSQL
js中Map和Set的用法及区别实例详解
2022/02/15 Javascript