两列布局是非常常见的需求在实际项目中,实现的方式也有很多。究其原理也都不算复杂。这里主要提出几种实现方式和原理。

  html页面基本布局如下代码所示:

  

 1 <div class="main">
2 <div class='left'>
3 左侧 1
4 </div>
5 <div class='right'>
6 右侧 1
7 <div>假如div很多的话</div>
8 <div>假如div很多的话</div>
9 <div>假如div很多的话</div>
10 <div>假如div很多的话</div>
11 假如内容很多的话
12 假如内容很多的话
13 假如内容很多的话
14 假如内容很多的话
15 假如内容很多的话
16 </div>
17 </div>

  父元素.main 包含两个子div,left和right。这里只是简单举个例子,所以布局很简单,只要有效果就好。

  一、内联div的方式:

  众所周知,html元素存在块级元素,内联元素以及内联块级元素等多种属性。在基本的block和inline两种属性基础上衍生出的inline-block,因为具有两种基本属性的共有特性,所以在很多地方有特殊用处。这里主要用到inline-block的inline特性,将子元素设置为inline-block使得两者不会换行。同时左侧定宽,右侧自动即可。css如下:

.main{
width: 100%;
height:500px;
border: 1px solid blue;
overflow: auto;
}
.left1{
display: inline-block;
width: 200px;
background:#ff4433;
vertical-align: top;
}
.right1{
display: inline-block;
background: pink;
}

  二、使用绝对定位

  绝对定位有很多特性,其中比较重要的一点是,脱离文档流,相对父元素最近的不为static定位的来定位。这里主要就用到了该特性,因为脱离了文档流,所以紧邻的div不会自动换行,只需要设好外间距即可达到效果。代码如下:

.main{
width: 100%;
height:500px;
border: 1px solid blue;
overflow: auto;
}
.left2{
position: absolute;
width: 200px;
background:#ff4433;
}
.right2{
margin-left: 200px;
background: pink;
}

这里不够严谨,最好父元素为相对定位,以免发生意想不到的定位情况。

  三、float方式

  既然提到了绝对定位脱离文档流的方式,相信大家还会想起来另一个狂放不羁爱脱离的属性,对就是浮动。既然特性相同当然可以实现相同效果。不过这里声明一下使用浮动的话注意要清除浮动,否则会带来一些意想不到的效果,这里简便起见就不清除了。

.main{
width: 100%;
height:500px;
border: 1px solid blue;
overflow: auto;
}
.left3{
float: left;
width: 200px;
background:#ff4433;
}
.right3{
margin-left: 200px;
background: pink;
}

  四:flex布局

  弹性流式布局,这个是根据百分比来布局的。在h5中是非常常见的。因为手机型号的问题,所以根据百分比来布局是比较合适的。如果固定宽度的话,很容易就出现问题。有关flex的内容,这里不详细描述。只稍微提一下flex布局的基本思想:将设置为display: flex的元素作为一个flex容器,其子元素根据flex对应的值来分配父容器的宽度(默认从左至右排列)。例如div1:flex1,div2:flex2 ,则div1,div2则按1:2来分配父元素的宽度。但是如果子元素有设置固定宽度,则剩下的子元素按flex对应比例分配余下的区域。所以要实现左侧定宽的效果,只需设置左侧固定宽度即可,若左侧不定宽,可以按照比例来分配各子元素的宽度。代码如下:

.main4{
display: flex;
flex-flew:row;
}
.left4{
width:200px;
}
.right4{
flex:3;
}

或者非定宽的布局:

.main4{
display: flex;
flex-flew:row;
}
.left4{
flex:1;
}
.right4{
flex:3;
}

  以上就是关于两列布局的几种实现方式,为了体现思路即可,所以很多地方不够严谨。希望能给需要的同学提供下参考和思路。还是那句话抛砖引玉,希望有兴趣的同学一起探讨。

  转载请注明出处!!

