Возможно ли стиль текста заполнителя по умолчанию на элементе ввода HTML5 = "дата"? в Chrome?

У меня есть форма со списком дат, и я использую элемент HTML 5 input type="date" для их представления. Я хотел бы изменить цвет полей, которые не имеют значения (т.е. Те, которые показывают dd/mm/yyyy), так что их легче отличить от полей, содержащих фактическую дату.

Возможно ли это? Я думал, что -webkit-input-placeholder мог бы сделать то, что я хочу, но это не так.

Ответ 1

В Chrome отсутствует запись для ввода даты. Если вы установите флажок "Show shadow DOM" в настройках devtools, вы сможете проверить его:

<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;
}

Ответ 2

Благодаря существующим ответам мне удалось его обработать. В дневных месяцах и году поля получают атрибут 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;
}

Ответ 3

Как и в случае с Chrome 31 (возможно, ранее), aria-valuetext является "пустым", а не нулевым. Любая из следующих работ

::-webkit-datetime-edit-year-field[aria-valuetext=blank]
::-webkit-datetime-edit-year-field:not([aria-valuenow])

а не:

::-webkit-datetime-edit-year-field:not([aria-valuetext])

(У меня нет ответа, чтобы прокомментировать соответствующий ответ)

Ответ 4

Я хотел, чтобы текст "placeholder" был серым. Основываясь на ответе @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;
}

Ответ 5

В настоящее время атрибут placeholder не поддерживается полями ввода с type="date" и поэтому не может быть оформлен в стиле. Взгляните на этот список допустимых атрибутов:

w3.org: "input type = date - date input control"

Итак, Chrome на самом деле делает это правильно, в отличие от Safari, который вообще не заботится о типе date.