这个效果,其实和一侧固定,一侧自适应是一样的原理
以下代码分别用到了 position、float、display: flex / grid、calc
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
<style>
.box {
border: 1px solid #000;
}
.box1 {
background-color: #f00;
}
.box2 {
background-color: #aee;
}
.box3 {
background-color: #ccc;
}
/** 第一种 定位 */
.absolute {
position: relative;
}
.absolute .box1 {
width: 200px;
height: 300px;
position: absolute;
left: 0;
top: 0;
}
.absolute .box2 {
height: 200px;
margin-left: 200px;
margin-right: 200px;
}
.absolute .box3 {
width: 200px;
height: 300px;
position: absolute;
right: 0;
top: 0;
}
/** 第二种 实现中间的宽度是随着文字的增加而变宽 而不是占满全部剩余空间 */
.float .box1 {
width: 200px;
height: 300px;
float: left;
}
.float .box2 {
height: 100px;
/* 加这个是为了防止文字过多将左右盒子顶下来 */
max-width: calc(100% - 400px);
display: inline-block;
}
.float .box3 {
width: 200px;
height: 300px;
float: right;
}
/* 第三种 使用左右浮动 前两个必须是浮动的 第三个自适应 */
.float1 .box1 {
width: 200px;
height: 300px;
float: left;
}
.float1 .box2 {
width: 200px;
height: 300px;
float: right;
}
.float1 .box3 {
height: 100px;
}
/** 第四种 flex */
.calc-flex {
display: flex;
}
.calc-flex .box1 {
width: 200px;
height: 200px;
}
.calc-flex .box2 {
width: calc(100% - 400px);
}
.calc-flex .box3 {
width: 200px;
height: 200px;
}
/** 第五种 grid */
.grid {
display: grid;
grid-template-columns: 200px calc(100% - 400px) 200px;
grid-template-rows: 300px;
}
</style>
</head>
<body>
<div class="box grid">
<div class="box1"></div>
<div class="box2">222222sssssssssssssssssssssss</div>
<div class="box3"></div>
</div>
</body>
</html>
将对应类名,依次加到box上就能看到效果