《HTML5触摸界面设计与开发》——2.5 响应式的CSS

简介:

本节书摘来自异步社区《HTML5触摸界面设计与开发》一书中的第2章,第2.5节,作者: 【美】Stephen Woods 更多章节内容可以访问云栖社区“异步社区”公众号查看。

2.5 响应式的CSS

在本书的配套网站,touch-interfaces.com上,你可以下载两个CSS文件:

Eric Meyer的reset.css文件。里面有几个用于“重置”的CSS样式。我强烈推荐使用它,因为从“重置”后完全清洁的环境开始,要优于不停地尝试修改兼容浏览器默认的样式。
样式表(birds.css)是加州鸟类网站专有的。birds.css由桌面版样式开始。你可能会认出这是一个非常简单的两栏流动布局。桌面版的内容区域是流动的,而包含导航按钮的侧边栏是固定的。
代码清单 2.3展示了这些基本的样式。

代码清单2.3 基本样式

html {
   background: #fff;
   color: #000;
}

a {
  color: green;
  text-decoration: none;
}

p {
  margin-bottom: 10px;
}

h2 {
   font-size: 20px;
   margin: 4px;
}

i {
  font-style: italic;
}

.container {
  padding: 0 50px;
}

.bd {
  font-family: Helvetica, "Helvetica Neue", Arial, sans-serif ;
}

.hero-img {
  max-width: 100%;
}

.nav-li {
  display: inline-block;
  background: #5e49ff;
  border: 3px solid #8a7bfd;
  width: 120px;
  margin-bottom: 10px;
}

.nav-li .nav-link {
  color: #fff;
  padding: 4px;
}

.header {
  width: 100%;
  height: 60px;
  background: #000;
  padding: 0;
  font-size: 38px;
  font-weight: bold;

}

.header .title{
  color: #fff;
  padding: 10px;
  text-align: left;
}

/* Allow the image to grow proportionally inside its container */
.hero-shot {
  width: 50%;
  float: left;
  margin-right: 10px;
}

.sidebar {
  position: absolute;
  padding: 10px;
  top: 60px;
  width: 150px;
}
.main {

  margin: 10px 10px 10px 150px;

}

.footer {
  width: 100%;
}

你可能会注意到,海鸥图像设置的max-width为100%,而封闭的容器(.hero-shot)具有相对宽度1。这是创建所谓响应式图像的最简单方式。也就是说,图像会自动按比例缩放到容器(即.hero-shot)的宽度。在这种情况下图像的宽度总是文本块的宽度的一半。

这种响应式图像技术有一个重大的缺点:用户的设备肯定要下载多余的字节。在下一章中,我们将重新审视图像的问题。

2.5.1 创建分界点
正如前面提到的,我们将在加州鸟类网站的移动版和桌面版中使用相同的HTML标记。设计上是基于这一点的,布局和设计都会调整,以适应用户的设备的大小。为此,我们可以创建分界点:宽度的像素值不同会触发样式的更改,来适应不同宽度的屏幕。对于加州鸟类网站,我们将创建两个分界点:平板电脑为800px,手机为480px。

也就是说,如果屏幕宽度是801px或以上,我们将应用样式表中的默认样式。我们将为屏幕宽度在481px到800px之间的平板电脑创建特殊的样式,为屏幕宽度为480px或更窄的手机创建额外的样式。

如果你以前从未这样做过,改变样式以适应屏幕宽度的想法听起来很可怕。值得庆幸的是,媒体查询(media queries)使人们可以创造出一个能自适应的样式,而不必使用JavaScript。

媒体查询
由于CSS2已被广泛的支持,开发者已经能够通过在link标签上设置不同的媒体查询值,来为不同的多媒体设备提供不同的样式表。通常情况下这个值都被用于规定一个单独的“打印”样式表,例如:

<!-- this stylesheet is for the screen -->
<link rel="stylesheet" media="screen" href="styles.css">

<!-- This stylesheet is for printing -->
<link rel="stylesheet" media="print" href="print-styles.css">

CSS3提供了更强大的语法,让你可以根据更多的条件过滤样式表,而不是只能根据媒体类型来过滤。媒体查询由一个媒介类型和其他表达式组成。解析后,媒体查询最终的结果是真或假。如果为真,则应用样式表。

