CSS两栏布局,左边定宽,右边自适应怎么实现?

时间:2022-11-02 20:48:34

这是页面布局的一个经典问题,总结下几种可行性的方法。

左边布局定好宽度,右边布局实现自适应。


方法一:可以用用flex布局,给父容器设置 display:flex;Right部分设置 flex:1 ;left只是之前定好的宽度;

<!DOCTYPE html>
<html>
<head>
<title>布局</title>
<meta charset="utf-8">
<style type="text/css">
.left{
  width: 300px;
  height: 200px;
  background-color: blue;
}
.box{
  display: flex;
}
.right{
  flex: 1;
  height: 200px;
  background-color: red;
}
</style>
</head>
<body> 
    <div class="box">  
         <div class="left">left</div>
         <div class="right">right</div> 
    </div>
</body>
</html>


方法二:左边设置左浮动,右边宽度设置100%;

<!DOCTYPE html>
<html>
<head>
<title>布局</title>
<meta charset="utf-8">
<style type="text/css">
.left{
  width: 300px;
  height: 200px;
  background-color: blue;
}
.box{
  display: flex;
}
.right{
  flex: 1;
  height: 200px;
  background-color: red;
}
</style>
</head>
<body> 
    <div class="box">  
         <div class="left">left</div>
         <div class="right">right</div> 
    </div>
</body>
</html>


方法三:使用负margin为自适应部分添加容器 .container, 同时改变左右部分的位置,如下:

<!DOCTYPE html>
<html>
<head>
<title>布局</title>
<meta charset="utf-8">
<style type="text/css">
.container{
 float: left;
 width: 100%;
}
.right{
 margin-left: 300px;
 height: 200px;
 background-color: red;
}
.left{
 float:left;
 margin-left: -100%;
 width: 300px;
 height: 200px;
 background-color: blue;
}

</style>
</head>
<body>
<div class="container">
<div class="right">right</div> 
</div>
    <div class="left">left</div>
</body>
</html>


方法四:设置浮动 + 在 css 中使用 calc(四则运算)函数

CSS两栏布局,左边定宽,右边自适应怎么实现?
【分析】
1. 浮动。(注意:为了不影响其他元素,别忘了在父级上清除浮动)
2.  calc() = calc(四则运算)  用于在 css 中动态计算长度值,需要注意的是, 运算符前后都需要保留一个空格 ,例如: width: calc(100% - 10px)
3. 原理是利用 vw   viewport width 。1vw = viewport 宽度的 1%, 100vw = viewport width,
同样的还有 vh: viewport height。1vw = viewport 高度的 1%, 100vh = viewport height。
浏览器支持情况: 主流浏览器、IE10+ 
vw 和 vh 会随着viewport 的变化而变化,因此十分适合于自适应场景来使用。

。。。