详细解释 max-width and min-width 之间的关系及用法

  • 前言
  • @media 是什么怎么用?
  • Question 1: So @media only screen and (max-width: 1068px) 是什么鬼?
  • @media 如何使用?
  • CSS3 多媒体查询
  • 自适应视窗
  • 多媒体查询语法
  • @media 细致深入理解
  • @media 注意事项
  • Bootstrap 的 @media 属性写法:

前言

现在 HTML5/CSS3 很流行罢,也是未来时代的趋势。在 HTML5 带来的许多实用功能之后,CSS3也同带来了一些牛逼哄哄的功能呢。

  • 动画 animation
  • 转化 transform
  • 过渡 translation

尽快这已足够让我们兴奋,许多之前必须用 JS 或 JQ 写的效果用 CSS 就能实现,现在几行 CSS3 代码就够了。

@media 是什么怎么用?

苹果官网对 CSS3 @media 的使用:
我第一次看到这个是在 苹果官网 ,大概这样:
DOM 结构代码:
结构大家都懂,但我们能够很明显注意到 class 的区别,只有 promo-title-0/1/2/3 不同。那么,为什么?

我们看到了 promos li 的 css 代码。

max-height: 200px;
overflow: hidden;

以及 .large-3 的代码

width: 25%;

以及 column

position: relative;
z-index: 1;
min-height: 2px;
margin: 0;
padding: 0;
float: left;

CSS 很简单,大家一目了然其作用。将 section 下面的 4个块写成4个 li 同时给个相对定位和左浮动最小高度和Z轴,Yes so easy.
但是按住 Ctrl 同时移动鼠标滚轮放大网页,we will find everthing has changed.
这里的 section 变成了两格占一排,再看样式 large-3 被划上了删除线.
取而代之的是 medium-6 。

width: 50%;

Question 1: So @media only screen and (max-width: 1068px) 是什么鬼?

为什么这时候 @media 下定义的样式让 CSS 发生了变化,从 large-3 变成了 medium-6 那么small-12 会发生什么?

我们再缩小来看一看;
这里 section 变成了一格占一排,之前的 @media only screen and (max-width: 1068px) 变成了 @media only screen and (max-width: 735px) ;再看 class 又由 medium-6 变成了 small-12 。

width: 100%;

于是,我们可以得出以下结论:

  1. @media only screen and (max-width) 的值改变,则对应 class 改变。
  2. large-3 是四个 li 的共同样式,值为 width: 25% 。所以 float: left 在一起就是其父元素section#promos.promos.row 的 width: 100% 。
  3. medium-6 { width: 50% } 则相应的是 每2个 li 左浮动在一起为一行( width: 100% )。
  4. small-12 { width: 100% } 则一个 li 便左浮动占据一行。
  5. 所以它的响应式设计思路与 bootstrap 的 Gird System 同样原理。
  6. 所有的一切都由 @media 控制,针对不同媒体类型(或者说屏幕宽度)自适应采用不同的样式规则。当你重置浏览器大小的过程中,页面会根据浏览器的宽度和高度重新渲染页面。(不明觉厉咯)

@media 如何使用?

通常这种类型的文档在 w3cschool 类型的网站代码属性收集最全最权威,当然还有国内山寨但更强大版 w3cschool.cc 即 菜鸟教程 。

以下内容 据此摘录 与修改,当然为了更便于各位理解。

CSS3 多媒体查询

CSS3 的多媒体查询继承了 CSS2 多媒体类型的所有思想: 取代了查找设备的类型,CSS3 根据设置自适应显示。媒体查询可用于检测很多事情,例如:

  • viewport(视窗) 的宽度与高度
  • 设备的宽度与高度
  • 朝向 (智能手机横屏,竖屏)
  • 分辨率
    目前很多针对苹果手机,Android 手机,平板等设备都会使用到多媒体查询。

自适应视窗

必须在 中添加一个 标签:
<meta name="viewport" content="width=device-width, initial-scale=1">

代码原意翻译过来既是: 视窗的宽度等于设备宽度,原始比例始终为 1:1 。这样在改变 device-width 的时候任意变化修改都能自适应了。
Bootstrap自适应视窗简介

