Почему изменилось поведение `input type=date`?

Ввод даты, такой как <input type="date" name="due_date" id="due_date" min="2011-09-01" maxlength="10" class="span8"> в Chrome, позволяет пользователю видеть «всплывающий» календарь, чтобы помочь выбрать дату. Вчера я заметил, что поведение прекратилось; ввод позволяет пользователю перемещать стрелки вверх/вниз по частям даты (месяц/день/год). Я посетил блог Chrome и запустил поиск в Google, но не нашел упоминания об этом изменении. Почему изменилось поведение input type="date"? Любопытно, что это изменение, похоже, ограничено Bootstrap, поскольку http://www.w3schools.com/html/tryit.asp?filename=tryhtml5_input_type_date по-прежнему показывает средство выбора даты.


person Jeromy French    schedule 25.02.2013    source источник
comment
Создал JSFiddle с помощью Bootstrap CSS и, похоже, не влияет на всплывающее окно Chrome - jsfiddle.net/BxVDx/3   -  person Kasaku    schedule 25.02.2013
comment
Я только что подтвердил, что это проблема Bootstrap, перейдя к документации Bootstrap и вставив <label for="date1">Choose date</label><input type="date" name="date1" id="date1"> в пример формы по умолчанию в twitter.github.com/bootstrap/base-css.html#forms.   -  person Jeromy French    schedule 25.02.2013
comment
@PirateKitten: я действительно вижу эту проблему в твоей скрипке. Я использую Chrome... Версия 25.0.1364.97 m. Ты?   -  person Jeromy French    schedule 25.02.2013
comment
Да, только что подтвердил, что мой Chrome немного устарел, обновился и теперь выглядит так, как вы описываете, поэтому поведение Chrome изменилось, как вы думали. Извините, я потерял версию, на которой я был, поэтому я не могу ее процитировать.   -  person Kasaku    schedule 25.02.2013
comment
@PirateKitten: НП - спасибо за вторую точку данных!   -  person Jeromy French    schedule 25.02.2013
comment
Открытый билет Bootstrap: github.com/twitter/bootstrap/issues/7061   -  person Jeromy French    schedule 25.02.2013
comment
После долгого семилетнего перерыва (по крайней мере, так кажется) инженеры Google сделали это снова. В разгар Covid-19 они решили развернуть свой последний драгоценный камень (версия 83.0.4103.61), и все пошло прахом. Мое приложение, которое выглядело хорошо только в последний раз, когда я его посещал, теперь выглядит паршиво благодаря мандаринам из Google. ссылка. Не только виджет даты, но и поля ввода стали выглядеть забавно. Если кто-то сталкивался с такой же проблемой, пожалуйста, предложите решение.   -  person user12379095    schedule 30.05.2020
comment
В конце концов оказалось, что команда Google, , выбрала этот дизайн, поскольку они решил пересмотреть внешний вид элементов управления формы. Но они не оставили нам выбора.   -  person user12379095    schedule 31.05.2020


Ответы (3)


Обновление Команда Chromium приняла ошибку и отправила исправление обратно в WebKit< /а>. Суть изменения заключается в том, что элементы управления датой будут отображаться внутри элемента гибкого поля независимо от стиля, примененного к элементу управления input[type='date'].


Я который сообщил об упомянутом здесь дефекте в Chromium. Одним из предлагаемых решений является применение display: inline-block; в окно выбора календаря:

input[type="date"]::-webkit-calendar-picker-indicator{
    display:inline-block;
}

Однако это шаткое решение, потому что элементы управления по-прежнему смещаются в другое место, кроме выравнивания по правому краю в элементе управления input[type="date"].

Другой вариант - плавать вправо:

input[type="date"]::-webkit-calendar-picker-indicator {
    display:inline-block;
    margin-top:2%;
    float:right;
}
input[type="date"]::-webkit-inner-spin-button {
    display:inline-block;
    float:right;
}

Побочным эффектом этого является инвертирование элементов управления счетчиком и выбором календаря.

Лучший хак, я думаю, это убрать счетчик и плавать вправо:

input[type="date"]::-webkit-calendar-picker-indicator{
    display:inline-block;
    margin-top:2%;
    float:right;
}
input[type="date"]::-webkit-inner-spin-button {
    /* display: none; <- Crashes Chrome on hover */
    -webkit-appearance: none;
    margin: 0;
}

chrome 25 input[type=date] обход дефектов

person Brian Reiter    schedule 27.02.2013
comment
Обратите внимание, что если вы перемещаете элемент, его отображение установлено на block, поэтому нет смысла пытаться установить для него что-то еще. См. эту статью о хитростях CSS или просто взгляните на вычисляемый стиль в инструментах разработчика Chrome. . Говоря об этих инструментах, люди могут не знать, что вы можете перейти в «Настройки»> «Элементы»> «Показать теневой DOM», чтобы увидеть элементы (-webkit-inner-spin-button и т. д.), упомянутые в этом ответе. - person CherryFlavourPez; 28.02.2013
comment
Chrome версии 26.0.1410.43 m снова все правильно отображает. - person Jeromy French; 02.04.2013

обновлено

Найдена проблема

Bootstrap использует 2 атрибута стиля.

1 – display:inline-block, из-за чего Google переносит стрелку на другую строку.

2 – высота: 20 пикселей, из-за чего вы не видите эту "линию"

скриншот выводов

person Karl Doyle    schedule 25.02.2013
comment
Я вижу аналогичные изменения, когда отключаю padding. - person Jeromy French; 26.02.2013

Обновить

Проблема с Google Chrome была отмечена как регресс, поэтому мы надеемся, что она будет исправлена ​​в ближайшее время. В качестве временного обходного пути будет работать следующее:

input[type=date]::-webkit-calendar-picker-indicator {
    display: inline-block;
}

Таким образом, вы можете установить для свойства отображения входов все, что вам нравится, и все будет работать, как и раньше.

Исходный ответ

Установка display: -webkit-inline-flex (которая, по-видимому, используется по умолчанию для <input type="date" />) решит эту проблему, однако это может изменить макет, поскольку ввод обрабатывается как встроенный элемент.

Мне это кажется ошибкой, я посмотрю, если кто-то уже подал отчет об ошибке, в противном случае я буду.

person ximi    schedule 26.02.2013
comment
В системе отслеживания ошибок хрома есть проблема, не стесняйтесь пометить ее звездочкой, чтобы получать уведомления об обновлениях и выражать заинтересованность в ее решении: code.google.com/p/chromium/issues/ - person ximi; 26.02.2013
comment
Обратитесь к моему предыдущему комментарию :) - person Karl Doyle; 26.02.2013
comment
Спасибо @ximi. Я также открыл билет Bootstrap: github.com/twitter/bootstrap/issues/7061 - person Jeromy French; 26.02.2013
comment
@KarlDoyle, удаление свойства и его сброс не обязательно одно и то же. - person ximi; 26.02.2013
comment
@JeromyFrench Я не уверен, что ребята из начальной загрузки исправят это, так как на самом деле нет ничего плохого в их коде, но с реализацией Chrome. Я просто надеюсь, что ребята из Google это исправят - person ximi; 26.02.2013
comment
@ximi - правда, я вижу, что встроенный блок на самом деле не удаляет стрелку, помещенную ниже ввода, что вы не можете увидеть в начальной загрузке, потому что height: 20px - person Karl Doyle; 26.02.2013