css一侧固定,一侧自适应布局的实现
左侧固定,右边自适应
这是一个很常用的css布局,尤其是在后台页面当中,使用频繁。同事也是面试当中常常问到的考点。今天,我们就来总结一下。
第一种方法:浮动布局
准备工作: 先准备2个div 随便放点东西进行填充!
<div id="aside">
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Labore provident dolor in voluptatum tempore non, placeat obcaecati totam ut delectus libero excepturi distinctio asperiores odit nobis soluta, esse aspernatur beatae.
</div>
<div id="content">
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Labore provident dolor in voluptatum tempore non, placeat obcaecati totam ut delectus libero excepturi distinctio asperiores odit nobis soluta, esse aspernatur beatae.
</div>
#aside{
float:left;
width:200px;
background-color:red;
}
#content{
margin-left:200px;
background-color:blue;
}
- 关键点:
一、先让固定宽度的div浮动!使其脱离文档流。
二、margin-left的值等于固定div的宽度相等。
方法二:利用margin负值。
准备:需要三个div了。
<div id="aside">
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Labore provident dolor in voluptatum tempore non, placeat obcaecati totam ut delectus libero excepturi distinctio asperiores odit nobis soluta, esse aspernatur beatae.
</div>
<div id="content">
<div class="inner">
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Mollitia labore facere delectus quaerat expedita, tenetur recusandae tempora eos natus suscipit voluptatum necessitatibus soluta voluptates modi ullam. Ab minima similique, illum!
</div>
</div>
#aside{
float: left;
margin-right: -200px;
width: 200px;
background-color: red;
}
#content{
float: right;
}
#content .inner{
margin-left: 200px;
background-color: blue;
}
关键点:
1. 是固定宽度的div脱离文档流。
2. 利用marin负值可以使得,后面的div可以与前面的div 保持同行显示。
3. 给包裹内容的div加margin-left 可以使得与左边的文字不重叠
第三种方法:calc()计算属性。
<div id="aside">
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Labore provident dolor in voluptatum tempore non, placeat obcaecati totam ut delectus libero excepturi distinctio asperiores odit nobis soluta, esse aspernatur beatae.
</div>
<div id="content">
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Labore provident dolor in voluptatum tempore non, placeat obcaecati totam ut delectus libero excepturi distinctio asperiores odit nobis soluta, esse aspernatur beatae.
</div>
#aside{
float: left;
width: 200px;
}
#content{
float: right;
calc(100% - 200px);
}
- 注意:使用calc计算属性的时候 运算符(- +等等)两边必须有空格
- 关键点:
1. 注意两个div必须一左一右浮动。
2. calc的宽度必须要减去的宽度要与固定宽度保持一致。
第四种方法:flex
<div id="aside">
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Fugiat magnam nihil nostrum, similique dolor deserunt voluptatem pariatur alias, ipsum, error quos quo accusantium. Deleniti neque, pariatur voluptates maxime quam perferendis!
</div>
<div id="content">
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Consectetur tempora sequi minima, placeat esse nulla dolor dolores praesentium illo, distinctio fugiat eligendi debitis animi ut impedit, magni vitae officiis, architecto.
</div>
body{
display: flex;
}
#aside{
flex: 0 0 200px;
background-color: red;
}
#content{
flex: 1;
background-color:blue;
}
- 关键点:
1. 需要给父级div设置display: flex属性。
2. 固定宽度的div设置flex: 0 0 200px即可。
3. 内容区域的div直接写出flex: 1即可。
最后:
需要说明的是方法三和方法四的兼容性不强。慎用!面试的时候可以一提。有兴趣的同学可以看看阮一峰老师的flex教程。
原文章链接:https://blog.csdn.net/u011456552/article/details/72936988
————————————————————————————————————————————————————————
在转载文章基础上补充一种:
标准浏览器的方法
把wrap设为display:table并指定宽度100%,然后把content+sidebar设为display:table-cell;然后只给sidebar指定一个宽度,那么content的宽度就变成自适应了。
代码很少,而且不会有额外标签。不过这是IE7都无效的方法。
<div class="wrap">
<div class="slider">左侧</div>
<div class="content">
<div>右侧</div>
</div>
</div>
<footer>我是底部</footer>
css代码:
.wrap{width:100%; display:table;}
.content,.slider{display:table-cell; height:300px;}
.slider{width:300px; background:#eeeeee; margin-right:200px;}
.content{padding-left:20px;}
.content div{background:#464646; height:100%;}
footer{width:100%; background:red;}
注意:如果您想要侧边栏和内容区之间有空隙,最好再嵌套一层div,否则,两个之间即便你加了margin值,也一样是紧贴在一起的,我上面的方法就是有空隙的方法,如果您不需要有空隙,可以不要再嵌套一层div的
table-cell同样会被其他一些CSS属性破坏,例如float, position:absolute,所以,在使用display:table-cell与float:left或是position:absolute属性尽量不用同用。
设置了display:table-cell的元素对宽度高度敏感,对margin值无反应,响应padding属性,基本上就是活脱脱的一个td标签元素了。
上一篇: 对于前端开发中的几种布局方式的理解
推荐阅读
-
左侧固定宽度,右侧自适应宽度的CSS布局
-
左侧固定宽度,右侧自适应宽度的CSS布局
-
CSS实现表格首行首列固定和自适应窗口的实例代码
-
css实现两栏布局,左侧固定宽,右侧自适应的多种方法
-
CSS实现九宫格布局(自适应)的示例代码
-
【请教】如何实现横向布局时图片A居中宽度固定,左右两侧由不同的图片B、C填充为背景_html/css_WEB-ITnose
-
css实现两边固定中间自适应布局的四种常用方法
-
CSS实现三栏自适应布局(两边宽度固定,中间自适应)
-
css实现可以计算的自适应布局—calc()
-
DIV+CSS 布局一行两列,左列固定宽度,右列自适应宽度;设置最小宽度,窗口小的时候显示滚动条._html/css_WEB-ITnose