致谢
Ethan Marcotte 响应式网页设计之父
《义海倾情》
1 RWD,Responsive Web Design
- 伊桑.马科特 AList Apart
- 弹性网格布局,弹性图片,媒体和媒体查询
- 不再使用像素px,而是使用相对度量单位em或百分比
- 视口调试工具 Microsoft Iternet Explorer Developer Toolbar ,Safari RaiseMe,Resizer,Firefox Firesizer,Chrome Windows Resizer
- 网站 http://thinkvitamin.com http://2011.dconstruct.org
- 响应式设计创意收集网站 http://mediaquery.es
- html5新增语义化标签元素: header nav
- css3 http://www.csszengarden.com
- 圆角 border-radius
- 渐变 linear-gradient(yellow,blue)
- http://www.panic.com/blog/
- http://demo.macrofolio.net/3d_animation_css3
- http://designlovr.com/examples/dynamic_stack_of_index_cards/
2 媒体查询,支持不同的视口
@media screen and (max-width:960px){
}
- 可以将多个表达式组合在一起,用and连接
<link rel="style sheet" media="screen and (orientation : portrait) and (max-width:800px), projection" href="800wide-portrait-screen.css" />
- 可以写一个媒体查询列表,用逗号分隔,其中一个为真,就加载样式表。
- 还可以在样式表里面使用媒体查询:
@media screen and (max-device-width:400px){
h1 { color:green}
}
- 还可以使用css的@import指令在当前样式表中按条件引入其它样式表:
@import url("phone.css") screen and (max-width:360px);
width 视口宽度
height 视口高度
device-width 设备屏幕的宽度
device-height 设备屏幕的高度
orientation 横向还是纵向状态
aspect-ratio 视口的宽高比,如16/9
device-aspect-ratio 屏幕的宽高比
color 每种颜色的位数,如16
color-index 设备颜色索引表中的颜色数,必须是非负整数
momochrome 单色缓冲区中每像素所使用的位数,必须是非负整数,如2
resolution 分辨率,如 300dpi 118dpcm
scan 电视扫描方式,progressive 逐行 interlace 隔行
grid 检测输出设备是网格设备还是位图设备
上述除了scan和grid之外都可以使用min和max来创建一个查询范围
- 为ie8及更低版本加入媒体查询的工具:Respond.js
- 重置样式:用来覆盖不同浏览器渲染HTML元素时的各种默认样式。
Eric Meyer,Dan Cederholm
- 怎样阻止移动设备浏览器自动调整页面大小:基于Webkit核心的浏览器大多支持用viewport meta 元素覆盖默认的画布缩放设置,只需要在<head>标签中插入一个<meta>标签,其中可以设置具体的宽度或者缩放比例,下面是将页面方大到实际尺寸两倍显示的meta标签实例:
<meta name="viewport" content="initial-scale=2.0,width=device-width" />
maximum-scale 最多放大倍数
minimum-scale 最少放大倍数
user-scalable=no 禁止缩放
- css正在引入能实现同样功能的@viewport 声明
3 拥抱流式布局
- 使用百分比布局创建流动的弹性界面,同时使用媒体查询来限制元素的变动范围。
- 将网页从固定布局转换成百分比布局
需要牢记的公式:
目标元素宽度÷上下文元素宽度=百分比元素宽度
- 将文字大小从像素尺寸修改为相对单位em,实现文字缩放。
现代浏览器的默认文字大小都是16像素,一开始给body应用如下任意一条规则所产生的效果都一样:
font-size:100%;
fobt-size:16px;
font-size:1em;
- 百分比计算公式也适用于将文字的像素单位转换为相对单位em。
- 行高一般相对与元素本身的文字大小,而不是父元素的文字大小。
- em作为一种测量单位,指的是特定字母的宽度和高度相对于特定字体磅值的比例。
- 让图片随视口缩放
要先删除图片标签的宽度和高度属性,再设置百分比。
为防止弹性图片随视口拉大超出其原始尺寸,需要为其设置阈值,使用max-width,此条也适用于整个页面,防止其无限制扩张。
Filament Group的"响应式图片"
Matt Wilcox 的"自适应图片"√
实现自适应图片需要Web服务器编程的辅助,准备Apache 2、PHP 5.x和GD库。
框架:Sematic Skeleton LessFramework ,
1140 css Grid,Colummal ,
960.gs
row,container,alpha,omega(分别表示一行中的第一个和最后一个元素),col_x
4 响应式设计中的Html5
具体指一段能给老版本浏览器带来新特性的Javascript代码,它会给你的代码里追加多余的代码。
- 轻量级增强脚本能让老版本IE支持新的HTML元素 Remy Sharp
- Modernizer 除了能让IE支持html5新元素以外,还能基于一系列新特性测试来有条件的加载更高级的腻子脚本,css文件,以及额外的js文件。
- html5样板文件: http://html5boilerplate.com
<!doctype html>
<html lang="zh">
<meta charset=utf-8>
非保留:strike enter font acronym frame frameset
<section>元素用来定义文档或应用程序中的区域或节
<nav>元素用来定义文档的主导航区域
<article>用来包裹独立的内容片段
<aside>元素用来表示与页面主内容松散相关的内容,经常可用做侧边栏,另外,引文、广告以及导航元素也可以使用它
<hgroup>:如果页面中有一组使用<h1>、<h2>、<h3>等标签的比标题、标语和副标题,则可以考虑使用<hgroup>将他们包裹起来。
http://gsnedders.html5.org/outliner/
http://hoyois.github.com/html5liner/
<header>元素不计入大纲结构,所以不能用它来划分内容结构,而是应该用他来包含对区域内容的介绍说明。
<footer>页脚,博客文脚
<address>用来标注离其最近的<article>或<body>祖先元素的联系信息。
<b>、<em>强调内容的重点、<i>
- 遵循WAI-ARIA无障碍网页应用技术实现无障碍站点,让残障人士也能无障碍的访问网页上的动态内容。
http://www.w3.org/WAI/intro/aria
ARIA地标角色属性role:
application,banner,conplementary,contentinfo,form,main,navigation,search
使用非可视桌面阅读器(NVDA)测试网站可访问性:http://www.nvda-project.org/
为使用了无障碍技术的元素设置样式: nav[role="navigation"]{···}
- 嵌入视频:<video src="myVideo"></video>
video中可放入多个source标签,以适应不同浏览器对视频格式的支持,依次方法还可针对老浏览器设置备用视频,加入flash的标签,更进一步,还可以提供下载链接。
- 音频用audio标签
- 对于使用了iframe嵌入视频,要进行响应式设计,可以使用插件,如jQuery的FitVids
- 实现离线Web应用:
在html标签中使用manifest属性,制定离线内容设置文件xxx.manifest文件的位置,其MIME类型为text/cache-manifest
http://diveintohtml5.com
私有前缀
http://leaverou.github.com/prefixfree/
当前浏览器对特定CSS3和html5特性的支持程度: http://caniuse.com
最近全球浏览器使用率统计: http://gs.statcounter.com
- 多栏布局 column-width,column-count,column-gap,column-rule
http://www.w3.org/TR/css3-multicol/
img[alt="atwi_oscar"] {···}
匹配开头选择器 Element[attribute^="value"]
匹配包含内容选择器 Element[attribute*="value"]
匹配结尾选择器 Element[attribute$="value"]
first-child选择器 li:first-child ,
li:last-child
display:table
display:table-row
display:table-cell
- nth-child选择器 nav ul li:nth-child(even) a{···}
nth规则:
nth-child(n)
nth-last-child(n) 从文档末尾开始算
nth-of-type(n)
nth-last-of-type(n)
odd
even
要求对伪元素使用两个冒号以便与伪类进行区别,如
p::first-line
p::first-letter
使用@font-face嵌入网页字体
字体资源站点 www.google.com/webfonts www.fontsquirrel.com www.typekit.com www.fontdeck.com
始终为应用了@font-face字体的标题元素设定font-weight属性,以防止字体模糊
6 用CSS3创造令人惊艳的美
- prefix私有前缀自动为css3规则追加浏览器私有前缀。
http://leaverou.github.com/prefix/
text-shadow: 1px 1px 1px #cccccc
第一个值右侧阴影大小,第二个值下方阴影大小,第三个值模糊距离,第四个值颜色
使用负值可以制作出左上方阴影效果
删除第三个值可以去掉模糊效果
浮雕: text-shadow: 0 1px 0 hsla(0, 0%, 100%, 0.75);
用逗号分隔的多组值就可以制作出多重的文字阴影。
box-shadow: 0px 3px 5px #444444
box-shadow:inset 0 0 40px #000000
线性的 background: linear-gradient(90deg,#ffffff 0%,#e4e4e4 50%, #ffffff 100%);
90deg:表示沿着90度垂直方向,也可以使用to top right这样的值
径向的 background: radial-gradient(center, ecllise cover,#ffffff 72%,#dddddd 100%);
渐变形状:circle,ellipse
渐变大小:closet-side,closet-corner,fathest-side,fathest-corner,cover,contain
在线渐变生成器: http://www.colorzilla.com/gradient-edit/
重复的 background: repeating-linear-gradient(90deg,#ffffff 0px,hsla(0,1%,50%,0.1) 5px);
背景渐变图案 http://lea.verou.me/css3patterns/
- 使用css预处理器轻松编写css3代码 :SASS,LESS
- 多重背景图片
background:
url('../img/1.png'),
url('../img/2.png'),
url('../img/3.png') left bottom ,black;
background-size: 100% 50%, 300px 400px , auto;
预定义值:auto, cover,contain
background:url('...') left bottom,black;
- @font-face图标 :将图标制作成字体,再使用@font-face引入
http://fico.lensco.be/
7 css3 过渡、变形和动画
transition: all 1s ease 0s
注意,过渡声明要放在过渡效果开始的元素上
transition-property 要过渡的属性名称
transition-duration 定义过渡效果持续的时间,单位为s
transition-timing-function 定义过渡期间速度如何变化,ease linear ease-in ease-out ease-in-out cubic-bezier
transition-delay 可选,用于定义过渡开始前的延迟时间
注意,有些属性无法实现过渡。
#content a{
........;
transition-property: border, color,text-shadow;
transition-duration:2s,3s,8s;
}
理解过渡调速函数,其实都是某种贝塞尔曲线,本质上就是缓动函数 :
http://cubic-bezier.com/
- 响应式网站的有趣过渡 http://css-stricks.com/
* {
transition:all 1s;
}
nav ul li a:hover {
transform: scale(1.7);
}
鼠标悬停时,放大到原始大小的1.7倍
如果在safari中应用此效果,需要给原始元素设置display:block;
scale 缩放
translate 移动
rotate 按一定角度旋转,单位deg
skew 沿x轴和y轴斜切,输入两个角度值
matrix 允许你按像素精度控制变形效果,它能让你将若干变形效果组合成单个声明
transform:matrix(1.678,-0.256,1.525,2.333,-51.533,-1.989);
- 傻瓜式的矩阵变形工具 http://www.useragentman.com/matrix/
- 使用transform-origin属性来修改变形效果的起点:
transform:rotate(45deg);
transform-origin:20% 20%
首先在父级元素上设置透视,开启3D场景: perspective: 200
将transform-style设置为preserve-3d
添加翻转效果: transform:rotateY(180deg);
翻转后隐藏背面的内容: backface-visibility:hidden;
注意使用绝对定位来造成覆盖
对于不支持该效果的浏览器,使用降级方案,设置z-index值
由两部份组成:@keyframes 关键帧声明 和 该关键帧的使用
声明部分:
@keyframes warning {
0% {
text-shadow:…;
}
50% {
…
}
100% {
…
}
}
除了使用百分比,也可以使用from和to来定义开始和结束帧
使用部分: animation: warning 1.5s infinite ease-in;
也可以一个个单独列出来:
animation-name: warning;
animation-duration:1.5s;
animation-time-function:ease-in-out;
animation-iteration-count:infinite;
animation-play-state:running;
animation-delay:0s;
animation-fill-mode:none;
http://webdesignerwall.com/
8 html5表单
- 首先表单被设定一个ID用于对应样式,然后包含一个html5的hgroup,用于表单标题和文字说明。
- 表单中的子区域都使用带有legend标签的fieldset来包裹。
- 每一个输入元素都有一个label元素与之对应,且一并包含在div中。
id name type placeholder
- required是一个布尔类型的属性,表明该表单域为必填项,如果提交时没有输入该项信息,则浏览器会显示警告信息,警告信息的显示方式取决于浏览器与输入框的类型。
- 为方便屏幕阅读用户,可以为输入框追加WAI-ARIA属性:aria-required="true"。
- range,color,button,hidden类型的输入元素都不能使用required,因为它们几乎都有默认值。
- autofocus 属性可以让表单加载完成时就有一个表单域被默认聚焦(或选中),以便于用户输入。
- autocomplete可以设置禁用(off)或开启(on)自动完成功能。
可以通过给form标签设置该属性来禁用整个表单的自动完成功能。
- list属性及其对应的datalist元素可以让用户在输入框中开始输入时,显示一组备选项。
在datalist标签中使用select包裹的option,方便为老浏览器提供降级方案。
在不引入额外js的前提下,限制用户输入的数据。
在不支持这些新特性的浏览器中,会被降级显示为一个标准的文本输入框。
type="email"
type="number" min max
type="url"
type="tel"
type="search"
pattern="[一个正则表达式]"
type="color"
type="date"
type="month"
type="week"
type="time"
type="datetime" 或 "datetime-local" 省略了时区信息。还可设置步增值 step="14000"。
- type="range" min max ,使用该类型目前可以使用js来显示当前值:onchange="showValue(this.value)"。
- 如何给不支持新特性的浏览器打补丁
Modernizr http://www.modernizr.com/ 用于向缺少html5/css3特性支持的浏览器打补丁。
Webshim Lib http://afarkas.github.com/webshim/demos/
- 使用css3美化html5表单
- 针对表单的css3伪类选择器
input:required
input:focus:invalid
input:focus:valid
9 解决跨浏览器问题
- http://www.andthewinnerisnt.com
- 渐进增强与优雅降级
优雅降级:为现代浏览器制作网站,然后保证为某些老版本提供基本可用的体验。
渐进增强:恪守Web标准的标签,在此基础上通过css样式和js来为更先进的浏览器提供渐进式的增强。
- Opera和Aaron Gustafson
- 可以使用html5验证工具来排除错误代码:
http://validator.nu
http://validator.w3.org
http://www.my-debugbar.com/wiki/IETester/HomePage
Response.js http://github.com/scottjehl/Respond
- 放置在IE条件注释中的垫片脚本,使其只针对IE特定版本加载:
<!--[if lte IE 8]>
<script src="js/response.min.js"/></script>
<![endif]-->
YepNop.js http://yepnopejs.com/
http://css-stricks.com/convert-menu-to-dropdown/
Responsive Menu http://github.com/mattkersley/Responsive-Menu
原作作者博客:
http://www.benfrain.com/