三列布局(左右固定,中间自适应)

本文详细介绍了五种常用的网页布局方法:定位布局、浮动布局、圣杯布局、双飞翼布局及Flex布局,每种方法均附有示例代码,帮助读者理解不同布局方式的特点与适用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、定位

<div class="left">我是左边,我是固定的</div>
<div class="middle">我是中间,我是自适应的,左边右边都position固定了,他们脱离了文档流,我终于得到机会挤进中间啦!只要我margin一下就没人会挡住我啦!我可真是个小机灵鬼(同时,我还是个自由人,我div写在开头中间结尾都可以呢)</div>
<div class="right">我是右边,我也是固定的</div>
<style type="text/css">
    *{
        margin:0;
        padding: 0;
    }
        .left, .right{
            width: 200px;
            height: 200px;
            background: red;
            position: absolute;
            top: 0;
        }
        .left{
            left: 0;        
        }
        .right{
            right: 0;
        }
        .middle{
            height: 200px;
            background:#efbdbd; 
            margin-left: 200px;
            margin-right: 200px;
        }
    </style>

图片描述

2、浮动

<div class="left">我是左边,我是固定的</div>
<div class="right">我是右边,我也是固定的</div>
<div class="middle">我是中间,我是自适应的,左右浮动脱离了文档流,我才挤进来呢,margin一下也不会被挡住啦(这里我div必须在左右的后面,因为我在前面的话,他们会浮在我后面的哟)</div>
.left, .right{
            width: 200px;
            height: 200px;
            background: red;
        }
        .left{
            float: left;
        }
        .right{
            float: right;
        }
        .middle{
            height: 200px;
            background:#efbdbd; 
            margin-left: 200px;
            margin-right: 200px;
        }

图片描述

3、圣杯布局

<div class="content">
    <div class="middle">我是中间,我是自适应的
        <p>
            1、左中右float:left;顺便position:relative后面会用到<br>
            2、中间width:100%;<br>
            3、这时,中间元素会把两边撑开,那么我们用margin-left把他拉回来;<br>
            4、两边元素倒是回来了,中间被盖住了怎么办?不着急,整个外层加个padding;<br>
            5、解决了上一个问题,左右元素又偏了!还记得刚开始的定位吗?对!对左右元素定位就好啦!
        </p>(我div必须在第一位)
    </div>
    <div class="left">我是左边,我是固定的</div>    
    <div class="right">我是右边,我也是固定的</div>
</div>
<style type="text/css">

    .middle, .left, .right{
        float: left;
        height: 200px;
        position: relative;
    }
    .middle{
        width: 100%;
        background:#efbdbd; 
    }
    .content{
        padding:0 200px;
    }
    .left{
        width:200px;
        background:red;
        margin-left: -100%;
        left: -200px;
    }
    .right{
        background:red;
        width:200px;  
        margin-left: -200px;
        right: -200px;
    }
    
    </style>

图片描述

4、双飞翼布局

<div class="middle">
        <div class="middle_son">我是中间,我是自适应的
            <p>
                1、左中右float:left;<br>
                2、中间width:100%;<br>
                3、这时,中间元素会把两边撑开,那么我们用margin-left把他拉回来;<br>
                4、两边元素倒是回来了,中间被盖住了怎么办?这次我们不在整个外层加个padding了;我们在middle里面加个子标签并margin<br>
                5、可以啦!
            </p>(我div必须在第一位)
        </div>
    </div>
    <div class="left">我是左边,我是固定的</div>    
    <div class="right">我是右边,我也是固定的</div>
<style type="text/css">

    .middle, .left, .right{
        float: left;
        height: 200px;
    }
    .middle{
        width: 100%;
        background:#efbdbd; 
        
    }
    .middle_son{
        margin:0 200px;
        
    }
    .left{
        width:200px;
        background:red;
        margin-left: -100%;
    }
    .right{
        background:red;
        width:200px;  
        margin-left: -200px;
    }
    
    </style>

图片描述

5、flex

<div class="content">
    <div class="left">我是左边,我是固定的</div>
    <div class="middle">我是中间,我是自适应的,利用css3的新属性fles,弹性布局,父元素设置display:flex,中间div设置flex;1;</div>
    <div class="right">我是右边,我也是固定的</div>
