4.媒体类型与媒体查询

4.1 媒体类型

依据设备能力来分离样式的能力,始于媒体类型

媒体类型用于针对特定的环境应用样式,包括屏幕显示、打印和电视等。

通过给link元素添加media属性,可以指定在哪些设备上应用相关样式。

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

在CSS文件中指定媒体类型:

@media print {
.smallprint {
font-size: 11pt;
}
}

4.2 媒体查询

link元素中,媒体查询可以这样写:

<link rel="stylesheet" href="main.css" media="screen and (min-width: 600px)" />

这样就声明了main.css应该用于屏幕媒体,而且媒体条件是视口至少600CSS像素宽。

同样的声明可以在CSS文件中通过@media规则写成如下格式:

@media screen and (min-width: 600px) {
/* 这里写规则 */
}

width(以及min-widthmax-width)是响应式Web设计的主打属性。

宽度之所以如此重要,是因为我们创建网页的默认方式就是水平布局最多只能跟视口一样宽。而在垂直方向上,可以让内容自动扩展,用户可以垂直滚动页面。因此,知道什么时候有多少水平空间可用于布局是非常必要的。

虽然查询视口的尺寸占据了媒体查询的绝大多数,但还可以查询其他设备特性。

几乎所有浏览器都已经支持了基本的媒体查询。

条件注释是IE直至(但不含)IE10都存在的一组特殊语法。在非IE浏览器中,条件注释就像正常的HTML注释一样,会被忽略掉。

<!-- [if (lt IE 9) & (!IEMobile)]>
<link rel="stylesheet" href="oldIE.css" media="all">
<![endif]-->

5.响应式设计与结构化CSS

5.1 移动优先的CSS

移动优先,即在设计和开发中,先考虑移动设备。

min-width查询作为主要工具,可以基于视口宽度渐进地应用调整。但是也不能忽略max-width查询。

body {
font-family: 'Open Sans', 'Helvetica Neue', Arial, sans-serif;
line-height: 1.5;
}
h1,h2,h3 {
font-family: 'Open Sans Condensed', 'Arial Narrow', Arial, sans-serif;
}
@media only screen and (min-width: 37.5em) {
h1,h2,h3 {
font-family: 'Open Sans', 'Helvetica Neue', Arial, sans-serif;
}
}

这里换成max-width,代码量会减少。

body {
font-family: 'Open Sans', 'Helvetica Neue', Arial, sans-serif;
line-height: 1.5;
}
@media only screen and (max-width: 37.5em) {
h1,h2,h3 {
font-family: 'Open Sans Condensed', 'Arial Narrow', Arial, sans-serif;
}
}

5.2 媒体查询放在何处

涉及页面布局的媒体查询放在布局相关的规则附近,涉及调整网站组件中某些细节的媒体查询放在该组件样式规则附件。

媒体查询放在哪里,并没有固定位置。作为开发者,你可以按照自己团队和项目的需要来组织CSS代码。

6.几种响应式设计模式

6.1 响应式文本列

.multicol {
column-width: 16em;
}

多栏文本在网页中应该尽量少用。

6.2 没有媒体查询的响应式Flexbox

无须使用媒体查询,Flexbox本身就可以创建出能够有效利用空间的适配布局。

相关阅读:CSS内容布局

6.3 响应式网格与网格模板区

相关阅读:CSS页面布局与网格(下)

7.响应式布局之外

7.1 响应式背景图片

<header class="profile-box" role="banner"></header>
.profile-box {
height: 300px;
background-size: cover; /* 在视口变大时,背景图片会自动变大 */
background-image: url(img/small-cat.jpg);
}
@media only screen and (min-width: 600px) {
.profile-box {
height: 600px;
background-image: url(img/big-cat.jpg);
}
}

7.2 响应式嵌入媒体

响应式媒体基础:

img, object, video, embed {
width: auto;
max-width: 100%; /* 让元素变得可以伸缩,同时又不会超过其固有大小。 */
height: auto;
}

7.3 响应式排版

屏幕大小不同,排版的基准尺寸也要相应调整。

一般来说,要将屏幕文字大小设置为20像素,才能让人感觉跟看书一样。

常见的情况是网页中的文字偏小。这通常代表了设计师或开发人员个人的喜好,而不是文本实际应有的可读性。

emrem及视口单位(vw、vh、vmin和vmax)等相对长度的字体大小很适合不同屏幕间的适配。

几乎每个浏览器的用户样式表都会设置一个16像素的基准字体大小。基于em单位的媒体查询,就是以这个由浏览器设置的基准大小为参照值的。

基于像素字体大小很难实现自动适配的布局,而使用相对大小就可以让布局伸缩更容易。

参考资料:

  • 《精通CSS》— [英] 安迪·巴德、[瑞典] 埃米尔·比约克隆德

