《响应式Web设计实践》学习笔记

原书: 响应式Web设计实践

第2章 流动布局

1. 布局选项

  • 传统的固定布局中存在很多问题, 随着屏幕大小的越来越多元化, 固定布局已经不能适用了.
  • 在流动布局中, 度量的单位不再是像素, 而是变成了百分比.
  • 弹性布局与流动布局类似, 但是通常情况下, 弹性布局中会以em来作为单位. 带来一个好处是随着用户增大或减小字体, 适用弹性布局的元素的宽度也会等比例地变化. 但是其也可能出现水平滚动条
  • 混合布局

  媒体查询:

  媒体查询允许根据设备的信息----诸如屏幕宽度, 方向或者分辨率等属性来使用不同的样式

  断点:

  那些被指定的,开始应用某一新的媒介查询的点. 例如, 一个在980px处的断点的意思是, 当浏览器宽度大于或小于这一数值时, 新的媒介查询将被触发

2. 字体大小

  • 像素: 不够灵活
  • em: 可缩放, 可级联
  • 百分比: 可缩放, 可级联
  • rem(root em): rem的大小与根元素---html元素有关. 移动平台尚不支持

3. 网格布局

  • 一个流动布局的实现:

        #container{
            width: 95%;
            padding: .625em 1.05% 1.5em;  /*10px/16px 10px/948px 24px/16px*/
            margin: auto 0;
        }
        .main{
            float: left;
            margin-right: 2.53%; /* 24/948 */
            width: 65.823%; /*624/948*/
        }
        .aside{
            float: right;
            width: 31.645%;  /*300/948 */
        }
  • 流动世界中的固定宽度对象: 图片

        aside img,
        .main img,
        .slats img{
            width:100%;
            max-width: 100%;
        }

    不可以在html中定义img的height和width的属性值, 如果设定了这些值, 就不能按比例缩放图片了.

4. 混合固定宽度和流动宽度
  目的: 固定右边边栏, 只让主栏流动
  方法: 使用表格布局

    .main{
        display: table-cell;
        padding-right: 2.53%;   /* 24/948 */
    }
    aside{
        display: table-cell;
        width: 300px;
    }

  使用条件注释来为IE 7 及以下版本的IE浏览器提供备用样式: (!IEMobile的条件判断是因为Windows Phone 7 也会加载这个备用样式)

<!--[if (lt Ie 8) & (!IEMobile)]>
<link rel="stylesheet" type="text/css" href="css/ie.css" media="all">
<![endif]-->

第3章 媒介查询

1. 视口

  在移动设备上, 很多设备都会给浏览器返回一个数值较大的布局视口.

  视口标签:

<meta name="viewport" content="directive, directive" />

  视口的属性:

  • width: 可以将视口设置为某一特定的宽度, 或者设置为设备屏幕的宽度
    最佳选择是在width声明中使用device-width

    <meta name="viewport" content="width=device-width" />
  • height: 允许指定一个特定的高度. 最好将布局视口的高度等于屏幕的高度. 
    但是一般不会经常用到height, height有用时候就是在不想让页面垂直滚动的时候

    <meta name="viewport" content="height=device-height" />
  • user-scalable: 告诉浏览器是否允许用户在页面上进行缩放. 默认值是yes, 即运行缩放

    <meta name="viewport" content="user-scalable=no" />
  • initial-scale: 可以通过给这个参数赋值为0.1(10%)到10.0(1000%)之间的某个数来设置页面初始化时的缩放层级

    <meta name="viewport" content="initial-scale=.5, width=device-width" />

    如这个例子中, width属性被设成设备的宽度, 同时initial-scale被设置为.5, 这意味着浏览器将会缩小显示所有东西: 例如在一个320px宽的设备上, 页面会显示为640px

  • maximum-scale: 浏览器允许用户放大页面到什么程度. 在移动端Safari中, 其默认值是1.6(160%), 可以指定0.1-10.0. 如果将其设为1.0, 则意味着禁止用户缩放页面
  • minimum-scale: 告之浏览器允许用户将页面缩小到什么程度. 在移动端Safari中, 其默认值是0.25, 可指定0.1-10.0. 如果将其设为1.0, 则意味着禁止用户缩小页面

