设计专业响应式网站的终极指南
我之前在 Medium 和 Dev.to 网站上写过一篇关于使用 CSS rem 和 em 单位进行响应式设计的博客文章。文章中我通过示例解释了 rem 和 em 单位的工作原理、适用场景以及它们如何帮助我们构建响应式网站。在本篇终极指南中,我将介绍几种有助于设计完美响应式网站的方法。
响应式网页设计是指构建能够自动调整大小,使其在所有设备上(从台式电脑到平板电脑和手机)都能良好显示的网站。由于各种屏幕尺寸的联网设备日益普及,响应式网页设计已成为现代网页开发中不可或缺的一部分。
响应式设计能够动态调整网站内容的布局和缩放比例,从而提供最佳的浏览和交互体验。例如,导航菜单可以转换为移动友好的下拉菜单,图片可以自动调整大小以适应不同的屏幕宽度,文本会自动重排,无需横向滚动即可显示。无论用户通过何种方式访问网站,都能获得流畅的体验。
目标是向所有设备提供相同的 HTML 代码,并使用 CSS、弹性网格和媒体查询来重新调整页面布局和大小。这比创建和维护多个网站版本更高效。响应式设计还有助于搜索引擎优化,因为它为所有设备提供一套 URL。总而言之,它改善了用户体验,并简化了开发和管理。这就是为什么响应式设计是现代网站的必备要素。
响应式设计的 CSS 单位
CSS 提供了一些相对单位,这些单位对于构建响应式网站至关重要。使用相对单位而非像素等固定单位,可以让元素在不同的视口尺寸下按比例缩放。这使得响应式设计无需为每个视口宽度编写独特的 CSS 代码即可实现。
响应式设计的主要相对单位有:
- em – 相对于父元素的字体大小
- rem – 相对于根元素的字体大小
- vw – 相对于视口宽度的 1%
- vh – 相对于视口高度的 1%
- % – 相对于父元素的宽度
使用 em、rem、vw 和 vh 等相对单位的优点包括:
- 元素会随着视口大小的变化而缩放。这可以防止内容溢出容器或在不同设备上显得过小。
- 媒体查询可以根据断点逐步调整字体大小、尺寸和布局,从而优化设计。这样就无需为每个视口宽度创建单独的 CSS 样式。
- 如果用户放大或缩小页面,尺寸也会相应缩放。
- 用户可以调整文本大小以满足自身需求,从而提高了可访问性。
- 由于同一套 CSS 代码可以灵活地应用于各种视口尺寸,因此代码复用率得以最大化。无需为移动设备、平板电脑、桌面设备等编写单独的 CSS 代码。
使用相对单位是响应式网页设计的基础。它使网站能够根据用户的设备和设置动态响应,从而提供最佳的浏览和交互体验。
字体大小属性
在设计响应式网站时,使用能够根据视口大小缩放的相对字体大小非常重要。响应式设计中最常用的字体大小单位是em100 和 100 rem。
使用em单位来设置字体大小很有用,因为这样字体大小就可以相对于父元素的字体大小进行缩放。例如,将 `<div>`<html>或 `<h1>`<body>元素的基本字体大小设置为 16px,然后在 `<h2>` 元素中设置标题大小em:
h1 {
font-size: 2em; /* Equal to 32px */
}
h2 {
font-size: 1.5em; /* Equal to 24px */
}
单位em将根据根元素上设置的 16px 基本大小缩放标题。
使用 em 的缺点是,当嵌套元素也使用 em 时,可能会导致尺寸变化叠加em。例如,如果一个段落在 <a> 标签内h2使用 em 1.2em,那么它的宽度就会变成 1.5 英寸1.2 * 24px = 28.8px。
为避免此问题,rem可以使用仅相对于根字体大小的单位。例如:
html {
font-size: 16px;
}
h1 {
font-size: 2rem; /* 32px */
}
p {
font-size: 1rem; /* 16px */
}
现在,无论元素如何嵌套,字体大小都不会叠加。
总的来说,在响应式设计中,使用 em 或 rem 作为字体大小单位对于在不同视口尺寸下实现可访问性和最佳阅读效果至关重要。
宽度和高度属性
在设计响应式网页时,务必避免使用固定的像素值来设置宽度和高度。相反,您应该使用相对单位,例如百分比 (%) 或视口相对单位,例如 vw、vh、vmin 和 vmax。
例如,要使一个 div 元素拉伸以填充其父容器宽度的 100%,您可以设置:
div {
width: 100%;
}
这样,div元素就能根据视口大小缩小和放大。
同样,对于高度,您可以使用 vh 单位根据视口高度来调整元素大小:
div {
height: 100vh;
}
这样一来,div 元素就会占据整个视口的高度。当视口大小改变时,div 元素也会随之调整大小。
视口单位 vw、vh、vmin 和 vmax 对于创建真正响应式的元素非常有用。1vh 等于视口高度的 1%,1vw 等于视口宽度的 1%。
因此,如果您希望图片具有响应式设计,可以进行以下设置:
img {
width: 50vw;
height: 50vh;
}
这样可以保持图像尺寸为视口宽度和高度的 50%。随着视口尺寸的变化,图像也会平滑地放大或缩小。
使用相对单位而不是固定像素是创建响应式网页的关键,响应式网页可以适应任何视口大小。
媒体查询
媒体查询是响应式网页设计的关键组成部分。它允许您根据屏幕宽度、设备方向等特定条件指定不同的 CSS 样式规则。
媒体查询的基本语法是:
@media (media feature) {
/* CSS rules go here */
}
一些常见的媒体特征包括:
- 宽度– 针对特定屏幕宽度
- 高度– 针对特定屏幕高度。
- 方向– 目标方向为纵向或横向
- 宽高比– 目标特定宽高比
例如,要为宽度小于 600 像素的屏幕应用样式,您可以这样做:
@media (max-width: 600px) {
/* Styles go here */
}
要针对高分辨率显示器,可以使用最小分辨率:
@media (min-resolution: 192dpi) {
/* Styles */
}
您可以结合多种媒体功能来针对特定场景:
@media (max-width: 600px) and (orientation: landscape) {
/* Styles */
}
关键在于优先设计移动端界面,然后使用媒体查询增强大屏幕的样式。这样,随着屏幕尺寸的增大,就可以逐步添加更高级的样式。
媒体查询中常用的一些断点:
- 320px — 超小型手机
- 480px — 小型移动设备
- 600px — Medium 移动端
- 768px — 小型平板电脑
- 1024像素— 笔记本电脑
- 1200px — 桌面
总而言之,媒体查询对于响应式网页设计至关重要,因为它们可以优化不同设备和屏幕尺寸上的用户体验。
响应式图像
确保图片在不同屏幕尺寸下清晰且加载速度快,对于响应式网页设计至关重要。处理响应式图片主要有两种技术:
使用 srcset 和 sizes 参数可以获得最佳图像效果。
srcset 和 sizes 属性允许您为不同的屏幕宽度指定不同的图像文件。srcset 定义了可用的图像源,而 sizes 定义了用于选择每个图像的 CSS 宽度。
例如:
<img src="small.jpg"
srcset="medium.jpg 1000w, large.jpg 2000w"
sizes="(max-width: 600px) 90vw, 600px" >
此代码会根据视口宽度加载不同的图像尺寸:视口宽度不超过 600 像素时加载 small.jpg,600-1000 像素时加载 medium.jpg,大于 1000 像素时加载 large.jpg。sizes 属性会告诉浏览器根据视口宽度使用哪种尺寸的图像。
运用图像元素的艺术指导
当您需要为不同的屏幕尺寸显示不同的图像组合时,可以使用 `<image>` 元素。在 `<picture>` 元素内部,您可以指定多个图像元素。
例如:
<picture>
<source media="(max-width: 600px)" srcset="vertical.jpg">
<source media="(min-width: 600px)" srcset="horizontal.jpg">
<img src="default.jpg">
</picture>
这样,在 600 像素以下显示 vertical.jpg,在 600 像素以上显示 horizontal.jpg。如果没有匹配的源文件,则该元素用作备用。
图片元素可以实现响应式图像的真正艺术指导。
Flexbox布局
Flexbox 是一个 CSS 布局模块,它无需使用浮动或定位即可轻松设计灵活且响应式的布局。Flexbox 在响应式设计方面的一些主要优势包括:
- 弹性容器会自动调整元素大小以适应不同的屏幕尺寸。设置弹性容器的显示方式:flex 启用弹性属性。
- flex-wrap:wrap 允许元素在较小的屏幕上换行,以便内容保持在容器内。
- align-items 控制弹性容器中项目的垂直对齐方式。这有助于在移动屏幕上堆叠元素时保持内容的有序性。align-items 的值包括 center、flex-start 和 flex-end。
- Flexbox 让移动端和桌面端之间的布局切换变得简单。媒体查询可以通过 flex-direction 来切换行方向和列方向。
- 利用弹性伸缩功能,元素可以轻松扩展和收缩以填充可用空间。这有助于内容响应式地调整大小。
- 排序属性会在不影响源顺序的情况下,重新排列项目的视觉顺序。这使得我们可以针对移动设备和桌面设备优化内容顺序。
总而言之,Flexbox 提供了强大的工具来创建响应式布局,使其能够适应不同的屏幕尺寸和设备。诸如 flex-wrap、align-items、flex-direction、flex-grow 和 order 等属性使得无需浮动或固定定位即可轻松实现灵活的容器和内容排序。
CSS网格布局
CSS Grid 布局是一个强大的工具,它能大大简化构建完全响应式页面布局的过程。以下是使用 CSS Grid 进行响应式网页设计的一些优势:
- 它允许您直接在 CSS 中定义列和行来控制布局,而无需使用浮动和定位。
- grid-template-columns 和 grid-template-rows 属性允许您将列和行的大小指定为分数、百分比或固定宽度/高度。
- 自动放置功能会将内容按照它们在 HTML 中出现的顺序自动放入网格单元格中,而无需定位元素。
- grid-template-areas 属性允许您以可视方式映射网格区域,并为它们赋予语义名称,以便在 CSS 中引用以进行放置。
- grid-auto-rows 和 grid-auto-columns 会自动设置未指定的行和列的大小。
- grid-template-columns/grid-template-rows 中的 minmax() 函数设置隐式网格轨道的最小和最大范围。
- 媒体查询可以在不同的断点处重新排列和调整网格布局的大小。
- 自动适应和自动填充属性会自动插入您指定大小的行或列来填充容器。
总而言之,CSS Grid 提供了对响应式网格的精细控制,其强大的对齐、尺寸和定位功能使其能够平滑地适应各种屏幕尺寸。通过利用模板区域、自动放置、minmax() 和媒体查询等 Grid 属性,我们可以轻松创建强大的响应式页面布局。
结论
在当今多设备时代,响应式网页设计对于提供优质的用户体验至关重要。通过利用百分比、vh、vw、rem 和 em 等 CSS 单位,我们可以构建能够动态响应并适应不同屏幕尺寸和方向的网站。将这些相对单位与@media查询结合使用,使我们能够强大地控制布局和样式,从而在从小型手机到大型桌面显示器的各种设备上实现最佳浏览效果。
其他重要的响应式技术包括使图像具有弹性、使用 Flexbox 和 CSS Grid 进行智能内容重排以及实现响应式布局。通过合理结合相对单位和媒体查询,我们可以高效地复用代码,而无需为每个设备编写独特的样式。这节省了开发时间并减少了代码冗余。
最终呈现的网站能够在所有设备上流畅运行——这一点至关重要,因为移动浏览量如今已超过桌面浏览量。响应式设计确保无论屏幕尺寸如何,每位用户都能轻松访问并享受我们的内容。随着移动设备在全球范围内的普及,响应式技术对于为所有网站访问者提供优质、流畅的体验将变得越来越重要。
本文最初发布于Programmingly.dev。请阅读全文:《设计专业响应式网站的终极指南》。
文章来源:https://dev.to/mroman7/the-ultimate-guide-for-designing-a-professional-responsive-website-46ig