媒体查询可以由一个布尔运算符开始。用“not”开始的话,会将字段最后解析出的结果取反,就像在JavaScript中使用“!”一样。最常见的,你可以用only操作符来开始。由于旧的浏览器无法解析only操作符,就可以有效地在旧浏览器上屏蔽掉只应用于现代浏览器的样式表。

接下来就是媒体类型了。在CSS 2.1规范中,有十个媒体类型,但只有print和screen被各浏览器广泛支持。在媒体类型后面,你可以指定一个表达式。对于加州鸟类网站,我们将根据屏幕宽度来改变样式。宽度特征可以采用任何有效的CSS单位(用任何CSS单位来指定)来达到过滤的目的。

例如,下面这条规则限制只有比较窄的屏幕才可应用该样式表:

<link rel="stylesheet" media="only screen and (max-width: 480px)"
→ href="phone-styles.css">

下面这条规则限制只有比较宽的屏幕才可应用该样式表:

<link rel="stylesheet" media="only screen and (min-width: 2000px)"
→ href="phone-styles.css">

对于加州鸟类网站,我们用媒体查询来定义不同分支。因此,有三个样式表:

<link rel="stylesheet" media="screen" href="birds.css">
<link rel="stylesheet" media="only screen and (max-width: 800px)"
→ href="tablet.css">
<link rel="stylesheet" media="only screen and (max-width: 480px)"
→ href="phone.css">

这里的像素值基于浏览器的报告。例如,在高清屏iPhone的垂直方向上,就媒体查询而言,宽度返回的是320,而不考虑屏幕上的实际物理像素。

注:本章仅讲述了媒体查询的一些皮毛。可查阅Mozilla开发网络了解详细的语法解释(https://developer.mozilla.org/en-us/docs/Css/Media_queries)。另外,还可以在mediaqueri.es找到一些例子。
媒体查询真正伟大之处在于,我们不仅能通过外部的媒体属性使用它,还可以在样式表内部中通过@media指令使用它。

@media only screen and (max-width: 800px) {
  /* css that applies only in this case */
}

这个语法与媒体查询参数的语法是相同的。@media指令在大括号之间创建了一块区域。括号内的CSS只在规则返回true时被应用,否则浏览器将不理会里面的CSS。

2.5.2 创建额外样式
对于加州鸟类网站,我们会为宽度800px的浏览器和宽度480px的浏览器制作额外的样式。设计师又为平板电脑创造了另一个样式图,将导航移动到了顶部中间,以留出更多空间给正文。否则,样式应该是一样的(图2.6)。


<a href=https://yqfile.alicdn.com/84db660fe32c72a4a64884f78ee3967a420af9e7.png" >

因为侧边栏最先出现在DOM树中,我们只需通过给它设置相对位置(postion:relative)和自动宽度(width:auto)就可以将它放回文件流。然后就可以给container少许内边距(padding),如代码清单2.4所示。

代码清单2.4 平板电脑的样式

.container {
  padding: 0 10px;
}

.nav-li {
  width: auto; /* so all 
  the text fits */
}
.sidebar {
  position:relative; /* back in the flow */
  top: 0;
  width: auto;
  padding: 0;
  text-align: center;
}

.header .title {
  text-align: center;
}

.main {
  margin: 0;
}

桌面用户可以改变他的浏览器的大小,当桌面用户调整浏览器大小时,会发现随着调整到不同的宽度,可能会看到应用于手机和平板电脑的样式。如果你想让这些样式只适用于设备的物理宽度,可以使用max-device-width 或 min-device-width属性来设置。

正如你所看到的,样式通常伴随着媒体查询。手机版的样式如图2.2所示,它需要一个稍微不同的布局。代码清单2.5列出了手机版的样式。

代码清单2.5 手机版的样式

.container {
  padding: 0;
}

.main {
  margin: 0;
}

.content {
  margin: 10px 10px;
}

.nav-li {
  font-size: 12px;
}

.hero-shot {
  float: none;
  width: 100%;
  height: 100px;
  overflow: hidden;
  position: relative;
}

.header .title {
  font-size: 24px;
  text-align: left;
}

.hero-shot .caption {
  position: absolute;
  bottom: 5px;
  margin: 0;

}

.hero-shot .caption, .hero-shot .caption a {
  color: #000;
  color: rgba(255,255,255,0.5);
}

}

完整的代码和代码清单2.5都可以在网站上找到。如果你在桌面设备上查看这个页面,你会发现当你调整浏览器窗口大小时,样式会发生变化。