2. 媒介查询结构

  媒介查询可以通过问询浏览器来确定特定的表达式是否为真. 如果为真, 就加载一些特殊的, 适用于这种情况的样式, 从而达到调整布局的目的.

  媒介查询的一般形式为:

@media [not|only] type [and] (expr) {
    rules
}

  包含四个基本组成部分:

  • 媒介类型: 特定的目标设备类型
  • 媒介表达式: 测试某一特性是否为真
  • 逻辑关键词: 可以用关键词(例如 and, or, not, only) 来创建出更多复杂的表达式
  • 规则: 调整显示效果的基本样式

1) 媒介类型:

  每一种媒介类型都会告诉用户代理(例如浏览器)是否要加载特定的样式表. 例如, 如果知道screen媒介类型, 那么所有通过计算机显示器来浏览页面的用户代理都会加载相应的样式. 如果是print媒介类型, 那么相应的样式将会在打印或打印预览时进行加载.

  十种类型:

all 所有设备(默认)
braille 盲文触觉反馈设备
embossed 分页盲文打印机
handeld 手持设备(通常为小屏幕并且可能是黑白屏幕)
print 打印或打印预览
projection 投影仪
screen 彩色计算机屏幕
speech 语言合成器
tty 使用固定字符间距的设备(终端或打印设备)
tv 电视机

  样式中的查询语句如下:

@media print {
}

  也可以采用外部样式文件的形式, 并在link元素内指定媒介属性:

<link rel="stylesheet" href="print.css" media="print" />

  无论哪种方法, 被引用的CSS的效果只有在打印或打印预览时才能看到.

  每条媒介查询都必须包含一种媒介类型,如果没有设置媒介类型, 该条查询将使用默认值all, 但在不同浏览器中的实际行为是各不相同的.

2) 媒介表达式

  判断设备视口的宽度是否大于320px:

@media screen and (min-width: 320px){
}

  先检测访问页面的设备是否属于screen, 然后测试设备的视口宽度----宽度至少为320px

  可以使用的媒介特性, 并且min-和max-前缀也都适用于这些特性

特性 描述 可以指定最小或最大
width 描述设备显示区域的宽度 <长度>(例如320)
height 描述设备显示区域的高度 <长度>(例如600)
device-width 描述设备渲染界面的宽度 <长度>(例如320)
device-height 描述设备渲染界面的高度 <长度>(例如600)
orientation 指定设备处于竖直(高度大于宽度)或者水平(宽度大于高度)状态 portrait | landscape
aspect-ratio width属性和height属性的比值 <比值>(例如16/9)
device-aspect-ratio device-width属性和device-height属性的比值 <比值>(例如16/9)
color 设备的每个颜色分量的比特数 <整数>(例如1)
color-index 设备的颜色查找表中的条目数 <整数>(例如256)
monochrome 黑白屏幕设备每个像素的比特数(如果不是黑白屏幕将返回0) <整数>(例如8)
resolution 设备的分辨率(像素密度), 可以以点每英尺[dpi]或者点每厘米[dpcm]来表示 <分辨率>(例如118dpcm>
scan "tv"类设备的扫描过程 progressive | interlace
grid 返回该设备是网格设备(1)还是位图设备(0) <整数>(例如1)

3) 逻辑关键词

@media screen and (color) {}      /*判断设备是否配备有彩色屏幕*/

@media not screen and (color){}    /*等于 not (screen and (color))*/

@media screen and (color), projection and (color)   /*逗号表示or */

