前言
在 1990 年初期,大多数的显示器屏幕为 640 * 480 像素,网页设计宽度也是按照 640 来设计,固定宽度和高度,称之为 “固定宽度设计”。 不久之后,随着设备更新,屏幕尺寸发生了变化,设计稿的宽度和高度也跟着变化,成了 网页设计师与硬件制造商的竞赛了。“固定宽度” 只会在特定的宽度下看起来不错,但当屏幕尺寸大于 或者 小于特定 特定宽度 时,效果就没那么好了,浪费了空间,不能合理的呈现页面效果。再到后来,有些人们采用 百分比来进行布局,而不是固定宽度布局。这样布局倒是比之前的布局效果好一点了,不过某些场景下,效果还是没那么好了,在宽屏幕上,布局就会被拉升; 在狭窄的屏幕上,布局会被压扁。 百分比布局 又称 液体布局。
再到现在,手机和电脑都需要跑不同尺寸的网页,这会出现了 “自适应布局”,解决了开发者设计者的困惑,开发者不需要单独去维护两套站点的代码和样式。 开发者需要写几种不同尺寸下的布局(媒体查询 )效果。 相比之前的 固定布局 , 液体布局好多了,不过还不是很完美。 后来,又有了 “响应式布局”,完美得解决了之前的问题, 自适应布局 是 媒体布局 + 固定布局 混搭, 而 响应式布局是媒体布局 + 流动布局的混搭。
复制代码
在手机上,如果想使用响应式布局,必须高速浏览器不能进行缩放,宽度为设备的宽度,因为移动浏览器会以 980 像素来解析布局。
<meta name="viewport" content="width=device-width, initial-scale=1">
复制代码
固定布局 → 百分比布局 → 自适应布局 → 响应式布局
媒体布局
使用媒体查询可以设计不同尺寸的布局。媒体查询通过 @media 来启动规则匹配样式
查询条件
当媒体匹配到 某个条件时,才会执行相应的样式代码。
媒体查询语法:
@media type and (feature)
复制代码
type:
all
应用于所有设备
print
应用于打印机和打印预览
screen
应用于电脑,平板
默认为 all
操作符
@media (min-width: 700px) and (max-width: 1000px)
{
...
}
@media only screen and (min-width: 1024px){
···
}
@media (max-width:500px) , (orientation: landscape) {
···
}
@media not screen and (min-width:800px) and (max-width:1200px),print and (color) {
···
}
复制代码
根据浏览器窗口模式 调整样式
通过orientation
可以用来测试的媒体功能:
@media all and (orientation: landscape) {
// Styles for landscape mode.
}
@media all and (orientation: portrait) {
// Styles for portrait mode.
}
复制代码
根据视口大小调整样式
浏览器宽于特定宽度时,使用 min-width
@media (min-width: 400px) {
// Styles for viewports wider than 400 pixels.
}
复制代码
浏览器宽度小于特定宽度时,使用 max-width
@media (max-width: 400px) {
// Styles for viewports narrower than 400 pixels.
}
复制代码
组合条件进行调整样式
@media (min-width: 600px) and (max-width: 1000px) {
}
复制代码
内容基于图像时,单位最好为 像素 px
内容基于文字时,单位最好为相对单位 em
常见 PC 端适配代码
/* 适配各种屏幕尺寸 */
@media (min-width: 1024px){
body,html{font-size: 18px}
}
@media (min-width: 1100px) {
body,html{font-size: 20px}
}
@media (min-width: 1280px) {
body,html{font-size: 22px;}
}
@media (min-width: 1366px) {
body,html{font-size: 24px;}
}
@media (min-width: 1440px) {
body,html{font-size: 25px;}
}
@media (min-width: 1680px) {
body,html{font-size: 28px;}
}
@media (min-width: 1920px) {
body,html{font-size: 33px;}
}
复制代码
响应式图像
在网页中,图像是有固定大小的,如果图像比屏幕宽,图像就会溢出,出现水平滚动条显示。
幸运的是,CSS 提供了 一个 属性来约束这种情况。 max-inline-size
它也可以将相同的规则应用于其他类型的嵌入内容。
浏览器将自动缩小图像以适应屏幕
img,
video,
iframe {
max-inline-size: 100%;
block-size: auto;
}
复制代码
图像加载提示
给 img
加上 loading
属性,可以告诉浏览器以何种方式加载图像。
<img
src="xxx.jpg"
alt=""
loading="eager"
>
复制代码
图像解码
img
还可以添加 decoding
属性,告诉浏览器图像可以异步解码,可以优先加载其它资源。
decoding="async"
<img
src="xxx.jpg"
alt=""
loading="eager"
decoding="async"
>
复制代码
响应式图像
虽然前面可以用 max-inline-size:100`` 让图片完美的显示在浏览器中,但有时可能需要根据不同尺寸显示不同宽度的图片效果,就可以使用
srcset` 属性,让浏览器加载不同图片。
场景: 当需要不同尺寸的同一图像版本时使用。
<img
src="small-image.png"
srcset="small-image.png 300w,
medium-image.png 600w,
large-image.png 1200w"
>
复制代码
图像格式
前面说到可以通过 srcset
来改变图像使用的版本,如果想完全改变图片格式的话,那么就可以采用 picture
元素。
picture
于 img
嵌套使用,如果单独使用没效果。
通过 source
来告诉浏览器怎么加载图像格式,每个 source
都有自己的 srcset
属性,然后浏览器会按顺序执行,直到满足为止,如果 浏览器不支持source
的属性,最后就执行 src
<picture>
<source srcset="image.avif" type="image/avif">
<source srcset="image.webp" type="image/webp">
<img src="image.jpg" alt=""
decoding="async">
</picture>
复制代码
网站主题化
提供黑暗模式
可以使用 使用元素prefers-color-scheme
内的媒体功能指定主题颜色,分别写 light
和 dark
一套样式代码
https://storage.googleapis.com/web-dev-uploads/video/KT4TDYaWOHYfN59zz6Rc0X4k4MH3/hpMyDvtHUyLPz0ltO6SS.mp4
@media (prefers-color-scheme: dark) {
body{
color: red;
font-size: 22px;
}
}
@media (prefers-color-scheme: light) {
body{
color: rgb(17, 61, 183);
font-size: 33px;
}
}
复制代码
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="theme-color" content="#ffffff" media="(prefers-color-scheme: light)">
<meta name="theme-color" content="#000000" media="(prefers-color-scheme: dark)">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
img{
max-inline-size: 100%;
}
@media (prefers-color-scheme: dark) {
body{
color: red;
font-size: 22px;
}
}
@media (prefers-color-scheme: light) {
body{
color: rgb(17, 61, 183);
font-size: 33px;
}
}
</style>
</head>
复制代码
表单主题化
浏览器为表单域提供了默认的调色板。让浏览器知道您的网站同时提供深色和浅色模式。这样,浏览器可以为表单提供适当的默认样式。
使用[accent-color](https://web.dev/accent-color/)
CSS 中的属性来设置复选框、单选按钮和其他一些表单字段的样式。
将此添加到您的 CSS 中:
html {
color-scheme: light;
}
@media (prefers-color-scheme: dark) {
html {
color-scheme: dark;
accent-color: pink;
}
}
复制代码
您也可以使用 HTML。head
在您的文档中添加以下内容:
<meta name="supported-color-schemes" content="light dark">
复制代码
评论