相关文章
|
1天前
|
JavaScript
jquery和CSS3响应式轮播图插件jcSlider
jcSlider是一款jquery和CSS3响应式轮播图插件。jcSlider使用CSS3过渡动画,它可以和animate.css完美结合,生成60多种轮播图过渡动画效果。
|
23天前
|
前端开发 测试技术 定位技术
如何利用HTML和CSS构建企业级网站的全过程。从项目概述到页面结构设计,再到HTML结构搭建与CSS样式设计,最后实现具体页面并进行优化提升,全面覆盖了网站开发的关键步骤
本文深入介绍了如何利用HTML和CSS构建企业级网站的全过程。从项目概述到页面结构设计,再到HTML结构搭建与CSS样式设计,最后实现具体页面并进行优化提升,全面覆盖了网站开发的关键步骤。通过实例展示了主页、关于我们、产品展示、新闻动态及联系我们等页面的设计与实现,强调了合理布局、美观设计及用户体验的重要性。旨在为企业打造一个既专业又具吸引力的线上平台。
46 7
|
23天前
|
前端开发 JavaScript 搜索推荐
HTML与CSS在Web组件化中的核心作用及前端技术趋势
本文探讨了HTML与CSS在Web组件化中的核心作用及前端技术趋势。从结构定义、语义化到样式封装与布局控制,两者不仅提升了代码复用率和可维护性,还通过响应式设计、动态样式等技术增强了用户体验。面对兼容性、代码复杂度等挑战,文章提出了相应的解决策略,强调了持续创新的重要性,旨在构建高效、灵活的Web应用。
31 6
|
23天前
|
存储 移动开发 前端开发
高效的 HTML 与 CSS 编写技巧,涵盖语义化标签、文档结构优化、CSS 预处理、模块化设计、选择器优化、CSS 变量、媒体查询等内容
本文深入探讨了高效的 HTML 与 CSS 编写技巧,涵盖语义化标签、文档结构优化、CSS 预处理、模块化设计、选择器优化、CSS 变量、媒体查询等内容,旨在提升开发效率、网站性能和用户体验。
35 5
|
1月前
|
移动开发 前端开发 JavaScript
[HTML、CSS]细节与使用经验
本文总结了前端开发中的一些重要细节和技巧,包括CSS选择器、定位、层级、全局属性、滚轮控制、轮播等。作者以纯文字形式记录,便于读者使用<kbd>Ctrl + F</kbd>快速查找相关内容。文章还提供了示例代码,帮助读者更好地理解和应用这些知识点。
46 1
[HTML、CSS]细节与使用经验
|
23天前
|
编解码 前端开发 UED
探讨了CSS媒体查询在移动端开发中的应用,介绍了媒体查询的基本概念、常见条件及其在响应式布局、导航菜单、图片优化和字体调整等方面的具体应用
本文深入探讨了CSS媒体查询在移动端开发中的应用,介绍了媒体查询的基本概念、常见条件及其在响应式布局、导航菜单、图片优化和字体调整等方面的具体应用。通过实际案例分析和注意事项的讨论,旨在帮助开发者更好地理解和运用媒体查询,提升移动端用户体验。
39 4
|
1月前
|
移动开发 前端开发 JavaScript
[HTML、CSS]知识点
本文涵盖前端知识点扩展、HTML标签(如video、input、canvas)、datalist和details标签的使用方法,以及CSS布局技巧(如margin、overflow: hidden和动态height)。文章旨在分享作者的学习经验和实用技巧。
34 1
[HTML、CSS]知识点
|
2月前
|
前端开发 JavaScript 搜索推荐
打造个人博客网站:从零开始的HTML和CSS之旅
【9月更文挑战第32天】在这个数字化的时代,拥有一个个人博客不仅是展示自我的平台,也是技术交流的桥梁。本文将引导初学者理解并实现一个简单的个人博客网站的搭建,涵盖HTML的基础结构、CSS样式的美化技巧以及如何将两者结合来制作一个完整的网页。通过这篇文章,你将学会如何从零开始构建自己的网络空间,并在互联网世界留下你的足迹。
|
1月前
|
移动开发 JavaScript 前端开发
html table+css实现可编辑表格的示例代码
html table+css实现可编辑表格的示例代码
58 12
下一篇
DataWorks