css两列自适应布局的多种实现方式及原理。的更多相关文章

  1. css 两列自适应布局的4种思路

    前面的话 前面已经介绍过css 两列布局中单列定宽单列自适应布局的6种思路的两列布局,而两列自适应布局是指一列由内容撑开,另一列撑满剩余宽度的布局方式.本文将从float.table.flex和gri ...

  2. css两列自适应宽度布局(左定宽,右自适应)

    1.利用BFC: <div id="root"> <div class="left">左</div> <div cla ...

  3. 使用display:table实现两列自适应布局

    在张鑫旭大神那边看到的方法,我自己写了一遍,稍微添加了一些自己的风格特色. IE6/7不支持这个属性,从IE8开始支持这个属性,对于IE6/7可以用display:inline-block解决. ta ...

  4. CSS三列自适应布局(两边宽度固定,中间自适应)

    https://blog.csdn.net/cinderella_hou/article/details/52156333 https://blog.csdn.net/wangchengiii/art ...

  5. css两列布局,一边固定宽度,另一边自适应

    <!DOCTYPE HTML><HTML>    <head>                <meta charset="utf-8" ...

  6. CSS两列布局——左侧宽度固定,右侧宽度自适应的3种方法

    1.左侧绝对定位法 直接看代码: <!DOCTYPE html> <html lang="en"> <head> <meta charse ...

  7. css两列布局之基于BFC规则实现

    css要实现常见的自适应两列布局的方式方法挺多. 这里讲的是利用设置overflow不为visible时会形成新的BFC来实现.至于什么是BFC,可以搜搜看先,基本都讲的差不多了.等有更多空余时间,专 ...

  8. DIV+CSS左右两列自适应高度的方法

    我们在用DIV+CSS布局网页的时候,必然会遇到左右两列自适应高度的问题,就是左边列的背景会随着右边列内容的增加也相应的增加高度,下面就教大家DIV+CSS左右两列自适应高度的方法. 下面给出最终的效 ...

  9. CSS两列高度自适应,右边自适应

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

随机推荐

  1. 在svg中的line和path根据路径返回x,y

    由于path有自带的api可获得总长度,和某个长度返回的坐标. var total = d.path.getTotalLength();//返回总长度 var point = d.path.getPo ...

  2. XdbxAnalysis

    Tree: TXdbxAnalysis; FDataStream: TMemoryStream; {FDataStream:= TMemoryStream.Create;    FDataStream ...

  3. exception 'DOMException' with message 'Invalid Character Error' Php + Mongodb

    问题描述: 项目属于MVC设计模式,技术和框架采用了php5.6 + Yii2.0 + MongoDB. 在我从Controller中调用Model 的 findAll([]) 方法获取数据打印到屏幕 ...

  4. KeepAlived主备模型高可用LVS

    部署前准备: 1.至少4台主机:两个Director(HA1,HA2),两个Real Server(RS1,RS2) 2.Director之间时间必须同步,且关闭各主机的防火墙和Selinux 3.出 ...

  5. 调用JavaScript

    当webdriver 遇到没法完成的操作时,笔者可以考虑借用JavaScript 来完成,比下下面的例子,通过JavaScript 来隐藏页面上的元素.除了完成webdriver 无法完成的操作,如果 ...

  6. C++ 中数串互转、进制转换的类

    /******************************************************************** created: 2014/03/16 22:56 file ...

  7. AndroidStudio关联svn并上传代码到svn服务器上

    打开AndroidStudio,按Ctrl+Shif+S快捷键,进入Settings设置页面.如上图所示,找到Version Control->点击Subversion->右边框口中勾选U ...

  8. 现在还需要测试或者QA人员吗?

    Facebook没有专门的测试人员,都是开发自己测:微软裁掉了测试部门,改由开发测:google有少量的测试人员,主要做测试自动化框架开发或者性能.安全等专项测试,测试用例还是开发人员自己设计自己跑( ...

  9. iava多线程详解(2)-成员变量与局部变量访问

    有两段代码 1.线程访问成员变量 public class FirstThreadTest { public static void main(String[] args) { FirstThread ...

  10. 漫谈Linux内核哈希表(2)

    对照前面介绍过的内核通知链.链表,本章我们将要介绍的哈希表的初始化和定义也是如出一辙的: 点击(此处)折叠或打开 定义并初始化一个名为name的哈希链表表头 #define HLIST_HEAD(na ...