有几个伪类可用于 webkit 浏览器上的日期字段。在 Safari 中,为了能够看到它们,您可以检查元素并进入影子根。在日期字段的阴影根中,您将找到带有 psuedo 属性的 div 元素,该属性提示可用的伪选择器:
::-webkit-datetime-edit
::-webkit-datetime-edit-fields-wrapper
::-webkit-datetime-edit-day-field
::-webkit-datetime-edit-month-field
::-webkit-datetime-edit-year-field
::-webkit-datetime-edit-text
这允许您单独设置日期的每个部分的样式。很遗憾,您不能使用 :placeholder-shown 定位占位符值。
目前,除非我弄错了,否则这意味着在 macOS 上的 Safari 16 中,如果没有一些 javascript,就不可能摆脱占位符。
相反,您可以做的是使用 onchange 事件在 Javascript 中跟踪输入是否具有值并应用类。然后,这将允许您在应用类时使用上述伪选择器选择日期字段的各个元素。
例如(在常规 html/js 中):
<style>
input[type="date"]::-webkit-datetime-edit-day-field,
input[type="date"]::-webkit-datetime-edit-month-field,
input[type="date"]::-webkit-datetime-edit-year-field {
opacity: var(--field-opacity, 0);
}
input[type="date"].has-value {
--field-opacity: 1;
}
</style>
<input type="date" id="my-date" />
<script>
const dateField = document.getElementById('my-date');
dateField.addEventListener('change', (ev) => {
if (ev.target.value) {
ev.target.classList.add('has-value');
} else {
ev.target.classList.remove('has-value');
}
});
</script>
当然,您可能希望在您选择的框架中使此代码可重用。