三栏布局中间自适应总结

三栏布局,中间自适应这个经典的问题,之前也看了很多。今天准备在自己的博客里面总结一下,加深自己的理解。

方式一:左边左浮动,右边右浮动,中间自适应

<style>
    .left{
       float: left;
        height: 200px;
        width: 200px;
        background-color: aquamarine;
        border: solid 1px black;
    }
    .right{

      float: right;
        height: 200px;
        width: 300px;
        background-color: darkgreen;
        border: solid 1px black;
    }
    .middle{
        height: 200px;
        width: auto;
        background-color: cornflowerblue;
        border: solid 1px black;
        margin: 0 320px 0 220px; //左右间距设置成左右div的宽带+20 撑开了一段空隙

    }
</style>

<div class="left"></div>
<div class="right"></div>
<div class="middle"></div>

注意点:
1.<div class="middle"></div>一定要放在最后*,因为如果middle放在第一个,会占据文档流位置,left和right的浮动只能从第二行开始了。
2.当浏览器窗口很小的时候,最右边元素会被压迫到下一行。

下面附上效果图:

方式二:绝对定位法

<style>
    .left{
        position: absolute;
        height: 200px;
        width: 200px;
        top: 0;
        left: 0;
        background-color: aquamarine;
        border: solid 1px black;
    }
    .right{
        position: absolute;
        height: 200px;
        width: 300px;
        top: 0;
        right: 0;
        background-color: darkgreen;
        border: solid 1px black;
    }
    .middle{
        height: 200px;
        width: auto;
        background-color: cornflowerblue;
        border: solid 1px black;
        margin: 0 320px 0 220px;

    }
</style>
<div class="middle"></div>
<div class="left"></div>
<div class="right"></div>

注意点:
1.因为是绝对定位,所以middle、left和right的位置先后顺序可以随便放。
2.需要对中间或者两边的top属性进行微调,否则中间与两边高度不齐,效果如下所示

方式三:浮动+margin负值法(又被称为双飞翼布局法)

<style>
    .left{
        /*position: absolute;*/
        float: left;
        height: 200px;
        width: 200px;
        background-color: aquamarine;
        /*border: solid 1px black;*/
        margin-left: -100%;
    }
    .right{
        /*position: absolute;*/
        float: left;
        height: 200px;
        width: 300px;
        background-color: darkgreen;
        /*border: solid 1px black;*/
        margin-left: -300px;
    }
    .middle{
        float: left;
        width: 100%;
        background-color: cornflowerblue;
        /*border: solid 1px black;*/

    }
    .main{
        height: 200px;
        margin: 0 320px 0 220px;
        background-color: brown;
    }
</style>
<div class="middle">
<div class="main">中间</div>
</div>
<div class="left">左边</div>
<div class="right">右边</div>

注意点:
1.middke要放在最前面,这样left和right才能覆盖上去。
2.left的margin-left设置成-100%,浮动到第一行最左侧,right的margin-left设置成负的自身宽度,正好浮动到第一行最右侧。
3.<div>的border宽度会影响left盒子和right盒子向第一行浮动的位置,因为会把border的宽度算进去,比如本例子中,如果border没有被注释掉,right盒子的margin-left设置成-300是无法浮动到第一行的,要-304才能浮动到第一行,加上了border的宽度。
4.在middle里面嵌套一个main盒子,是为了通过main盒子设置margin-left和margin-right。如果直接在浮动的middle上设置,是会有问题的,整体会向右偏移margin-left距离。

效果图如下:

方法四:css3 弹性盒子flex

<style>
    .contain{
        display: flex;
    }
    .left{
        height: 200px;
        width: 200px;
        background-color: aquamarine;
    }
    .right{
        height: 200px;
        width: 300px;
        background-color: darkgreen;
    }
    .middle{
        margin-left: 20px;
        margin-right: 20px;
        width: 100%;
        height: 200px;
        background-color: cornflowerblue;
    }
</style>

<div class="contain">
<div class="left"></div>
<div class="middle"></div>
<div class="right"></div>
</div>

注意点:
1.代码十分简洁,只要在最外层加一个大盒子包裹,并设置display等于flex就可以了,间距可以用margin进行调整。
2.middle盒子一定要放在中间,按顺序来。
3.当浏览器窗口缩到很小时,也不会把最右边的right盒子挤到下一行。

效果图如下:

总结:这就是常用的几种布局方式,还有一种圣杯布局法原理跟双飞翼相似,但是更复杂一些,相比而言还是推荐双飞翼布局法。弹性盒子的布局法应该是最简洁实用的,优点比较突出。