多媒体查询语法

  • 多媒体查询由多种媒体组成,可以包含一个或多个表达式,表达式根据条件是否成立返回 true 或 false 。
  • 如果指定的多媒体类型匹配设备类型则查询结果返回 true,文档会在匹配的设备上显示指定样式效果。
  • 除非你使用了 not 或 only 操作符,否则所有的样式会适应在所有设备上显示效果。

方法一: 直接写在 CSS 样式中让其根据设备判断:

@mediamediatypeand|not|only (mediafeature) {CSS-Code;
}

方法二: 针对不同的媒体设备外部链入不同的 stylesheets:
<link rel="stylesheet" media="mediatype and|not|only (media feature)" href="mystylesheet.css">

not / only / all
not: not是用来排除掉某些特定的设备的,比如 @media not print(非打印设备)。

only: 用来定某种特别的媒体类型。

对于支持 Media Queries 的移动设备来说,如果存在 only 关键字,移动设备的 Web 浏览器会忽略 only关键字并直接根据后面的表达式应用样式文件。对于不支持 Media Queries 的设备但能够读取 Media Type 类型的 Web浏览器,遇到 only 关键字时会忽略这个样式文件。

all: 所有设备,这个应该经常看到。

多媒体类型 mediatype

描述
all 用于所有多媒体类型设备
print 用于打印机
screen 用于电脑屏幕,平板,智能手机等。
speech 用于屏幕阅读器

多媒体特性 media feature

描述
aspect-ratio 定义输出设备中的页面可见区域宽度与高度的比率
color 定义输出设备每一组彩色原件的个数。如果不是彩色设备,则值等于0
color-index 定义在输出设备的彩色查询表中的条目数。如果没有使用彩色查询表,则值等于0
device-aspect-ratio 定义输出设备的屏幕可见宽度与高度的比率。
device-height 定义输出设备的屏幕可见高度。
device-width 定义输出设备的屏幕可见宽度。
grid 用来查询输出设备是否使用栅格或点阵。
height 定义输出设备中的页面可见区域高度。
max-aspect-ratio 定义输出设备的屏幕可见宽度与高度的最大比率。
max-color 定义输出设备每一组彩色原件的最大个数。
max-color-index 定义在输出设备的彩色查询表中的最大条目数。
max-device-aspect-ratio 定义输出设备的屏幕可见宽度与高度的最大比率。
max-device-height 定义输出设备的屏幕可见的最大高度。
max-device-width 定义输出设备的屏幕最大可见宽度。
max-height 定义输出设备中的页面最大可见区域高度。
max-monochrome 定义在一个单色框架缓冲区中每像素包含的最大单色原件个数。
max-resolution 定义设备的最大分辨率。
max-width 定义输出设备中的页面最大可见区域宽度。
min-aspect-ratio 定义输出设备中的页面可见区域宽度与高度的最小比率。
min-color 定义输出设备每一组彩色原件的最小个数。
min-color-index 定义在输出设备的彩色查询表中的最小条目数。
min-device-aspect-ratio 定义输出设备的屏幕可见宽度与高度的最小比率。
min-device-width 定义输出设备的屏幕最小可见宽度。
min-device-height 定义输出设备的屏幕的最小可见高度。
min-height 定义输出设备中的页面最小可见区域高度。
min-monochrome 定义在一个单色框架缓冲区中每像素包含的最小单色原件个数
min-resolution 定义设备的最小分辨率。
min-width 定义输出设备中的页面最小可见区域宽度。
monochrome 定义在一个单色框架缓冲区中每像素包含的单色原件个数。如果不是单色设备,则值等于0
orientation 定义输出设备中的页面可见区域高度是否大于或等于宽度。
resolution 定义设备的分辨率。如:96dpi, 300dpi, 118dpcm
scan 定义电视类设备的扫描工序。
width 定义输出设备中的页面可见区域宽度。

至此,我们解释之前 apple 官网 的 Question1 :
@media only screen and (max-width: 1068px)

仅电脑设备中的页面最大可见区域宽度为 1068px 时显示其定义的样式。所以当设备宽度小于 1068px 采用 medium-6 。

@media only screen and (max-width: 735px)

仅电脑设备中的页面最大可见区域宽度为 735px 时显示其定义的样式。所以当设备宽度小于 735px 采用 small-12 。

