我有一个带有日期列表的表单,我使用 HTML 5input type="date"
元素来表示它们。我想更改没有值的字段的颜色(即显示dd/mm/yyyy
的字段),以便更容易将它们与包含实际日期的字段区分开来。
这可能吗?我认为这-webkit-input-placeholder
可能已经完成了我想要的,但似乎没有。
我有一个带有日期列表的表单,我使用 HTML 5input type="date"
元素来表示它们。我想更改没有值的字段的颜色(即显示dd/mm/yyyy
的字段),以便更容易将它们与包含实际日期的字段区分开来。
这可能吗?我认为这-webkit-input-placeholder
可能已经完成了我想要的,但似乎没有。
Chrome 中的日期输入中没有占位符。如果您在 devtools 的设置中选中“显示阴影 DOM”,您将能够检查它:
<input type="date">
#document-fragment
<div dir="ltr" pseudo="-webkit-date-and-time-container">
<div pseudo="-webkit-datetime-edit">
<span aria-help="Day" aria-valuemax="31" aria-valuemin="1" pseudo="-webkit-datetime-edit-day-field" role="spinbutton">dd</span>
<div pseudo="-webkit-datetime-edit-text">/</div>
<span aria-help="Month" aria-valuemax="12" aria-valuemin="1" pseudo="-webkit-datetime-edit-month-field" role="spinbutton">mm</span>
<div pseudo="-webkit-datetime-edit-text">/</div>
<span aria-help="Year" aria-valuemax="275760" aria-valuemin="1" pseudo="-webkit-datetime-edit-year-field" role="spinbutton">yyyy</span></div>
<div></div>
<div pseudo="-webkit-calendar-picker-indicator"></div>
</div>
</input>
您可以使用它们的伪元素设置单独的元素样式(在 Chrome Canary 中工作):
::-webkit-datetime-edit-year-field {
font-weight: bold;
}
aria-valuetext
感谢现有的答案,我设法解决了。只有当日期字段有值时,日月和年字段才会获得属性。这意味着当日期字段显示其默认值时,我可以设置这些值的样式,如下所示:
::-webkit-datetime-edit-day-field:not([aria-valuetext]),
::-webkit-datetime-edit-month-field:not([aria-valuetext]),
::-webkit-datetime-edit-year-field:not([aria-valuetext])
{
color: #999;
}
从 Chrome 31(可能更早)开始,aria-valuetext 是“空白”而不是 null。以下任一项工作
::-webkit-datetime-edit-year-field[aria-valuetext=blank]
::-webkit-datetime-edit-year-field:not([aria-valuenow])
而不是:
::-webkit-datetime-edit-year-field:not([aria-valuetext])
(我没有代表评论相关答案)
编辑:这不再起作用
我希望“占位符”文本为灰色。根据@JackBradford 的回答,我正在使用:
::-webkit-datetime-edit-text, /* this makes the slashes in dd/mm/yyyy grey */
::-webkit-datetime-edit-day-field[aria-valuetext=blank],
::-webkit-datetime-edit-month-field[aria-valuetext=blank],
::-webkit-datetime-edit-year-field[aria-valuetext=blank] {
color: lightgrey;
}
-placeholder
属性当前不受输入字段支持type="date"
,因此无法设置样式。看看这个有效属性列表:
因此,与根本不关心date
-type 的 Safari 相比,Chrome 实际上做得很好。
正如一些评论中提到的,这些解决方案似乎都不适用于最新版本的 Chrome,我可以验证这仍然是 v94 的情况。正如 Eli 提到的,在尝试选择伪元素的属性时似乎存在问题。
如果您不介意使用一点 JavaScript 在<input type="date" />
元素上设置属性,那么可以想出一个 hacky CSS 选择器作为解决方法。
例如,data-hasvalue
一旦输入有值,我就使用 JavaScript 设置属性,然后使用以下 SCSS。
&[type="date"]:not([data-hasvalue]):not(:invalid):not(:focus) {
&::-webkit-datetime-edit-text,
&::-webkit-datetime-edit-day-field,
&::-webkit-datetime-edit-month-field,
&::-webkit-datetime-edit-year-field {
color: rgb(117, 117, 117); // Chrome's default color for input placeholder text
}
}
确保data-hasvalue
为所有日期输入设置了该属性,否则在设置值时您将获得占位符样式文本。或者,通过执行相反的操作并仅在未设置值时定位来选择行为。