【问题标题】:Fluid font-size not working. Conflict with css reset "font: inherit;". Why?流体字体大小不起作用。与 css 重置“字体:继承;”冲突。为什么?
【发布时间】:2023-03-30 17:20:01
【问题描述】:

我想使用带有 https://css-tricks.com/snippets/css/fluid-typography/ 代码的流畅字体大小。但是我的 CSS Meyer Reset (font: inherit;) 似乎覆盖了代码。我不知道为什么?代码如下:

CSS 重置 css:

html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td,
article, aside, canvas, details, embed,
figure, figcaption, footer, header, hgroup,
menu, nav, output, ruby, section, summary,
time, mark, audio, video {
  margin: 0;
  padding: 0;
  border: 0;
  font: inherit;
  vertical-align: baseline;

}

稍后在 css 样式表中的代码以获得 16px 和 40px 之间的流畅字体大小;

html {
  font-size: 16px;
}

@media screen and (min-width: 320px) {
  :root {
    font-size: calc(16px + (40 - 16) * ((100vw - 320px) / (1000 - 320)));
  }
}
@media screen and (min-width: 1000px) {
  :root {
    font-size: 40px;
  }
}

然后,当我在浏览器中以 700px 浏览器大小进行检查时,后一个 css 流体代码被“字体:继承”覆盖。在 CSS 重置代码中。因此,它似乎不适用于流体代码。有任何想法吗?它是否有效?

Picture. Inspection tool in browser shows that the latter code is not active?

流体字体代码有效,但让我感到困惑的是,检查器工具显示它没有被应用,而只显示重置 css font:inherit 被应用。为什么?

【问题讨论】:

  • 但它是继承的,因此它将通过继承您定义的值来工作:jsfiddle.net/2m7vtj9x(调整大小并查看)
  • 所以你的意思是我的代码确实有效,即使 css 重置字体属性覆盖了流体媒体查询代码?
  • 自己测试一下看看。我想你知道它应该如何表现,这样你就可以看到它是否正常工作
  • 它似乎有效,但让我感到困惑的是,检查工具取消了媒体查询代码。对我来说,它没有得到应用?见图片。

标签: css fluid typography


【解决方案1】:

MDN: inherit

inherit CSS 关键字导致指定它的元素从其父元素获取属性的计算值

因此,如果媒体查询的 css 规则应用于 :root 并且其后代都具有 font: inhert 他们将从 :root 继承字体设置

如果所有元素(如p)不会将font-size 设置为inherit,而是具有计算值,那么您不能更改某个元素的字体大小并让这些设置传播到它的后代,但您也需要在每个后代上设置它。因此,将 font-… 属性设置为 inherit 是预期的行为。

这里font-size直接应用于每个元素,如果你改变p的字体大小它不适用于span

* {
  font-size: 20px;
}

p {
  font-size: 10px;
}
<div>
  Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.
  <p>At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd <span>gubergren</span>, no sea takimata sanctus est Lorem ipsum dolor sit amet.</p> 
</div>

另一方面,如果font-sizeinherit,那么如果您设置font-size,它将传播给孩子。

* {
  font-size: inherit;
}

div {
  font-size: 20px;
}


p {
  font-size: 10px;
}
<div>
  Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.
  <p>At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd <span>gubergren</span>, no sea takimata sanctus est Lorem ipsum dolor sit amet.</p> 
</div>

【讨论】:

  • 但是当我检查您的代码时,它确实覆盖了继承值。见图片imgur.com/a/V86tJMQ。在我的代码中,后一个 css 代码不会覆盖继承值(参见我帖子中的图片)。
  • @TobiasAndersson 查看两个 sn-ps 中的 &lt;span&gt;gubergren&lt;/span&gt; 元素。在第一个示例中,大小应用于所有元素,因此更改p 不会影响span(这不是您通常想要的),在第二个示例中,所有元素都具有inherit,除了大小为已设置,因此span 继承了p 的大小。
  • 我明白这一点。因此,我希望检查器工具应用我的媒体查询代码而不是覆盖它(参见我第一篇文章中的图片)。检查器工具显示字体大小是继承的,并改为应用该规则(并跨越媒体查询代码,这是我想要使用的代码)。
  • 流体字体代码有效,但让我感到困惑的是,检查器工具显示它没有被应用,只显示重置 css font:inherit 被应用。
  • @TobiasAndersson 因为您的媒体查询font-size 应用于:root 而不是您的p 元素,所以字体大小与为:root 元素计算的一样。对于您的p:它元素 inherits 是其父级的 compute 值,因此 :root 的规则 font-size 只要没有就通过后代传播的后代已将其明确设置为不同的规则。如果您想要计算信息,请查看检查员 Computed 而不是 StyleStyles 是如何计算值的规则,而不是最终值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-22
  • 1970-01-01
  • 2012-03-12
  • 2015-08-07
  • 2011-05-26
  • 1970-01-01
  • 2014-04-29
相关资源
最近更新 更多