这个时候小伙伴你也一定机智的想到了如果我想做一个 平板 和 手机之间的 @media 属性怎么办?当然有办法了。 办法就是:

@mediascreen ( max-width: 1068px ) and (min-width: 765px) {CSScode}@mediascreenand (max-width: 640px) and (min-width: 481px){CSScode}

那么屏幕 retina 分辨率怎么办?看看 apple 怎么做:
这是完整代码:

 @mediaonlyscreenand (-webkit-min-device-pixel-ratio:                              1.5) and (max-width: 735px), onlyscreenand (max-width: 735px) and (min-resolution: 1.5dppx), onlyscreenand (max-width: 735px) and (min-resolution: 144dpi){}@mediaonlyscreenand (max-width: 735px){}@mediaonlyscreenand (-webkit-min-device-pixel-ratio: 1.5) and (max-width: 1068px), onlyscreenand (max-width: 1068px) and (min-resolution: 1.5dppx), onlyscreenand (max-width: 1068px) and (min-resolution: 144dpi){}@mediaonlyscreenand (max-width: 1068px){}@mediaonlyscreenand (max-width: 1068px) and (max-width: 735px){}@mediaonlyscreenand (-webkit-min-device-pixel-ratio: 1.5) and (max-width: 735px), onlyscreenand (max-width: 735px) and (min-resolution: 1.5dppx), onlyscreenand (max-width: 735px) and (min-resolution: 144dpi){}@mediaonlyscreenand (max-width: 735px){}@mediaonlyscreenand (max-width: 1068px) and (max-width: 735px){}@mediaonlyscreenand (max-width: 1068px){}@mediaonlyscreenand (-webkit-min-device-pixel-ratio: 1.5) and (max-width: 1068px), onlyscreenand (max-width: 1068px) and (min-resolution: 1.5dppx), onlyscreenand (max-width: 1068px) and (min-resolution: 144dpi){}@mediaonlyscreenand (max-width: 1068px){}@mediaonlyscreenand (max-width: 1441px) and (max-width: 735px){}@mediaonlyscreenand (max-width: 1068px) and (max-width: 1441px){}@mediaonlyscreenand (-webkit-min-device-pixel-ratio: 1.5) and (max-width: 1441px), onlyscreenand (max-width: 1441px) and (min-resolution: 1.5dppx), onlyscreenand (max-width: 1441px) and (min-resolution: 144dpi){}@mediaonlyscreenand (max-width: 1441px){}

是不是很有趣? apple 将设计化简为繁,但这背后的代价却更大。但为了给用户最直观明了和完美的呈现,这些都不足为惧。

但如果你以为 copy 上面代码就够了? Too young too naive! 我们需要学习的还很多,你会发现有时候写入 CSS3 @media 属性没卵用。
比如: Quesition2: -webkit-min-device-pixel-ratio 是个什么鬼?

@media 细致深入理解

不同设备有不同的宽高,不同分辨率,不同的DPI,不同的长宽比,如何区分?如何针对?它们对应的 @media 属性功能怎么写入呢?
上面表格中其实全部有标明方法 但你真的理解了吗?这样更简单一些!

不同的宽高:
width/height 定义输出设备中的页面可见区域宽度/高度。

max/min-width/height 定义输出设备中的页面最大/小可见区域宽度/高度。

device-width/height 定义输出设备的屏幕可见宽/高度。

max/min-device-width/height 定义输出设备的屏幕最大/小可见宽/高度。

不同的分辨率:
resolution 定义设备的分辨率。如:96dpi, 300dpi, 118dpcm

max/min-resolution 定义设备的最大/小分辨率。

不同的长宽比:
aspect-ratio 定义输出设备中的页面可见区域宽度与高度的比率。

device-aspect-ratio 定义输出设备的屏幕可见宽度与高度的比率。

max/min-aspect-ratio 定义输出设备的屏幕可见宽度与高度的最大/小比率。

max/min-device-aspect-ratio 定义输出设备的屏幕可见宽度与高度的最大/小比率。

那么 Question2 -webkit-min-device-pixel-ratio 是个什么鬼?
它得意思是:Gives the number of device pixels per CSS pixel. css px 和物理 px(device px) 之间的比率即设备像素比率。

