【问题标题】:Can someone explain why native css variables cancel each other in media querys?有人可以解释为什么原生 css 变量在媒体查询中相互抵消吗?
【发布时间】:2021-08-08 14:22:22
【问题描述】:

所以我正在尝试以角度制作响应式调整大小的帖子组件,并尝试更改不同屏幕尺寸的尺寸,例如使帖子在 4k 上看起来更大。
我对此的尝试是原生 css 变量(首先尝试使用 sass 变量,但后来了解到因为它只是一个预处理器,所以它不会是动态的,这完全有意义)。 我有多个针对不同屏幕尺寸的媒体查询,并且我有一个“调整大小变量”,它会根据不同的查询而变化。 使用一个查询,一切都可以正常工作,但是一旦我有第二个查询更改了变量,它似乎不再起作用了吗? 我找不到任何解释这一点的东西,我真的很想了解这一点,所以有人可以向我解释一下吗?

代码(简化):

.post{
  --header-height: 100px;
  --size-factor: 1;
  .posthead{
    height: calc(var(--header-height) * var(--size-factor);
    .{
      img{
        max-height: calc(var(--header-height) * var(--size-factor);
        max-width: calc(var(--header-height) * var(--size-factor);
      }
    }
}

// 4K
@media only screen and (min-width: 4092px){
    .post{
        --size-factor: 2.5;
    }
}

// 2K
@media only screen and (min-width: 2560px){
    .post{
        --size-factor: 1.5;
    }
}

当我只有 4k 的查询并在 4k 模式下检查时,一切看起来都很好并且可以调整大小。 但是,一旦我有 2k 查询,两者都不会工作。

注意:
这些值仅用于测试。显然我还没有找到合适的号码。

【问题讨论】:

  • 恢复媒体查询的顺序。当您查看 4092px 时,两个媒体查询都匹配,但最后一个获胜(对于级联)。
  • 啊我想我明白了——所以媒体查​​询(也)从上到下使最低的“最强”?那会解释很多。谢谢!
  • 这不是媒体查询特有的。这是CSS的C。对具有相同特性相同元素的所有规则从上到下应用。
  • 换句话说,媒体查询不会影响级联——它们是transparent to the cascade

标签: html css sass media-queries css-variables


【解决方案1】:

首先,您的任何calc 语句的末尾都没有右括号。

尝试使用 rem 单位而不是 px。

html, body {
  // Set size of the rem unit
  font-size: 16px
}
    
.post {
  .posthead {
    // 6 * 16px = 96px;
    height: 6rem;
    
    img {
      width: 100%;
    }
  }
}

// 2K
@media only screen and (min-width: 1920px) {
  .post {
    .posthead {
     height: 9rem;
    }
  }
}

// 4K
@media only screen and (min-width: 2560px) {
  .post {
    .posthead {
     height: 15rem;
    }
  }
}

2K 和 4K 分辨率(如果您想这样称呼它们)更多地取决于 px 高度的数量,因为还有宽屏幕。无论如何,您需要在您定位的屏幕尺寸下超过 1 个尺寸。因此,例如,如果您希望在 4K 屏幕上显示某些内容,则设置 min-width: 2560px 而不是 4092px 这是“8K”屏幕(如果您遵循该逻辑,则应为 3840px,因为原生 4K 分辨率为 3840x2160px) .

【讨论】:

  • 别担心,我只是拼错了,然后把它全部复制了一遍——但在实际文件中它是正确的! (如果不是,scss 会比婴儿哭得更响)。在字体大小以外的其他东西上使用 rem 或 em 是常见的情况吗?我被告知那不是你应该做的。分辨率只是大约。 :) 但不知何故,我认为 4k 的值是错误的!感谢您指出这一点。
  • 不知道是谁告诉你的,但你应该一直使用 rem 和 em。使用 px,您会迫使用户按照自己的意愿拥有网页,这可能对他们不利(例如,需要更大的 UI 才能让视力有问题的人看得更清楚)。使用 rem 和 em 缩放浏览器时,您的整个网页会随之正确缩放。或者某些用户可能已经更改了浏览器的默认字体大小以适应需要,并且使用 px 您正在强制他们使用您设置的大小。
  • 这里我将 font-size 设置为 16px 只是为了向您展示 px 和 rem 之间的关系,但通常您会忽略该部分并让用户在那里设置他们想要的浏览器。大多数用户将默认值 16px 作为浏览器默认值
猜你喜欢
  • 2011-04-06
  • 2015-06-25
  • 2019-02-01
  • 2021-05-17
  • 2016-02-25
  • 2020-12-24
  • 2012-04-19
  • 2021-10-25
  • 1970-01-01
相关资源
最近更新 更多