三栏布局
display: inline-block;
width: 240px;
}
.right {
display: inline-block;
width: calc(100% - 240px);
}
//使用 calc() 函数计算 <div> 元素的宽度
grid
三栏布局
其中一列宽度自适应。
float布局
缺点:html结构不正确,当包含区域宽度小于左右框之和,右边框会被下来。float布局需要清除浮动,因为float 会脱离文档流,会造成高度塌陷的问题。
两边float+中间margin
两变固定,中间自适应中间元素margin值控制两边间距
宽度小于左右部分宽度之和时,右侧部分被下去
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<style>
.left {
background-color: #a00;
}
.right {
float: right;
width: 300px;
background-color: #0aa;
}
.center {
margin: 0 300px;
background-color: #aa0;
overflow: auto;
}
</style>
<section class="float">
<article class="left">
<h1>我是浮动布局左框</h1>
</article>
<article class="right">
<h1>我是浮动布局右框</h1>
</article>
<article class="center">
<h1>我是浮动布局中间框</h1>
</section>
</body>
</html>
BFC布局
将main变成BFC,就不会和浮动元素发生重叠。
父元素设置overflow: hidden;
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<style>
*{
margin: 0;
padding: 0;
}
.left {
float: left;
background-color: red;
width: 100px;
height: 200px;
.right {
float: right;
background-color: blue;
width: 100px;
height: 200px;
}
.main{
background-color: green;
height: 200px;
overflow: hidden;
}
</style>
<div class="container">
<div class="left"></div>
<div class="right"></div>
<div class="main">22111111jygjegrearewqrewqewgrhtyhyt</div>
</div>
</body>
</html>
table布局
优点:表格布局被称之为已经淘汰的布局,包括现在应该也很少有人使用,包括flex布局不兼容的情况下table 还可以尝试,类似这种三栏布局,table的实现也很简单,这个东⻄自我觉得看个人喜爱了,能满足日常使用
的话用用也未尝不可。
缺点:表格布局相当于其他布局,使用相对繁琐,代码量大,同时也存在缺陷,当单元格的一个格子超出高度
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<style>
.table {
display: table;
width: 100%;
}
.table > article {
display: table-cell;
}
.left {
width: 300px;
background-color: #a00;
}
.center {
.right {
width: 300px;
background-color: #0aa;
}
</style>
<section class="table">
<article class="left">
<h1>我是表格布局左框</h1>
</article>
<article class="center">
<h1>我是表格布局中间框</h1>
</article>
<article class="right">
<h1>我是表格布局右框</h1>
</article>
</section>
</body>
</html>
flex弹性布局
利用flex布局,左右两栏设置固定大小,中间一栏设置为flex:1
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<style>
.flex {
display: flex;
}
.left {
width: 300px;
/flex-shrink: 0; ! 不缩小 !/
background-color: #a00;
}
.center {
/flex-grow: 1; ! 增大 !/
flex: 1;
background-color: #aa0;
}
width: 300px;
background-color: #0aa;
}
</style>
<section class=" flex">
<article class="left">
<h1>我是flex弹性布局左框</h1>
</article>
<article class="center">
<h1>我是flex弹性布局中间框</h1>
</article>
<article class="right">
<h1>我是flex弹性布局右框</h1>
</article>
</section>
</body>
</html>
grid栅格布局
优点:网格布局作为一个比较超前一点的布局自然有其独特的魅力,其布局方式布局思维都可以让你眼前一亮,有种新的思想。
缺点:兼容性
grid-template-columns 该属性是基于网格列的维度,去定义网格线的名称和网格轨道的尺寸大小。
用单位 fr 来定义网格轨道大小的弹性系数。每个定义了的网格轨道会按比例分配剩余的可用空间。当外层用一个
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<style>
.grid {
display: grid;
grid-template-columns: 300px 3fr 300px;
}
.grid .left {
background-color: #a00;
}
.grid .center {
background-color: #aa0;
}
.grid .right {
background-color: #0aa;
}
<article class="left">
<h1>我是grid栅格布局左框</h1>
</article>
<article class="center">
<h1>我是grid栅格布局中间框</h1>
</article>
<article class="right">
<h1>我是grid栅格布局右框</h1>
</article>
</section>
</body>
</html>
圣杯布局
缺点:需要多加一层标签,html顺序不对,占用了布局框的margin属性。
圣杯布局的核心是左、中、右三栏都通过float进行浮动,然后通过负值margin进行调整。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
padding-left: 100px;
padding-right: 100px;
}
.left {
float: left;
width: 100px;
height: 200px;
background-color: red;
margin-left: -100%;
position: relative;
left: -100px;
}
.right {
float: left;
width: 100px;
height: 200px;
background-color: yellow;
margin-left: -100px;
position: relative;
right: -100px;
}
float: left;
width: 100%;
height: 200px;
background-color: green;
}
</style>
<body>
<div class="container">
<div class="main">发发发发发发返回和王企鹅王企鹅王企鹅而非</div>
<div class="left"></div>
<div class="right"></div>
</div>
</body>
</body>
</html>
双飞翼布局
双飞翼布局的前两步和圣杯布局一样,只是处理中间栏部分内容被遮挡问题的解决方案有所不同:
既然main部分的内容会被遮挡,那么就在main内部再加一个content,通过设置其margin来避开遮挡,问题也就可以解决了
双飞翼布局(两边 float+margin),就是圣杯布局的改进方案。
<!DOCTYPE html>
<html lang="en">
<head>
float: left;
width: 100%;
}
.content {
height: 200px;
margin-left: 110px;
margin-right: 220px;
background-color: green;
}
/CSS伪元素::after用来创建一个伪元素,作为已选中元素的最后一个子元素。/
.main::after {
display: block;
content: '';
font-size: 0;
height: 0;
/唯一需要注意的是,需要在main后面加一个元素来清除浮动。/
clear: both;
zoom: 1;
}
.left {
float: left;
height: 200px;
width: 100px;
background-color: red;
}
.right {
width: 200px;
height: 200px;
float: left;
margin-left: -200px;
background-color: blue;
}
</style>
</head>
<body>
<div>
<div class="main">
<div class="content"></div>
</div>
<div class="left"></div>
<div class="right"></div>
</div>
</body>
</html>
定位布局
优点:很快捷,设置很方便,而且也不容易出问题,你可以很快的就能想出这种布局方式。要求父级要有非static 定位,如果没有,左右框容易偏移出去
子绝父相,父元素设置为relative,左右两栏设置为absolute+中间一栏margin。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<style>
.tree-columns-layout {
position: relative;
}
.left {
position: absolute;
left: 0;
top: 0;
width: 300px;
background-color: #a00;
}
.right {
position: absolute;
top: 0;
width: 300px;
background-color: #0aa;
}
.center {
margin: 0 300px;
background-color: #aa0;
overflow: auto;
}
</style>
<section class="tree-columns-layout">
<article class="left">
<h1>我是浮动定位左框</h1>
</article>
<article class="center">
<h1>我是浮动定位中间框</h1>
</article>
<article class="right">
<h1>我是浮动定位右框</h1>
</article>
</section>
绝对定位
三栏均设置为absolute+left+right。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<style>
{
margin: 0;
padding: 0;
}
.middle {
position: absolute;
left: 200px;
right: 200px;
height: 300px;
background-color: yellow;
}
.left {
position: absolute;
width: 200px;
height: 300px;
background-color: red;
}
.right {
position: absolute;
right: 0px;
width: 200px;
background-color: green;
height: 300px;
}
</style>
<body>
<div class="container">
<div class="middle">
</div>
<div class="left"></div>
<div class="right"></div>
</div>
</body>
</body>
全站分卷索引 · 154 卷
- 1代码随想录知识星球精华(最强八股文)第五版(前端篇))
- 2html语义化
- 3src 和 href 的区别
- 4link 与 @import 的区别
- 5iframe
- 6CSS
- 7伪元素和伪类
- 8block,inline,inline-block
- 9重排、重绘和合成
- 10盒子模型
- 11margin 合并
- 12margin和padding 的值为百分比时
- 13浮动
- 14定位
- 15CSS选择器
- 16CSS选择器优先级
- 17选择器权重Specificity
- 18CSS属性继承
- 19不可/可继承属性
- 20display: none与 visibility: hidden的区别
- 21background-size
- 22client、offset&scroll
- 23CSS3新特性
- 24flex布局
- 25常见布局
- 26三栏布局
- 27垂直居中
- 28水平垂直居中
- 29CSS画三角形
- 30使chrome支持12px以下文字
- 31响应式布局
- 32媒体查询
- 33过渡与动画
- 34JavaScript 动画 和 CSS动画
- 35SCSS
- 36CSS性能优化
- 37有哪些数据类型
- 38判断数据类型
- 39类型转换
- 40parseInt&parseFloat
- 41浮点数求和步骤
- 42十进制小数转二进制
- 430.1+0.2 为什么不等于 0.3
- 44undefined 和 undeclared 的区别
- 45JavaScript NaN 属性
- 46isFinite()&isNaN()
- 47数组
- 48对原数组有影响
- 49对原数组无影响
- 50数组去重
- 51数组拍平
- 52ES6新增的数组方法
- 53判断是否存在某个值
- 54arguments为啥不是数组
- 55对象
- 56遍历对象的方法
- 57判断对象是否具有属性
- 58for in 和 for of 的区别
- 59继承方式
- 60instanceof
- 61深浅拷贝
- 62freeze属性
- 63函数
- 64函数柯里化
- 65函数的 length
- 66箭头函数和普通函数区别
- 67构造函数
- 68执行上下文
- 69作用域
- 70作用域和作用域链
- 71闭包和内存泄漏
- 72this
- 73关于 this 的指向问题
- 74改变this指向的方法(bind / call / apply)
- 75字符串
- 76DOM和事件
- 77哪些事件支持冒泡
- 78阻止冒泡
- 79HTMLCollection、NodeList
- 80dom.onclick 和 dom.addEventListener的区别
- 81e.target和e.currentTarget
- 82页面生命周期
- 83异步
- 84内存管理GC
- 85其它
- 86JavaScript 中日期时间格式转换
- 87input和object实现双向绑定
- 88JSON.stringify()
- 89escape、encodeURI&encodeURIComponent
- 90移动端滚动穿透和溢出
- 91ES6
- 92Map字典
- 93... 与rest
- 94proxy
- 95模块化
- 96Ajax、Fetch和Axios
- 97Webpack
- 98浏览器:事件循环
- 99浏览器内核
- 100浏览器同源策略
- 101输入URL回车后发生了什么
- 102HTTP
- 103HTTP 2.0
- 104浏览器存储
- 105鉴权
- 106Webstorage
- 107浏览器执行机制
- 108AST 抽象语法树
- 109性能优化
- 110CSS
- 111网络相关
- 112使用HTTP2.0
- 113图片
- 114CDN图片
- 115其他文件优化
- 116降低APP首页开屏渲染时间
- 117页面白屏
- 118HTTPS中间人攻击
- 119Web Worker
- 120Service Worker
- 121微前端
- 122Vue
- 123v-show 和 v-if 的区别
- 124双向数据绑定的原理
- 125Vue中的插槽使用
- 126Vue中的key
- 127Vue过滤器
- 128Vue中Scoped原理
- 129Vue中$nextTick的使用
- 130Vue中实现组件通信的方式
- 131Vue-router
- 132Vue路由传参
- 133前端路由
- 134Vuex
- 135虚拟DOM
- 136DIFF 算法
- 137Vue3和Vue2有哪些区别
- 138说一说你对React的理解
- 139React事件机制
- 140说一说你对react refs的理解
- 141react中key的作用
- 142组件开发
- 143有状态组件和无状态组件
- 144函数式组件和类组件的区别
- 145PureComponent&Component
- 146常见 Hooks
- 147状态管理
- 148redux toolkit
- 149React18新特性
- 150client中的createRoot取代以前的ReactDOM.render
- 151Suspense
- 152新的Hooks
- 153VDom一定更快吗
- 154Fiber