本文转载于:猿2048?https://www.mk2048.com/blog/blog.php?id=hhhjaj1b20j

原文地址:https://www.cnblogs.com/jlfw/p/12535765.html

时间: 2024-10-10 20:19:40

三栏布局中间自适应总结的相关文章

记一道css面试题 : 三栏布局两边宽度固定,中间宽度自适应,并且布局随屏幕大小改变。

前几天面试时有道css题没做出来,回来好好学习一番后把其记录下来. 题目是这样的:左中右三栏布局,左右两栏宽度固定,左右两栏的宽度为200像素,中间栏宽度自适应.当屏幕小于600px时,3栏会分别占用一行.像这样 当屏幕大于600px时,是这样 我做出来用了css3的@media,如果不用这个,好吧,水平有限想不出来... 下面是代码: <!DOCTYPE> <html> <head> <style> body{ margin: 0 ; padding: 0

css高度已知,左右定宽,中间自适应三栏布局

css高度已知,左右定宽,中间自适应三栏布局: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X

Css三栏布局自适应实现几种方法

Css三栏布局自适应实现几种方法 自适应实现方法我们可以从三个方法来做,一个是绝对定位 ,自身浮动法 和margin负值法了,下面我们一起来看看这三个例子吧,希望例子能帮助到各位同学. 绝对定位法三栏布局自适应: 代码如下 复制代码 <!doctype html> <html> <head> <meta charset="utf-8"> <title>绝对定位法</title> <style>  .pa

中间固定 两边平分的 自适应三栏布局

NEC 和网上有很多关于两栏三栏布局的案例,而关于三栏布局大体为: 两边固定大小 中间自适应: 无意中一个朋友问我: 中间固定 两边平分的 自适应三栏布局 怎么实?! 当时第一时间想到的是用 display: flex; 然而这个属性不是全兼容的,目前市场上一些国产机的浏览器 实现不了想要的结果: 回去细想后觉得用position是个方法——不管怎样这是在布局中被我用坏了的属性,总能帮我解决很多问题! 以下是贴出的代码: <style> *{ padding: 0; margin: 0; }

CSS实现经典三栏布局(两侧定宽,中间自适应)

近期开始独立攻克百度前端技术学院的各项任务,之前做了两个比较复杂的页面,深深感觉基础不好,好多css的语句都是为了实现效果而去写的,出现了好多问题,而自己的解决方案也不够优,于是决定从基础开始学起,循序渐进. 第一个任务是实现一个三栏布局,外部的两栏固定宽度,中间自适应,以下是效果图: 我使用了两种方法实现以上效果:float和position 以下是float方法的CSS代码: 1 .team-inf{ 2 float: left; 3 width: 200px; 4 } 5 .logo-gr

三栏布局 中栏实现自适应宽度

对于div自适应宽度,网上的说法基本上都是将要自适应宽度的div放在其它固定宽度的最后,不指定其float属性或将float属性指定为none,比如三栏布局居中的一栏为自适应宽度,就可以这样来定义三栏div: <div id="left" style="float:left;width:100px;">这是左栏</div> <div id="right" style="float:right;width:1

三栏布局(二)-------上下宽高固定,中间自适应

上一篇写的是左右宽高固定,中间自适应,根据上一篇的内容,总结了下上下宽高固定,中间自适应的几种布局方式,话不多说,直接上代码. <!DOCTYPE html> <html> <head> <title>上中下三栏布局</title> <style type="text/css"> html * { padding: 0; margin: 0; } html, body{ height:100%; } .layout

CSS布局-三栏布局,左右宽度300px,中间自适应

tips: css中“>”是: css3特有的选择器,A>B 表示选择A元素的所有子B元素. 与A B的区别在于,A B选择所有后代元素,而A>B只选择一代.  .a,.b{逗号指相同的css样式}:.a .b{空格指后代元素}:.a>.b{大于号指子代元素}: 一.浮动解决方案 代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&q

转载:CSS实现三栏布局的四种方法示例

转载网址:http://www.jb51.net/css/529846.html 前言 其实不管是三栏布局还是两栏布局都是我们在平时项目里经常使用的,也许你不知道什么事三栏布局什么是两栏布局但实际已经在用,或许你知道三栏布局的一种或两种方法,但实际操作中也只会依赖那某一种方法,本文具体的介绍了三栏布局的四种方法,并介绍了它的使用场景. 所谓三栏布局就是指页面分为左中右三部分然后对中间一部分做自适应的一种布局方式. 1.绝对定位法 HTML代码如下: <div class="left&quo