zoukankan      html  css  js  c++  java
  • css 响应式布局



    http://www.missyuan.net/school/web_2013/web_10748.html


    一.使用HTML中的viewport来实现

    viewport语法如下:

    HTML代码

    <!--在html代码的<head>...</head>中嵌入下面代码-->
    <meta name="viewport"
    content="
    height = [pixel_value | device-height] ,
    width = [pixel_value | device-width ] ,
    initial-scale = 0.5 ,
    minimum-scale = float_value ,
    maximum-scale = float_value ,
    user-scalable = [yes | no] ," />

    (1)width

    控制 viewport 的大小,可以指定的一个值或者特殊的值,如 device-width 为设备的宽度(单位为缩放为 100% 时的

    CSS 的像素)。

    (2)height

    和 width 相对应,指定高度。

    (3)initial-scale

    初始缩放。即页面初始缩放程度。这是一个浮点值,是页面大小的一个乘数。例如,如果你设置初始缩放为“1.0”,那

    么,web页面在展现的时候就会以target density分辨率的1:1来展现。如果你设置为“2.0”,那么这个页面就会放大为

    2倍。

    (4)maximum-scale

    最大缩放。即允许的最大缩放程度。这也是一个浮点值,用以指出页面大小与屏幕大小相比的最大乘数。例如,如果你

    将这个值设置为“2.0”,那么这个页面与target size相比,最多能放大2倍。

    (5)user-scalable

    用户调整缩放。即用户是否能改变页面缩放程度。如果设置为yes则是允许用户对其进行改变,反之为no。默认值是yes

    。如果你将其设置为no,那么minimum-scale 和 maximum-scale都将被忽略,因为根本不可能缩放。

    (6)设置屏幕宽度为设备宽度,禁止用户手动调整缩放)
    HTML代码:

    <meta name="viewport" content="width=device-width,user-scalable=no" />



    (7)设置屏幕密度为高频,中频,低频自动缩放,禁止用户手动调整缩放)

    HTML代码:

    <meta
    name="viewport" content="width=device-width,target-densitydpi=high-dpi,initial- scale=1.0,

    minimum-scale=1.0, maximum-scale=1.0, user-scalable=no"
    />
    注:1). 所有的缩放值都必须在0.01–10的范围之内。
    2). minimum-scale、maximum-scale要么写值,要不留这两个

    二.不使用绝对宽度

    由于网页会根据屏幕宽度调整布局,所以不能使用绝对宽度的布局,也不能使用具有绝对宽度的元素 。这一条非常

    重要。
    具体说,CSS代码不能指定像素宽度:
      xxx px;
    只能指定百分比宽度:
       xx%;
    或者
      auto;

    三.CSS的@media规则
    (1) 同一个CSS文件中,也可以根据不同的屏幕分辨率,选择应用不同的CSS规则。

    HTML代码
    @media screen and (max-device- 400px) {
      .column {
        float: none;
        auto;
      }
      #sidebar {
        display:none;
      }
    }

    上面的代码意思是,如果屏幕宽度小于400像素,则column块取消浮动(float:none)、宽度自动调节 (auto),sidebar块不显示(display:none)。

    (2)media查询特性:
    width 视口宽度

    height 视口高度

    device-width 设备屏幕的宽度

    device-height 设备屏幕的高度

    orientation 检测屏幕处于横屏还是竖屏

    aspect-ratio 基于视口的宽高比例

    device-aspect-ratio 基于设备屏幕的宽高比

    color 颜色的位数,如min-color:32 匹配设备是否有32位或以上的颜色

    color-index 设备的颜色索引表中的颜色数

    monochrome 检测单色振缓冲区中每像素使用的位数。为非负数,如monochrome:3

    resolution 检测屏幕或打印机的分辨率,如min-resolution:300dpi(dpi后面会介绍),也可以是每厘米像素点的度量值,如min-resolution:120dpcm

    scan 扫描方式,值为progressive(逐行扫描)、interlace(隔行扫描)

    grid 检测输出设备是网格设备还是位图设备

    (3)针对不同分辨率:
    中分辨率屏幕 :@media(-webkit-min-device-pixel-ratio:1){css代码}
    高分辨率屏幕 :@media(-webkit-min-device-pixel-ratio:1.5){css代码}
    超高分辨率屏幕 :@media(-webkit-min-device-pixel-ratio:2){css代码}

    四.流动布局
    各个区块的位置都是浮动的,不是固定不变的。

    HTML代码

     .main {
        float: right;
         70%;
      }
      .leftBar {
        float: left;
         25%;
      }

    float的好处是,如果宽度太小,放不下两个元素,后面的元素会自动滚动到前面元素的下方,不会 在水平方向

    overflow(溢出),避免了水平滚动条的出现。
    另外,绝对定位(position: absolute)的使用,也要非常小心。

    五. 图片的自适应
    图片的宽度和高度要按百分比来设定,千万不可以设定成固定大小。

    HTML代码

    <img width="95%" src="" alt="" />


    六.css3的新属性: display:-webkit-box


    (1)属性:
    webkit-box-orient:子元素排列方向 horizontal | vertical | inline-axis | block-axis | inherit,其中默认值是inline-axis,即横向排列
    -webkit-box-flex :子元素之间比例,仅作一个系数
    -webkit-box-direction :子元素排列顺序 normal | reverse | inherit,其中默认值是normal
    -webkit-box-flex-group :以组为单位的流体系数
    -webkit-box-ordinal-group :以组为单位的子元素排列方向
    -webkit-box-lines: 子元素是否换行,类似word-wrap和word-break的作用
    -webkit-box-align :子元素垂直方向的对其方式
    -webkit-box-pack :子元素水平方向的对其方式


    (2)例子:父元素被1、2、3均分,且2和1之间间隔10px
    HTML:
    CSS:

    怎么理解上面的代码呢,父亲有一块地,要分给兄弟几个,除去老大和老二之间的分割线所占的那块,剩下的部分均分的分数由li的兄弟个数和box-flex的总数确定,现在一共三兄弟,每兄弟的box-flex都是1,所以就总分数=1*1+1*1+1*1=3.
    如果代码稍作修改:

    那么现在老二的box-flex是2了,总分数就是1*1+1*2+1*1=4,其中老大老三各占一份,老二占两份,显示效果如下:

    -webkit-text-size-adjust:none
    设置在屏幕横屏的时候字体不自动变大
    字级单位:rem
    我们之前用em、百分比的时候遇到的问题就是计算,而且当嵌套的层级太多时就会非常难以把控,而用px则被固定死了,
    现在我们用rem完全不用担心这个问题,因为rem的参照对象只有根节点。我们只需设置根节点的大小,所有子节点都只需参照它来设计就可以,下面是px、em、百分比和pt的对比

    我们只需设置html根元素字体大小为75%,对应的px值就是12,这样我们可以很方便的设置页面的宽高和字体大小,当然单位是rem,这样参考对象才会永远是html而不是父元素,当需要变化的时候,只需改变html的大小其他的元素都会相应变化,方便极了。
    Px,em,rem的区别
    PX特点
    1. IE无法调整那些使用px作为单位的字体大小;
    2. 国外的大部分网站能够调整的原因在于其使用了em或rem作为字体单位;
    3. Firefox能够调整px和em,rem,但是96%以上的中国网民使用IE浏览器(或内核)。
    px像素(Pixel)。相对长度单位。像素px是相对于显示器屏幕分辨率而言的。
    em是相对长度单位。相对于当前对象内文本的字体尺寸。如当前对行内文本的字体尺寸未被人为设置,则相对于浏览器的默认字体尺寸。
    任意浏览器的默认字体高都是16px。所有未经调整的浏览器都符合: 1em=16px。那么12px=0.75em,10px=0.625em。为了简化font-size的换算,需要在css中的body选择器中声明Font-size=62.5%,这就使em值变为 16px*62.5%=10px, 这样12px=1.2em, 10px=1em, 也就是说只需要将你的原来的px数值除以10,然后换上em作为单位就行了。

    EM特点:
    1. em的值并不是固定的;
    2. em会继承父级元素的字体大小。

    比如说你在#content中声明了字体大小为1.2em,那么在声明其子元素p的字体大小时就只能是1em,而不是1.2em, 因为此em非彼em,它因继承#content的字体高而变为了1em=12px。避免1.2*1.2 = 1.44

    rem特点 
    使用rem为元素设定字体大小时,仍然是相对大小,但相对的只是HTML根元素
    它既可以做到只修改根元素就成比例地调整所有字体大小,又可以避免字体大小逐层复合的连锁反应。目前,除了IE8及更早版本外,所有浏览器均已支持rem。

    -webkit-box-sizing:border-box: 指定该盒子的大小包括边框的宽度
    当我们指定了一个块级元素时,并且为其定义了边框,设置了其宽度为100%。按照盒子模型,就会发现该元素的左右边框各1个像素会溢了,导致出现横向滚动条,这时候我们可以为其添加-webkit-box-sizing:border-box用来指定该盒子的大小包括边框的宽度。

  • 相关阅读:
    JavaScript -- BATweb笔试面试
    1--html属性
    0--node安装
    1-- express
    lsof命令
    1--字符串和数组的指向问题
    19--复杂链表的复制。
    18--二叉树中和为某一值的路径
    剑指offer——64和为s的数字
    剑指offer——04二维数组中的查找
  • 原文地址:https://www.cnblogs.com/jlliu/p/5318781.html
Copyright © 2011-2022 走看看