1、响应式网页设计简介
什么是响应式网页设计?
- 响应式 web 设计会让您的网页在所有设备上看起来都不错。
- 响应式 web 设计仅使用 HTML 和 CSS。
- 响应式 web 设计并不是程序或 JavaScript。
为所有用户获得最佳体验的设计
可以使用许多不同的设备来查看网页:台式机、平板电脑和手机。无论使用哪种设备,您的网页都应该看起来美观且易用。网页不应舍弃信息来适合较小的设备,而应使其内容适合任何设备。
如果您使用 CSS 和 HTML 调整大小、隐藏、缩小、放大或移动内容,以使其在任何屏幕上看起来都很好,则称为响应式 Web 设计。
响应式实例:
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
* {
box-sizing: border-box;
}
.row::after {
content: "";
clear: both;
display: table;
}
[class*="col-"] {
float: left;
padding: 15px;
}
html {
font-family: "Lucida Sans", sans-serif;
}
.header {
background-color: #9933cc;
color: #ffffff;
padding: 15px;
}
.menu ul {
list-style-type: none;
margin: 0;
padding: 0;
}
.menu li {
padding: 8px;
margin-bottom: 7px;
background-color: #33b5e5;
color: #ffffff;
box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24);
}
.menu li:hover {
background-color: #0099cc;
}
.aside {
background-color: #33b5e5;
padding: 15px;
color: #ffffff;
text-align: center;
font-size: 14px;
box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24);
}
.footer {
background-color: #0099cc;
color: #ffffff;
text-align: center;
font-size: 12px;
padding: 15px;
}
/* For mobile phones: */
[class*="col-"] {
width: 100%;
}
@media only screen and (min-width: 600px) {
/* 针对平板电脑: */
.col-s-1 {width: 8.33%;}
.col-s-2 {width: 16.66%;}
.col-s-3 {width: 25%;}
.col-s-4 {width: 33.33%;}
.col-s-5 {width: 41.66%;}
.col-s-6 {width: 50%;}
.col-s-7 {width: 58.33%;}
.col-s-8 {width: 66.66%;}
.col-s-9 {width: 75%;}
.col-s-10 {width: 83.33%;}
.col-s-11 {width: 91.66%;}
.col-s-12 {width: 100%;}
}
@media only screen and (min-width: 768px) {
/* 针对桌面: */
.col-1 {width: 8.33%;}
.col-2 {width: 16.66%;}
.col-3 {width: 25%;}
.col-4 {width: 33.33%;}
.col-5 {width: 41.66%;}
.col-6 {width: 50%;}
.col-7 {width: 58.33%;}
.col-8 {width: 66.66%;}
.col-9 {width: 75%;}
.col-10 {width: 83.33%;}
.col-11 {width: 91.66%;}
.col-12 {width: 100%;}
}
</style>
</head>
<body>
<div class="header">
<h1>Shanghai</h1>
</div>
<div class="row">
<div class="col-3 col-s-3 menu">
<ul>
<li>交通</li>
<li>文化</li>
<li>旅游</li>
<li>美食</li>
</ul>
</div>
<div class="col-6 col-s-9">
<h1>欢迎来到上海</h1>
<p>上海市,简称沪,别称申,是中华人民共和国直辖市,中国的经济、金融、贸易和航运中心,世界著名的港口城市,是中国人口第二多的城市。</p>
</div>
<div class="col-3 col-s-12">
<div class="aside">
<h2>历史</h2>
<p>最晚在新石器时代,上海地区已经有先民聚居。春秋时代,上海由吴国管辖,战国时代则是楚国领土 ...</p>
<h2>位置</h2>
<p>上海位于中国东部弧形海岸线的正中间,长江三角洲最东部,东临东海,南濒杭州湾,西与江苏、浙江两省相接 ...</p>
<h2>环境</h2>
<p>上海地处江南水乡,并位于长江入海口,亦不处于主要地震带上,因此如地震、洪水以及地质类灾害鲜有发生 ...</p>
</div>
</div>
</div>
<div class="footer">
<p>请调整浏览器窗口的大小,以查看内容如何响应调整大小。</p>
</div>
</body>
</html>
如上可以看到,关键的响应式元素具有两个类名,如 col-6 col-s-9,在两种不同的screen分辨率下选择使用,针对平板电脑600px以上生效 @media only screen and (min-width: 600px),针对桌面 768px及以上生效 @media only screen and (min-width: 768px),注意桌面样式写在平板之后覆盖。
二、视口
1、什么是视口?
视口(viewport)是用户在网页上的可见区域。
视口随设备而异,在移动电话上会比在计算机屏幕上更小。
在平板电脑和手机之前,网页仅设计为用于计算机屏幕,并且网页拥有静态设计和固定大小是很常见的。
然后,当我们开始使用平板电脑和手机上网时,固定大小的网页太大了,无法适应视口。为了解决这个问题,这些设备上的浏览器会按比例缩小整个网页以适合屏幕大小。
这并不是完美的!勉强是一种快速的修正。
2、设置视口
HTML5 引入了一种方法,使 Web 设计者可以通过 <meta>
标签来控制视口。
您应该在所有网页中包含以下 <meta>
视口元素:
<meta name="viewport" content="width=device-width, initial-scale=1.0">
它为浏览器提供了关于如何控制页面尺寸和缩放比例的指令。
width=device-width
部分将页面的宽度设置为跟随设备的屏幕宽度(视设备而定)。
当浏览器首次加载页面时,initial-scale=1.0
部分设置初始缩放级别。
下面分别是不带视口 meta 标签的网页、以及带视口 meta 标签的网页的例子:


