webkit-appearance 的样式来自哪里?

Where are the styles for webkit-appearance coming from?

我了解 -webkit-appearance 属性 背后的基本思想以及它如何将 platform-native 样式应用于元素。但是我不明白这些 platform-native 样式是在哪里定义的。我认为它们可能在用户代理样式表中,但没有样式可以使 <input type="date" /> 在移动版 Safari 中看起来像这样:

You can view the user agent stylesheet of Safari here 不包括(据我所知)使用日期渲染类型进行输入的样式,如上图所示。

大部分样式似乎是通过用户代理样式表中的单个 CSS 属性 完成的,即:

-webkit-appearance: menulist-button;

这极大地改变了移动 Safari 上输入的视觉输出,使其看起来像示例图像。

如果不是来自用户代理样式表,这些样式来自哪里?

经过大量调查和深入研究 Webkit 源代码后,我找到了答案。

在基于 Webkit 的浏览器的上下文中,应用了 appearance CSS 属性 的元素 不会 接收它们的 平台原生样式 来自浏览器的用户代理样式表。这些样式在 renderTheme 文件中的 UA 样式表之外定义,该文件是 Webkit 引擎内部的一部分。

例如,您可以找到我在此处定义的原始问题中要求的样式:https://trac.webkit.org/browser/webkit/trunk/Source/WebCore/rendering/RenderThemeIOS.mm#L623

分解这一切:在移动版 Safari 中,<input type="date" /> 从 Safari 的用户代理样式表接收 -webkit-appearance: menulist-button-webkit-appearance: menulist-button 应用的附加样式 在用户代理样式表 is defined within a renderTheme file of Webkit.

中不是