嵌套CSS @supports和@media查询

前端之家收集整理的这篇文章主要介绍了嵌套CSS @supports和@media查询前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我一直试图弄清楚是否可以嵌套CSS特征查询(也称为“CSS @supports”)和常规媒体查询,以及这样做的正确方法.

示例A显示了媒体查询中的功能查询.
示例B显示了要素查询中的媒体查询.

它甚至可以嵌套它们吗?如果是这样,是否有一种首选的嵌套方式? A还是B?

  1. .foo {
  2. background: red;
  3. }
  4.  
  5. /* EXAMPLE A */
  6. @media (min-width: 50em) {
  7. .foo {
  8. background: green;
  9. }
  10.  
  11. @supports (flex-wrap: wrap) {
  12. .foo {
  13. background: blue;
  14. }
  15. }
  16. }
  17.  
  18. /* EXAMPLE B */
  19. @supports (flex-wrap: wrap) {
  20. .foo {
  21. background: green;
  22. }
  23.  
  24. @media (min-width: 50em) {
  25. .foo {
  26. background: blue;
  27. }
  28. }
  29. }

解决方法

根据 section 3 of the spec,这两个示例都是有效的CSS,目前它们似乎一直受到了解@supports规则和嵌套@media规则( also new to CSS3)的浏览器的一致支持.

虽然这两个示例仅在满足@media和@supports条件时才应用background:blue声明,

>当且仅当满足(min-width:50em)媒体查询时,A将应用背景:绿色或背景:蓝色;
当且仅当浏览器理解@supports并支持flex-wrap:wrap时,B才会应用任一声明.

由于您的两个示例意味着微妙的不同,您选择哪一个将取决于您的用例:

>如果您不希望浏览器不支持@supports或flex-wrap:wrap来查看声明,而是始终应用​​background:red,请选择B.>否则,如果您希望任何浏览器(无论如何都能理解媒体查询)在指定的视口宽度应用background:green,即使它永远不会应用background:blue,因为不支持@supports或flex-wrap:wrap,请选择A .

猜你在找的CSS相关文章