zoukankan      html  css  js  c++  java
  • 布局

    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

    宝剑锋从磨砺出,梅花香自苦寒来。
  • 相关阅读:
    [AngularJS] angular-schema-form -- 1
    [MODx] 10. Using Babel for Muti-languages support
    [AngularJS] Using AngularJS interceptors with $http
    [AngularJS] Best Practise
    [Node.js] Creating Demo APIs with json-server
    [HTML5] Input accepts only 6 number characters
    [Heroku] How to pull, push changes
    Runoob-Java-Maven:Maven 引入外部依赖
    Runoob-Java-Maven:Maven 构建 & 项目测试
    Runoob-Java-Maven:Maven 构建 Java 项目
  • 原文地址:https://www.cnblogs.com/haimengqingyuan/p/7099456.html
Copyright © 2011-2022 走看看