iphone 的物理分辨率是 320X480,但是呈现的内容却是 640×960,但其实我们设置的 css px 是相对于物理分辨率的,即 320×480,但是因为我们设置的 css px 要显示在更宽阔的 640×960 的内容区域里头,所以10个 css px 在 640×960 的呈现效果就相当于5个 device px 在 320×480 的呈现效果。

所以如果图片得大小是100×100,那么到iphone里头就会被放大2倍,于是图像会变得比以前模糊,通常得解决办法是,用 background-size 设置为50%,以前的一半,然后再在 iphone 放大2倍,等于没变化,恢复到正常效果,不模糊了。

 @mediaonlyscreenand (-webkit-min-device-pixel-ratio: 1.5) and (max-width: 1441px), onlyscreenand (max-width: 1441px) and (min-resolution: 1.5dppx), onlyscreenand (max-width: 1441px) and (min-resolution: 144dpi) {}

则是一种兼容写法, -webkit-min-device-pixel-ratio 跟 min-resolution 意思一致, 我们发现每个逗号间除了 -webkit-min-device-pixel-ratio 唯一的不同是什么?

dppx dpi 单位,所以这里的兼容这是兼容不同的浏览器的计算单位。
设备像素比devicePixelRatio简单介绍

单位 pixel-ratio/dpi/dppx 区别

不同设备 pixel-ratio/dpi/dppx 值的区别

设备兼容 及 浏览器 支持情况区别及简明易懂案例

@media 注意事项

写作顺序问题
这简直是个小技巧,一开始我也十分纳闷。为什么写的有些 @media 没有起作用。原来有这么回事:

我们知道 min-width 表示最小即大于等于, max-width 表示最大即小于等于; 但我们也很清楚 CSS 样式 跟 DOM 结构 跟 JS 一样 从前往后加载,后面重复代码会覆盖之前代码。

那么这样的顺序有问题吗?

/*样式1*/
@media (min-width: 320px) {.container{ width: 92%; margin: 4%; }
}/*样式2*/
@media (min-width:320px) and (max-width: 640px){.container{ width: 86%; margin: 7%; }
}/*样式3*/
@media (max-width: 640px) {.container{ width: 80%; margin: 10%; }
}

会发生什么?
当 device-width <= 640 时 样式3 起作用

当 640 <= device-width <= 321 时 样式2 起作用但无效

当 device-width >= 640 时 样式1 起作用

Question3: 为什么上面代码不起起作用但无效?
min-width:320px 即 width >= 320px

max-width: 640px and min-width: 32px 即 640 <= width <= 320px

max-width: 640px 即 width <= 640px

Answer3:根据 CSS 从上至下执行的规律以及我们的分析:
当视窗宽度大于等于 320px 时候执行样式1,(有效)

当视窗宽度小于等于 640px 大于等于 320px 时执行样式2,有效但无法使用,因为被 样式3 覆盖。( CSS 解析器跟 JS 一样在相同方法上覆盖之前定义的方法 )

当视窗宽度小于等于 640px 时执行样式3。(有效)

解决办法:

调整顺序并适当修改,

当 width <= 320px 时,执行 样式1;

当 640px <= width <= 321px 时,执行 样式2;(给 min-wdith 的值 +1px 以让 devic-width 值等于320时 样式2 不会覆盖 样式1)

当 width >= 641px 时,执行 样式3;

代码如下:

/*样式1*/
@media (max-width: 320px) {.container{ width: 92%; margin: 4%; }
}/*样式2*/
@media (min-width:321px) and (max-width: 639px){.container{ width: 86%; margin: 7%; }
}/*样式3*/
@media (min-width: 640px) {.container{ width: 80%; margin: 10%; }
}

所以是不是很简单?万能了也。任意分辨率混搭啊。

注意事项总结:
1, 适配顺序

max-wdith: number0 小于等于 分辨率从大写到小 如果同一选择器样式在更小分辨率下没有重写则会沿用 CSS中定义的基本样式

 mW <= 320; mW <= 480; mW <= 768; mW <= 960; mW <= 1080; mW <= 1280; mW <= 1440;  /*@media 则会根据 `` max-width `` 的大小变化从小到小取值 */

(min-width: number1) and (max-width: number2) 大于等于number1 同时满足 小于等于 number2

写完 max-wdith 则开始写其中间值;