响应式Web设计与CSS(下)的更多相关文章

  1. 响应式Web设计与CSS(上)

    1.一个例子 响应式Web设计最核心的一点,就是可以适配不同视口大小的流式布局. 1.1 简单上手 <div class="row"> <header class ...

  2. HTML5、CSS3与响应式Web设计入门(2)

    HTML5的宽泛含义开拓了Web开发的视野,增加了开发方案的多样性,同时也带给很多Web开发者不小的困惑,就是HTML5在涉及到Web某个应用领 域的开发时,到底代表了什么?本篇文章的目的就在于跟大伙 ...

  3. CSS3-基于浮动的布局,响应式WEB设计,定位网页上的元素,设计打印页面的css技术

    基于浮动的布局: 1.除非图片设置了宽度,否则始终应该要对浮动的图片设置一个宽度,这样可以让浏览器给其他内容腾出环绕的空间 2.当侧边栏的高度与主内容区的高度不一致的时候,可以用个margin进行调整 ...

  4. CSS响应式web设计

    参考 1. 响应式web设计之CSS3 Media Queries http://www.cnblogs.com/mofish/archive/2012/05/23/2515218.html 2. 用 ...

  5. 响应式WEB设计的9项基本原则

    响 应式Web设计对于解决多类型屏幕问题来说是个不错方案,但从印刷的角度来看,其却存在着很多的困难.没有固定的页面尺寸.没有毫米或英寸,没有任何物理 限制,让人感到无从下手.随着建立网站可用的各种小工 ...

  6. 最佳的 14 个免费的响应式 Web 设计测试工具

    一旦你决定要搭建一个网站就应该已经制定了设计标准.你认为下一步该做什么呢?测试!我使用“测试”这个词来检测你网站对不同屏幕和浏览器尺寸的响应情况.测试在响应式网页设计的过程中是很重要的一步.如果你明白 ...

  7. [转]响应式WEB设计学习(1)—判断屏幕尺寸及百分比的使用

    原文地址:http://www.jb51.net/web/70360.html 现在移动设备越来越普及,用户使用智能手机.pad上网页越来越普遍.但是传统的fix型的页面在移动终端上无法很好的显示.因 ...

  8. css014 响应式web设计

    css014 响应式web设计 一.    响应式web设计基础知识 1.rwd的三大理念:a.用于布局的弹性网络, b.用于图片和视频的弹性媒体,c.为不同屏幕宽度创建的不同样式的css媒体查询. ...

  9. 什么是响应式Web设计?怎样进行?

    http://beforweb.com/node/6/page/0/3 开始第一篇.老规矩,先无聊的谈论天气一类的话题.十一长假,天气也终于开始有些秋天的味道,坐在屋里甚至觉得需要热咖啡.话说两年前也 ...

随机推荐

  1. AI芯片

    课程作业,正好自己也在学深度学习,正好有所帮助,做了深度学习的AI芯片调研,时间比较短,写的比较仓促,大家随便看看 近年来,深度学习技术,如卷积神经网络(CNN).递归神经网络(RNN)等,成为计算机 ...

  2. 00-Windows系统MySQL数据库的安装

    1.数据库安装 官网下载MySQL数据库. 下载安装包后解压缩到相关目录,我解压缩到:D:\360极速浏览器下载\mysql-8.0.19-winx64. 打开刚刚解压的文件夹 D:\360极速浏览器 ...

  3. Spring Boot 2.x基础教程:使用EhCache缓存集群

    上一篇我们介绍了在Spring Boot中整合EhCache的方法.既然用了ehcache,我们自然要说说它的一些高级功能,不然我们用默认的ConcurrentHashMap就好了.本篇不具体介绍Eh ...

  4. Python 实现邮件发送功能(进阶)

    上篇文章已经介绍了利用Python发送文本消息的用法,也在文末遗留了如何发送图片和附件的问题,本章主要来回答这两个问题.   本章主要包含知识点: 1. 如何将图片放到邮件主体中发送 2. 如何发送附 ...

  5. 将终结点图添加到你的ASP.NET Core应用程序中

    在本文中,我将展示如何使用DfaGraphWriter服务在ASP.NET Core 3.0应用程序中可视化你的终结点路由.上面文章我向您演示了如何生成一个有向图(如我上篇文章中所示),可以使用Gra ...

  6. mybatis逆向工程生成java代码和xml配置

    mybatis官方提供了一个逆向工程包,可以针对数据库表自动生成mybatis执行所需要的Pojo.Mapper xml文件.Mapper 接口文件. mybatis-generator有很多种用法: ...

  7. 一文说通C#中的异步编程

    天天写,不一定就明白. 又及,前两天看了一个关于同步方法中调用异步方法的文章,里面有些概念不太正确,所以整理了这个文章.   一.同步和异步. 先说同步. 同步概念大家都很熟悉.在异步概念出来之前,我 ...

  8. JDBC 连接 MySQL 8.0.15+ 常见错误记录

    课后复习 1. No suitable driver found for mysql:jdbc://localhost:3306/test 错误原因: mysql:jdbc://localhost:3 ...

  9. SQL 更新删除

    -- 插入数据 INSERT INTO [ Salary ] VALUES(25451,4545,45 ) INSERT INTO [ Salary ] (编号,收入,支出) VALUES(25451 ...

  10. 在java中进行日期时间比较的4种方法

    1. Date.compareTo() java.util.Date提供了在Java中比较两个日期的经典方法compareTo(). 如果两个日期相等,则返回值为0. 如果Date在date参数之后, ...