注意事项:
1. 请勿使用较大的固定宽度元素 - 例如,如果图像的宽度大于视口的宽度,则可能导致视口水平滚动。请务必调整此内容以适合视口的宽度。
2. 不要让内容依赖于特定的视口宽度来呈现好的效果 - 由于以 CSS 像素计的屏幕尺寸和宽度在设备之间变化很大,因此内容不应依赖于特定的视口宽度来呈现良好的效果。
3. 使用 CSS 媒体查询为小屏幕和大屏幕应用不同的样式 - 为页面元素设置较大的 CSS 绝对宽度将导致该元素对于较小设备上的视口太宽。而是应该考虑使用相对宽度值,例如 width: 100%。另外,要小心使用较大的绝对定位值,这可能会导致元素滑落到小型设备的视口之外。
所有列应向左浮动,并带有 15px 的内边距:
[class*="col-"] {
float: left;
padding: 15px;
border: 1px solid red;
}
行内的所有列全部都向左浮动,因此会从页面流中移出,并将放置其他元素,就好像这些列不存在一样。为了防止这种情况,我们会添加清除流的样式:
.row::after {
content: "";
clear: both;
display: table;
}
3、媒体查询
媒体查询是 CSS3 中引入的一种 CSS 技术。
仅在满足特定条件时,它才会使用 @media
规则来引用 CSS 属性块。
实例
添加一个断点,其中设计的某些部分在断点的每一侧会表现得有所不同。
如果浏览器窗口是 600px 或更小,则背景颜色为浅蓝色:
@media only screen and (max-width: 600px) {
body {
background-color: lightblue;
}
}
始终移动优先设计
移动优先(Mobile First)指的是在对台式机或任何其他设备进行设计之前,优先针对移动设备进行设计(这将使页面在较小的设备上显示得更快)。
典型的设备断点
高度和宽度不同的屏幕和设备不计其数,因此很难为每个设备创建精确的断点。为了简单起见,您可以瞄准这五组:
/* 超小型设备(电话,600px 及以下) */
@media only screen and (max-width: 600px) {...}
/* 小型设备(纵向平板电脑和大型手机,600 像素及以上) */
@media only screen and (min-width: 600px) {...}
/* 中型设备(横向平板电脑,768 像素及以上) */
@media only screen and (min-width: 768px) {...}
/* 大型设备(笔记本电脑/台式机,992px 及以上) */
@media only screen and (min-width: 992px) {...}
/* 超大型设备(大型笔记本电脑和台式机,1200px 及以上) */
@media only screen and (min-width: 1200px) {...}
仅在浏览器窗口的宽度大于其高度时才适用,即所谓的“横屏”方向:
orientation: landscape
4、H5 picture 元素
<picture>
元素的作用类似于 <video>
和 <audio>
元素。我们设置了不同的来源,而匹配优先权的第一个来源是正在使用的来源:
<picture>
<source srcset="img_smallflower.jpg" media="(max-width: 400px)">
<source srcset="img_flowers.jpg">
<img src="img_flowers.jpg" alt="Flowers">
</picture>