number1 必须在 number0 的基础上 +1px 以避免覆盖之前 width <= number0时的样式,

number2 则不要求必须在 number3 的基础上 -1px (因为后面定义的 width >= number3 就算 width 的 number 相等也会根据先后原则覆盖这个样式) 。

min-wdith: number3 大于等于 分辨率从小写到大 如果同一选择器样式在更大分辨率下没有重写则会沿用之前 @media 定义的样式 其次再是 CSS中定义的基本样式

 mW >= 1440; mW >= 1280; mW >= 1080; mW >= 960; mW >= 768; mW >= 480; mW >= 320;  /*@media 则会根据 `` min-width `` 的大小变化从大到小取值 */

Bootstrap 的 @media 属性写法:

@media (max-width: 767px) {// col-xs
}@media (min-width: 768px) and (max-width: 991px) {// col-sm
}@media (min-width: 992px) and (max-width: 1199px) {// col-md
}@media (min-width: 1200px) {// col-lg
}

apple 的 @media 属性写法 ( 含 Retina ) PS:前文顺序不同 因为其定义的选择器不是同一组 下列代码笔者已经修改

@mediaonlyscreenand (max-width: 1441px){.container::after{ content: "1441"; }
}@mediaonlyscreenand (-webkit-min-device-pixel-ratio: 1.5) and (max-width: 1441px), onlyscreenand (max-width: 1441px) and (min-resolution: 1.5dppx), onlyscreenand (max-width: 1441px) and (min-resolution: 144dpi){.container::after{ content: "1441 Retina"; }
}@mediaonlyscreenand (min-width: 1068px) and (max-width: 1441px){.container::after{ content: "1068 - 1441"; }
}@mediaonlyscreenand (max-width: 1068px){.container::after{ content: "1068"; }
}@mediaonlyscreenand (-webkit-min-device-pixel-ratio: 1.5) and (max-width: 1068px), onlyscreenand (max-width: 1068px) and (min-resolution: 1.5dppx), onlyscreenand (max-width: 1068px) and (min-resolution: 144dpi){.container::after{ content: "1068 Retina"; }
}@mediaonlyscreenand (max-width: 1068px) and (min-width: 735px){.container::after{ content: "735 - 1068"; }
}@mediaonlyscreenand (max-width: 735px){.container::after{ content: "735"; }
}@mediaonlyscreenand (-webkit-min-device-pixel-ratio: 1.5) and (max-width: 735px), onlyscreenand (max-width: 735px) and (min-resolution: 1.5dppx), onlyscreenand (max-width: 735px) and (min-resolution: 144dpi){.container::after{ content: "735 Retina"; }
}@mediaonlyscreenand (max-width: 340px){.container::after{ content: "340"; }
}@mediaonlyscreenand (-webkit-min-device-pixel-ratio: 1.5) and (max-width: 340px), onlyscreenand (max-width: 340px) and (min-resolution: 1.5dppx), onlyscreenand (max-width: 340px) and (min-resolution: 144dpi){.container::after{ content: "340 Retina"; }
}@mediaonlyscreenand (min-width: 1441px) {.container::after{ content: "1441"; }
}

