zoukankan      html  css  js  c++  java
  • css两列自适应布局的多种实现方式及原理。

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

      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{
                 100%;
                height:500px;
                border: 1px solid blue;
                overflow: auto;
            }
            .left1{
                display: inline-block;
                 200px;
                background:#ff4433;
                vertical-align: top;
            }    
            .right1{
                display: inline-block;
                background: pink;
            }

      二、使用绝对定位

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

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

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

      三、float方式

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

    .main{
                 100%;
                height:500px;
                border: 1px solid blue;
                overflow: auto;
            }
            .left3{
                float: left;
                 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{
            200px;
     }
     .right4{
            flex:3;
     }

    或者非定宽的布局:

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

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

      转载请注明出处!!

    如水穿石,厚积才可薄发
  • 相关阅读:
    重写分词器
    twitterfeed
    What is WSGI?
    lucene 3.3一元切分查询例子
    How to Import Your Blog to Facebook Automaticly Using Notes
    协同过滤 学习笔记
    Python入门练习(一):基于全切分,一元语法模型的汉语分词
    test blog sync to qq microblogging
    solr的用分布式搜索(转)
    盘古分词功能简介
  • 原文地址:https://www.cnblogs.com/pqjwyn/p/5821847.html
Copyright © 2011-2022 走看看