/*很多浏览器支持媒介类型, 但不支持媒介查询, 有时这会导致浏览器去尝试下载那些你不希望用户看到的样式. 这时候就可以用only关键字, 对那些较老浏览器隐藏媒介查询, 这样它们就并不会识别出相应的样式了. 而支持only关键字的浏览器则会继续处理带有only关键字的查询语句*/
@media only screen and (color)  /* 如果设备不支持媒介查询, 那么它将会忽略这条查询. 如果设备支持媒介查询, 那么设备将会将上面这条查询与下面这条查询等效对待
@media screen and (color)

3. 内嵌样式与外部样式

  媒介查询既可以写在页面内部, 也可以通过link元素的media属性被包含到页面中去.

  • 内嵌式媒介查询:

    • 优点: 只需要一个http请求
    • 缺点: 所有样式都会被下载, 不论是否用到. 而且单个css文件会变得很大
  • 外部媒介查询
    • 不论是否会用到, 其实也会下载所有的样式. 目的在于, 如果浏览器的窗口的大小或者方向发生了改变, 它的各自样式已经各就各位了
    • 优点: 文件变得很小, 利于维护

4. 媒介查询顺序

  • 从桌面端向下设计

    • @media all and (max-width: 768px){
      }
      @media all and (max-width: 320px){
      }
    • 缺点: 移动设备对媒介查询的支持不够完善
  • 从移动端向上设计
    • @media all and (min-width: 320px){
      }
      @media all and (min-width: 768px){
      }
    • 能获得浏览器更好的支持,
    • 且可以降低css文件的复杂性

5. 创建核心体验

6. 确定断点

  传统的做法: 使用一些固定的标准宽度: 320px(iphone和其他一些设备), 768px(ipad)和1024px

  存在的问题是: 可能会忽视在这些宽度之间的设备.

  1) 更好的做法是 追随内容:

  根据内容来决定应该在哪里设置断点以及需要设置多少个断点.

  其实就是缩放浏览器, 然后缓慢拉宽窗口直到有些东西需要调整时设置断点.

  2) 增加对大屏幕的支持.

  3) 使用em为媒体查询增加灵活性

  即使用em为单位来设置断点

7. 导航栏

  1. 什么都不做
  2. 转换为下拉列表
  3. 切换式菜单
时间: 2024-10-10 00:04:29

《响应式Web设计实践》学习笔记的相关文章

疯狂Android讲义 - 学习笔记(二)

Android应用的用户界面编程 Android推荐使用XML布局文件来定义用户界面 ViewGroup是一个抽象类,通常使用它的子类作为容器,ViewGroup控制其子组件的分布依赖于两个内部类: ViewGroup.LayoutParams 和 ViewGroup.MarginLayoutParams 疯狂Android讲义 - 学习笔记(二),布布扣,bubuko.com

疯狂Android讲义 - 学习笔记(六)

第7章 7.1 使用简单图片 7.1.1 使用Drawable对象 7.1.2 Bitmap和BitmapFactory 7.2 绘图 7.2.1 Android绘图基础:Canvas.Paint等 Android的绘图应该继承View组件,并重写onDraw(Canvas canvas) 方法即可,Canvas代表了“依附”于指定View的画布.表7.1 Canvas的绘制方法 Paint代表了Canvas上的画笔,Paint类主要用于设置绘制风格,包括画笔颜色.画笔粗细.填充风格等. 7.2

疯狂Android讲义 - 学习笔记(八)

第10章 Service与BroadcastReceiver 10.1 Service简介 Service组件也是可执行的程序,有自己的生命周期,创建.配置Service与创建.配置Activity的过程基本相似.Service一直在后台运行,没有用户界面. 10.1.1 创建.配置Service 需要2个步骤:1 定义基础Service的子类,2 在AndroidManifest.xml文件中配置Service. Service与Activity都是从Context派生出来的,因此都可以调用C

疯狂Android讲义 - 学习笔记(五)

第五章 Android使用统一的Intent对象来封装“启动意图”,不管是启动Activity.Service组件.或者BroadcastReceiver等,提供了一致的编程模型.Intent设计有点类似于Struts2框架中的逻辑视图设计. Intent还是应用程序组件之间通信的重要媒介:数据封装成Bundle对象,Intent携带Bundle对象. 5.1 Intent对象详解 5.2 Intent的属性及intent-filter配置 5.2.1 Component属性 5.2.2 Act

疯狂Android讲义 - 学习笔记(四)

Android应用通常有多个Activity,多个Activity组成Activity栈,当前活动的Activity位于栈顶.Activity相当于Java Web开发的Servlet.当Activity处于Android应用运行时,同样受系统控制.有生命周期. 4.1 建立.配置和使用Activity 4.1.1 Activity 建立自己的Activity需要集成Activity基类,在不同的应用场景,有时也能集成Activity的子类. Activity间接或直接继承了Context.Co

疯狂Android讲义 - 学习笔记(七)

第8章 Android数据存储与IO  Java IO的数据存储可以移植到Android应用开发上来,Android系统还提供了一些专门的IO API. Android系统内置了SQLite数据库,SQLite是轻量级的,没有后台进程,整个数据库对应一个文件,这样可以非常方便的在不同设备之间移植.Android为访问SQLite提供了大量便捷的API. 8.1 使用SharedPreferences 适用于保存简单格式的数据. 8.1.1 SharedPreferences 与 Editor S

【疯狂Java讲义学习笔记】【数据类型与运算符】

[学习笔记]1.8bit = 1byte,4byte = 1word.Java中的整型数据有byte(1字节),short(2字节),int(4字节),long(8字节).Java中的浮点数据有float(4字节),double(8字节)Java中还有一个字符型char(2字节),本质也是整型Java中的布尔型boolean(1位) 2.类型转换分为自动类型转换和强制类型转换.自动类型转换,比如:范围小的数赋值给了范围大的数:空字符串和基本类型数值连接. 3.表达式类型的自动提升:当一个算术表达

【疯狂Java讲义学习笔记】【流程控制与数组】

[学习笔记]1.switch语句后的expression表达式的数据类型只能是byte.short.char.int四个整数类型.String(Java 7后才支持)和枚举类型. 2.数组的长度不可变,定义数组时候不能指定数组的长度.为数组分配空间的时候一定要进行初始化,数组初始化的方法有两种,第一种是静态初始化,在数组中直接为每个数组元素赋上初值,另一种是动态初始化,在初始化的时候指定数组的长度,由系统来为每个元素指定初值.注意的是两种初始化不能够同时使用,即既指定数组的长度,同时又为每个元素

疯狂Android讲义 - 学习笔记(三)

Android的事件处理 3.1 Android提供了两套事件处理机制:基于监听的事件处理.基于回调的事件处理. 3.2 基于监听的事件处理 3.2.1 监听的处理模型  主要涉及三类对象:EventSource.Event.EventListener. Android的事件处理机制是一种委派式(Delegation)事件处理方式:普通组件将整个事件处理委托给特定的对象(事件监听器),可以把所有可能的事件授权给不同的事件监听器来处理,也可以让一类事件都使用同一个事件监听器来处理. 事件监听类是一

《疯狂XML讲义》学习笔记

<疯狂XML讲义>主要分为五个部分.第一部分介绍了XML.DTD.XML Schema等基础知识,这些知识主要教读者如何定义有效的XML文档,这部分 内容是深入学习后面知识的基础,也是每个使用XML的开发者都应该掌握的 基础.第二部分介绍了CSS.XSLT和XPath等知识,通过使用CSS或XSLT,可 直接将XML文档当成视图技术.第三部分介绍了DOM.SAX.JAXP.dom4j. JDOM.XQuery和XQJ等,其中的DOM.SAX.JAXP.dom4j和JDOM都以结构化的 方式来创