[CSS] 详细解释 @media 属性与 (max-width:) and (min-width) 之间的关系及用法相关推荐

  1. CSS中属性个属性值怎么区分,[CSS] 详细解释 @media 属性与 (max

    前言 现在 HTML5/CSS3 很流行罢,也是未来时代的趋势.在 HTML5 带来的许多实用功能之后,CSS3也同带来了一些牛逼哄哄的功能呢. 动画 animation 转化 transform 过 ...

  2. CSS 详细解读定位属性 position 以及参数

    Css 详细解读定位属性 position 以及参数 position 定位属性,是CSS中非常重要的属性.除了文档流布局,就是定位布局了.本来我对这个问题没有放在心上,毕竟写了这么多年的css,对p ...

  3. 引入css的时候 media属性是什么意思?

    media 属性规定被链接文档将显示在什么设备上. media 属性用于为不同的媒介类型规定不同的样式. 值 描述 screen 计算机屏幕(默认). tty 电传打字机以及类似的使用等宽字符网格的媒 ...

  4. python类属性描述_如何描述Python对象,以及属性、标识、类型和值之间的关系?...

    虽然可以通过属性访问对象的类型,但它的类型不仅仅是一个属性--该类型定义了对象在拥有任何属性之前是如何创建的.仅凭这个事实,这些语句都不足以描述Python对象. 我这么说:In Python, ev ...

  5. dedecms切换模板css,DEDECMS的模板的css的详细解释 -电脑资料

    有的比较菜鸟的站长们,常常看到模板文件的CSS的代码密密麻麻的,就有点头晕!我在网上找到一位热心的站长给出了一份织梦模板的CSS详解,以下就是代码和代码的解释! /*---------- import ...

  6. android中 menu的属性详细解释

    android中 menu的属性详细解释 <?xml version="1.0" encoding="utf-8"?> <menu xmlns ...

  7. css 设置段落样式 各种设置方式详细解释

    我本来打算告诉你 当你不在我身边的这段日子里 我遇到的所有糟糕事 但最后我只想告诉你 我很想你 设置段落样式 今天我们详细讲讲设置段落样式的方式: 网页的排版离不开对文字段落的设置,这里主要讲述常用的 ...

  8. 【 CSS 尺寸/宽高 属性 heightwidth 】

    CSS 尺寸/宽高 属性 height&width CSS 尺寸/宽高 属性 1. height 属性: 设置 元素的高度 (auto/长度值/ 百分比值) 1.1 max-height 属性 ...

  9. CSS学习笔记 display属性

    CSS学习笔记05 display属性 HTML标记一般分为块标记和行内标记两种类型,它们也称块元素和行内元素. 块元素 每个块元素通常都会独自占据一整行或多整行,可以对其设置宽度.高度.对齐等属性, ...

  10. 用css的animation动画属性来实现一个H5场景动态电子邀请函

    接触css的animation 也有一段时间,经常在朋友圈会看到一些很漂亮的电子邀请函,刚开始以为是视频,后来发现原来是用css的animation来实现的.经过分析,其实是利用css的animati ...

最新文章

  1. SQL语句中不同的连接JOIN
  2. 如何在JavaScript中验证电子邮件地址
  3. linux配置caffe环境,最全caffe安装踩坑记录(Anaconda,nvidia-docker,linux编译)
  4. Oracle ORA-04031 错误 说明
  5. html请求接口_通用网关接口-FastCGI介绍
  6. 08_JS工厂方法和构造函数
  7. html 12306页面实现,jQuery模拟12306城市选择框功能简单实现方法示例
  8. spring-cloud-starter-openfeign使用详解
  9. yum安装软件提示Another app is currently holding the yum lock
  10. mouseover显示层mouseout隐藏层,并且在鼠标放上层时显示层【原】
  11. 易进难出,“Vim 退出” 难住百万程序员
  12. 数模电路基础知识 —— 4. 常见电路符号说明(二极管)
  13. Pandas和Matplotlib用excel数据画双y轴折线图
  14. 1024程序员节节日快乐
  15. 大一C语言总结贴(持更) Part 10 随机步法
  16. KT148A语音芯片SOP8封装直驱扬声器内置420秒语音空间,一线控制,可重复烧录。用户可以自己更换声音
  17. 3D云打印系统OctoPrint,中文化详细图文教程
  18. 记一次生产上线的问题
  19. 在线公开课 | 教你如何自行搭建一个威胁感知大脑?
  20. 英伟达发布ChatGPT专用GPU,性能提升10倍,还推出云服务,普通企业也能训练LLM...

热门文章

  1. 关于vs2017如何配置和运行龙书DX9案例
  2. cache log:minzip: zlib inflate call failed (zerr=-3)
  3. java numberformat 方法_java.text.NumberFormat使用方法
  4. Virtualbox安装Debian 安装VBoxGuestAdditions增强工具
  5. 概率论与数理统计浙大第五版 第四章 部分习题
  6. python爬虫微博24小时热搜_GitHub - Writeup007/weibo_Hot_Search: 微博爬虫:每天定时爬取微博热搜榜的内容,留下互联网人的记忆。...
  7. 《HBase权威指南》读书笔记6:第六章 可用客户端
  8. 17 张程序员壁纸推荐
  9. 哈理工OJ 1391 Orz odd(规律【没证出来】)
  10. 计算机科技想象作文600字,科技想象作文600字四篇