</div>
<style type="text/css">
        .content{
            display: flex;
        }
        .left, .right{
            width: 200px;
            height: 200px;
            background: red;
        }
        
        .middle{
            height: 200px;
            background:#efbdbd; 
            flex: 1;
        }
    </style>

图片描述

如果想要做两列布局(左边固定,右边自适应),全部可以参考这个,唯一有一种方法自己的方法利用BFC也很简单。
圣杯布局和双飞翼布局是参考了这位同学的,可以说是照搬来的。
https://www.cnblogs.com/imwtr...

<think>嗯,用户想用JavaScript实现左右固定宽度、中间自适应布局,但问题描述里又提到了CSS Flexbox。可能用户对前端布局的实现方式不太清楚,或者想结合JavaScript来实现动态调整?不过根据引用内容,三栏布局通常用CSS就能完成,尤其是Flexbox方法。用户可能误解了需要用到JavaScript,但实际上纯CSS就能搞定。 首先,需要确认用户的需求。他们想要左右两栏固定宽度,中间自适应。根据引用[1]和[3],Flexbox是推荐的方法,因为弹性布局很适合这种场景。用户可能已经看过相关的CSS方法,但想了解如何用JavaScript配合实现,或者动态调整布局? 不过根据引用中的示例,比如引用[2]的代码,用的是绝对定位,可能用户看到的是不同的实现方式。需要明确的是,Flexbox本身不需要JavaScript,除非有动态内容加载后的调整。但通常三栏布局只需CSS即可。 所以,我应该先解释如何用Flexbox实现,然后考虑是否需要JS部分。用户可能误以为需要JS,但正确的做法是纯CSS。如果有交互需求,比如调整左右栏宽度,这时候可能需要JS监听事件并修改样式。但原问题可能只需要布局结构,所以重点在CSS。 需要按照用户的问题,给出Flexbox的实现步骤,代码示例,并说明左右固定中间自适应的原理。可能还要对比其他方法,但引用里提到Flexbox是方法一,所以优先介绍。同时,引用中的代码可能有帮助,比如引用[2]中的position用法,但Flexbox更简洁。 总结回答结构:先说明Flexbox的优势,然后分步骤讲解HTML结构和CSS样式,强调左右固定宽度和中间flex:1。最后,如果有必要,补充JS的作用,但主要用CSS实现。确保代码正确,符合引用中的方法。</think>根据CSS Flexbox特性,JavaScript布局中实现左右固定中间自适应的完整解决方案如下: ### 一、核心实现步骤 1. **容器设置弹性布局** ```css .container { display: flex; height: 100vh; } ``` 2. **侧边栏固定宽度** ```css .left, .right { flex: 0 0 200px; /* 不缩放不伸展,固定200px */ background: #f0f0f0; } ``` 3. **中间区域自适应** ```css .main { flex: 1; /* 自动填充剩余空间 */ min-width: 0; /* 防止内容溢出 */ } ``` ### 二、完整代码示例 ```html <!DOCTYPE html> <html> <head> <style> body { margin: 0 } .container { display: flex; height: 100vh; } .left, .right { flex: 0 0 200px; background: #f0f0f0; padding: 20px; } .main { flex: 1; padding: 20px; background: #fff; min-width: 0; /* 关键:防止文本溢出 */ } </style> </head> <body> <div class="container"> <div class="left">左侧固定内容</div> <div class="main"> 中间自适应内容(自动填充剩余空间) </div> <div class="right">右侧固定内容</div> </div> </body> </html> ``` ### 三、关键原理说明 1. `flex: 0 0 200px` 表示元素不扩展不收缩,固定基础宽度200px[^3] 2. `flex: 1` 等价于 `flex-grow: 1`,使元素自动填充剩余空间 3. `min-width: 0` 解决内容溢出问题,当中间内容过长时强制允许宽度压缩 ### 四、JavaScript增强方案 当需要动态调整布局时,可通过JS修改样式: ```javascript // 动态修改侧边栏宽度 document.querySelector('.left').style.flex = '0 0 300px'; // 实时响应窗口变化 window.addEventListener('resize', () => { console.log('当前中间区域宽度:', document.querySelector('.main').offsetWidth); }); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值