Sololearn 自学网页设计 3 让网页变成响应式页面
视口 Viewport
在我们开始使我们的着陆页面响应式之前,我们需要了解一些概念。
第一个概念是视口 (Viewport) :网页的可见区域。
通常,具有固定宽度的网页在小屏幕上,如移动设备或平板电脑上,变得太大而无法适应视口。为了解决这个问题,这些设备上的浏览器会缩小整个网页以适应屏幕。
在HTML5中,您可以使用 meta 标签控制视口:
<meta name="viewport" content="width=device-width, initial-scale=1.0"> |
其中,width=device-width
设置页面的宽度以适应设备的屏幕宽度。initial-scale=1.0
设置页面在浏览器首次加载时的初始缩放级别。
您还可以在视口标签中使用自定义值,但在大多数情况下,建议使用 device-width
值来使用默认设置。
媒体查询 Media Queries
媒体查询提供了为视口不同宽度或其他规格指定不同CSS样式的能力。
这使得网页能够为不同屏幕尺寸定义不同的布局样式,使页面响应式!
您可以使用现有样式表中的 @media 规则定义媒体查询:
@media screen and (max-width: 600px) { |
@media 规则后跟我们要定位的媒体类型(在我们的例子中是屏幕),并设置规则适用的条件(在我们的例子中是 max-width:600px
)。
因此,现在样式将在页面宽度最大为600px时应用。
对于 Media Query 的实例
实例在这里 https://kingsmai.github.io/resp-web-design/
|
body { |
您还可以定义多个条件,例如视口的最小和最大宽度:
@media screen and (min-width: 800px) and (max-width: 1024px) { |
现在,这个样式将适用于屏幕宽度从 800 到 1024 像素的范围内。
您还可以为单个网页定义多个媒体查询。
媒体查询允许您定义页面布局和样式应该何时更改的断点,以及定义这些断点的相应CSS样式。
不要被您设备的屏幕分辨率搞混了!像素作为测量单位相当于1⁄96英寸,所以:1英寸 = 96像素,这意味着这些宽度相当于:
- 480 像素 / 96 = 5 英寸(例如移动电话)
- 768 像素 / 96 = 8 英寸(例如平板电脑)
- 1200 像素 / 96 = 12.5 英寸(例如显示器)
(在我的理解中应该是这样的:具有QHD分辨率的移动电话:1440 × 2560像素,尺寸为5英寸,像素密度约为580像素每英寸。因此,它的宽度为:1440 像素 / 580 像素约为 2.5 英寸,乘以像素作为单位:2.5 * 96 = 240 像素)
响应式页眉 Header Part
现在,我们知道如何为不同屏幕尺寸定义 CSS 样式,我们可以开始使我们的着陆页面具有响应性!
移动屏幕的典型断点是 480 像素宽度。
让我们为我们的着陆页面定义视口和空的媒体查询目标:
@media screen and (max-width: 480px) { |
在屏幕宽度低于 480 像素时,我们将为各个部分创建单独的样式。
480 像素是移动设备的典型断点。
这些是用于不同屏幕尺寸的媒体查询的一些示例:
- 320px — 480px: 适用于大多数移动设备。
- 481px — 768px: 适用于iPad、平板电脑。
- 769px — 1024px: 适用于小屏幕,如笔记本电脑。
- 1025px — 1200px: 适用于台式机、较大屏幕。
在移动屏幕上,我们希望更改标题文本的文字大小,并使“立即下载”按钮跨足容器的整个宽度。
为实现这一目标,我们在媒体查询中定义相应的样式:
@media screen and (max-width: 480px) { |
正如您所见,我们更改了一些 font-size 属性,更改了 section 容器的内边距,并将按钮的 display 属性更改为 block,使其成为块级元素,占据其容器的整个宽度。
在移动屏幕上的结果:
在较大屏幕上的相同标题:
请注意,我们无需在媒体查询中重新定义元素的整个样式。我们只需定义我们想要更改的样式。
响应式功能部分 Features Part
是时候使功能部分具有响应性了!它包含三个并排对齐的功能。
在小屏幕上,我们希望它们水平排列,每个功能占据容器的整个宽度。
以下是我们将在媒体查询中使用的样式:
.feature { |
我们将每个功能div的宽度更改为 100%,并将 display 属性设置为 flex,使 div 成为 flexbox 容器。这使我们能够水平定位子功能,并使用 align-items 和 justify-content 属性设置其子元素(图标和文本)的对齐方式。
我们还设置了图标的宽度并定义了一些边距。
现在,在较大屏幕上,功能将并排对齐,在较小屏幕上,它们将垂直排列。
弹性盒子 Flexbox
弹性盒子(Flexbox)布局模型允许轻松创建灵活的布局,无需使用CSS定位和浮动。
让我们使用一个简单的例子来演示它的工作原理:
<div class="container"> |
要使用Flexbox,我们首先定义一个容器并将其display属性设置为flex。
.container { |
现在,我们可以通过使用Flexbox属性调整子div元素的对齐方式:
.container { |
完整代码:<head>
<style>
.container {
display: flex;
align-items: stretch;
}
.container div {
background-color: red;
margin: 10px;
text-align: center;
line-height: 75px;
font-size: 30px;
flex: 1;
}
</style>
</head>
<div class="container">
<div>A</div>
<div>B</div>
<div>C</div>
</div>
这将使所有子元素具有相同的宽度(flex: 1)并填充整个容器宽度。
查看这里的完整Flexbox指南。
响应式引用部分 Quote Part
对于我们的引用部分,我们将只更改文本大小和一些内边距:
.quote { |
我们不需要更改部分元素的位置,因为它们已经对齐到屏幕的中央。
响应式页脚 Footer Part
最后但同样重要的是,我们需要更改我们的页脚部分。
我们需要将菜单链接放置在彼此下方:
footer { |
点击运行
display:block; 样式使列表项成为块级元素,因此它们将占据其容器的整个宽度。这使得项目在彼此下方对齐:
在大屏幕上的相同页脚:
现在我们的着陆页面是完全响应式的,适用于移动和桌面屏幕。
定制着陆页面,添加更多部分和断点,并在下方的评论部分分享您的创作!示例:
https://code.sololearn.com/WE9JO3XT9v9m/?ref=app This code is responsive but done without @media queries.
CSS 单位
在我们的布局中,一个重要的部分是没有使用任何固定单位来定义宽度。
我们使用了百分比值,这使得元素相对于其父元素的宽度进行伸展。
这种方法使得元素更加灵活,这在创建响应式设计时至关重要。
CSS 还允许您为字体大小定义相对单位大小:
em 单位大小将相对于父元素的字体大小。
例如,如果我们页面的 body 具有 16 像素的字体大小,使用 1.5em 将等于 24 像素(16 * 1.5):
body { |
点击运行
这很有用,因为当您需要更改字体大小时,您只需在顶级父元素上更改它。所有子元素将使用em单位从中获取相应的相对大小。
然而,当您使用 em 定义所有大小时,您可能会受到级联效应的影响。在这种情况下,您有许多嵌套的元素,它们使用相对于其相应父级的字体大小,这导致难以控制的单位大小。
CSS 单位的练习
在使用以下CSS的情况下,一个位于div元素内的段落的字体大小是多少?
body { |
答案是:
查看解释
em 单位相对于父元素的字体大小值。这里 div 的父元素是 body。因此,
- 对于div
- => 1em == 父元素的字体大小 == 10 像素;
- 0.5 em == 5 像素。
现在p的父元素是div。因此,
- 对于p
- => 1em == 父元素的字体大小 == 5 像素,
- 3em == 15 像素。
这就是答案为15像素的原因。
rem单位
另一个相对单位是 rem。它代表 根 em(Root Em),意味着它只关注根元素的字体大小,即 html 元素。
这使得它比 em 更容易使用。
让我们将着陆页面的字体大小更改为rem单位:
html { |
我们将html元素的字体大小设置为 16px,并使用它来使用 rem 设置所有其他字体大小。
您还可以在边距和内边距中使用相对的 CSS 单位。