布局

Css布局的核心概念:定位、浮动、外边距

思路:

(1)   先把页面划分为大的结构性区域,如容器、页眉、内容区域、页脚。

(2)   然后,关注内容区域本身,开始建立网格结构。关注与内容区域的共同特征与不同的特征。

(3)   接着,在内容区域中寻找不同的布局结构。

(4)   结构设计完之后,关注不同类型的内容。给每一个内容块起一个有意义的名称,然后分析它们的关系。

(5)   查看每个内容块的结构,看看不同的类型中是否有共同的模式。

(6)   找出模式并确定命名约定之后,定义需要使用的元素。

1      设置基本的结构

如三列博客模板

Css布局有几种不同的方式,包含绝对定位和使用负的外边距值。其中,浮动布局最常用。

2      基于浮动的布局

浮动布局之后需要清理浮动元素带来的负面性。

(1)   两列的浮动布局

一般讲两列都向左浮动,然后利用外边距或内边距在两列之间创建一个隔离带。但由于IE考虑元素内容的尺寸而不是元素本身的尺寸,可能打乱布局。在符合标准的浏览器中,若元素的内容太大,会超出框之外。在IE上,若元素的内容太大,整个 元素就会扩展。可能导致两列不能并排。

为了防止上述情况发生,需要避免浮动布局在包含它们的元素中太挤。可以让一个元素左浮动,一个元素右浮动,创建视觉上的隔离。并在主内容添加一点内边距,避免包含的文本紧挨着元素的右边缘。如果一个元素的尺寸意外的增加了几个像素,也不会立刻占满水平空间并下降,而只是扩展到视觉隔离带中。
   

  <style type="text/css">
        .content .primary{
            float:right;
            display: inline;/*//防止IE中的双边距浮动产生的bug*/
             650px;
            padding-right: 20px;
            background: #B373DA;
        }
        .content .secondary{
            float:left;
            display:inline; /*//防止IE中的双边距浮动产生的bug*/
            230px;
            background: cornflowerblue;
        }
        .content{
            overflow: hidden;/*/清理浮动*/
        }
    </style>

<div class="content">
    <div class="primary">
      primary
    </div>
    <div class="secondary">
        secondary
    </div>
</div>

(2)   三列的浮动布局

三列布局,内容div中包含两个div:一个用于主内容,一个用于次内容。次要内容向左浮动,主要内容向右浮动。在主要内容中,主div向左浮动,次要div向右浮动。
     

<style type="text/css">

        .content .primary{
            float:right;
            display: inline;
            670px;
            background: #cccccc;

        }
        .content .secondary{
            float:left;
            display:inline;
            230px;
            background: blueviolet;
        }
        .content .primary .primary{
            float:left;
            display: inline;
            400px;
            background: #74DEF8;
        }
        .content .primary .secondary{
            float:right;
            display: inline;
            padding-right: 20px;
            230px;
            background: chartreuse;
        }
    </style>

<div class="content">
    <div class="primary">
        <div class="primary">
              11
        </div>
        <dv class="secondary">
              12
        </dv>
    </div>
    <div class="secondary">
        2
    </div>
</div>

  

3      固定宽度、流式、弹性布局

(1)   流式布局(百分比布局)

流式布局的尺寸是百分数而不是像素设置,这使得流式布局能够相对于浏览器窗口进行伸缩。流式布局在窗口很窄的时候,也很难阅读。因此,有必要添加以像素或em为单位的min-width,从而防止布局变得太窄。

如果设计横跨整个浏览器,行很很长,也影响阅读。因此,可以选择不要横跨浏览器而是让容器只跨越宽度的一部分,如86%;或者选择用百分数设置内边距和外边距;或者可以选择为容器设置最大宽度,防止内容在大显示器上变得过宽。

流式三列布局:首先将容器宽度设置为窗口总宽度的百分数。然后根据固定版本宽度与这个尺寸的比例,选择容器百分数。接着,以容器宽度的百分数形式设置主内容区域与次要内容区域的宽度。
    

 <style type="text/css">
        .wrapper{
            margin:0 auto;
            76.8%;
            text-align:left;
        }
        .content .primary{
            float:right;
            display: inline;
            72.82%;
            background: #cccccc;

        }
        .content .secondary{
            float:left;
            display:inline;
            25%;
            background: blueviolet;
        }
        .content .primary .primary{
            float:left;
            display: inline;
            59.7%;
            background: #74DEF8;
        }
        .content .primary .secondary{
            float:right;
            display: inline;
            padding-right: 2.63%;
            34.33%;
            background: chartreuse;
        }
    </style>

<div class="wrapper">
    <div class="content">
        <div class="primary">
            <div class="primary">
                11
            </div>
            <dv class="secondary">
                12
            </dv>
        </div>
        <div class="secondary">
            2
        </div>
    </div>
</div>

  


ps:流式布局可以充分利用可用空间,但在大分辨率显示器上,行仍然会过长,让用户不舒服。如果在窄窗口中或增加文本字号时,行会变得非常短,内容很零碎。由此引出了弹性布局。

(2)   弹性布局

弹性布局相对于字号来设置元素的宽度。以em为单位设置宽度,可以确保在字号增加时整个布局随之扩大,这可以保持在可阅读的范围,对于视力弱或者有认知障碍的人更为有用。因为在文本字号增加时整个布局会增大,弹性布局相比于浏览器窗口宽,导致水平滚动条出现。为了防止这种情况,可能需要在容器div上设置100%的max-width。

将固定布局转换为弹性布局,需要设置基字号,让1em大致相当于10像素。大多数浏览器上的默认字号是16像素,10像素大致相当于16像素的62.5%,所以在主体上将字号设置为62.5%即可。
     

<style type="text/css">
        body{
            font-size:62.5%;
            text-align:center;
        }
        .wrapper{
            92em;
            max-95%;
            margin:0 auto;
            text-align:left;
        }
        .content .primary{
            float:right;
            display: inline;
            72.82%;
            background: #cccccc;

        }
        .content .secondary{
            float:left;
            display:inline;
            25%;
            background: blueviolet;
        }
        .content .primary .primary{
            float:left;
            display: inline;
            59.7%;
            background: #74DEF8;
        }
        .content .primary .secondary{
            float:right;
            display: inline;
            padding-right: 2em;
            34.33%;
            background: chartreuse;
        }
    </style>

<div class="wrapper">
    <div class="content">
        <div class="primary">
            <div class="primary">
                11
            </div>
            <dv class="secondary">
                12
            </dv>
        </div>
        <div class="secondary">
            2
        </div>
    </div>
</div>

  

(3)   流式和弹性图像

如果选择流式或弹性布局,那么固定的图像就会对效果产生影响。

解决方法:

对于需要跨越大区域的图像,如站点页眉或品牌中的图像,可以考虑使用背景图像而不是图像元素。

eg. 

#header{

height:172px;

background:url(img/header.png)  no-repeat left top ;

}

  

     如果图像需要用作页面上的图像元素,那么容器元素的宽度设置为100%且将overflow属性设置为hidden。这样的话,图像右边会被截断,使其适合包含它的父元素,而不会随着布局伸缩。eg.

  <style type="text/css">
       #header{
          100%;
          overflow: hidden;
      }
 </style>
 <div id="header">
     <img src="./img/0.jpg" alt="img" width="600" height="200" />
  </div>

  

      对于常规内容图像,可能希望其垂直和水平伸缩以避免被剪切。为此可以将图像元素添加到没有设置任何尺寸的页面上。然后设置图像的百分数宽度,且添加与图像宽度相同的max-width以避免像素失真。

Eg 侧边栏为图像列,右边栏为文本列,图像的宽度需要大约是包含它的框的四分之一,文本占据剩下的空间。为此,只需将图像的宽度设置为25%,然后将max-width设置为图像的尺寸。

4      高度相等的列

给每个框设置最大的底内边距,然后用数值相似的负外边距消除这个高度。利用overflow:hidden;将溢出容器元素的最高点进行裁切。为了把列底部定位在正确的位置,需要让它们与齐容器元素(每个框最后放一个div标签)的底部对齐。首先把容器的position设置为relative,然后把空div的position设置为absolute,把它们的bottom属性设置为0.。最后只需设置正确的宽高,应用底部图片即可。

5      Css 3列

通过column-count、column-width、column-gap属性实现。

.col{

    column-count:3;

    column-10em;

    column-gap:2em;

    column-rule:1px solid #ccc;

}

  

 源码地址:https://github.com/sunshineqt/exercise/tree/master/exercise/test1/layout

宝剑锋从磨砺出,梅花香自苦寒来。
原文地址:https://www.cnblogs.com/haimengqingyuan/p/7099456.html