Microclimate.su

IT Новости
30 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Выбор даты рождения html

Air Datepicker, легкий и красивый выбор даты

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

Результат работы можно посмотреть здесь: Air Datepicker.

Введение

Работая над последним проектом, возникла необходимость добавить в приложение календарь с возможностью выбрать конкретный месяц. Все популярные плагины такую возможность предоставляют, мой выбор остановился на Zebra Datepicker — маленький, функциональный, все здорово. Но некоторых вещей все же не хватало:

  1. передача объектов Date() в параметры вместо строк
  2. менее громоздкая разметка
  3. гибкое позиционирование элемента
  4. анимация при появлении

Сколько не приходилось работать с датой, почти всегда в исходных данных она хранилась в unix формате, и для меня остается загадкой, почему во многих плагинах при задании, к примеру, минимально возможной даты, нужно передавать строку: нужно получить дату, затем переделать ее в строку и уже потом передать плагину, вместо того, чтобы просто отдать new Date(time).

Что касается громоздкой разметки, то к ней добавляется еще и табличная верстка, к ячейкам которой без лишних проблем не добавить position: relative;.

Ну и напоследок все же хочется, чтобы была возможность добавить небольшую анимацию, а из-за того, что многие популярные календари используют метод .show(), который задействует свойство display, плавные переходы (transition) добавлять трудоемко.

Разработка

Календарь я разделил на три части:

При наступлении каких-либо событий в теле или навигации, они сообщают об этом основной части, и календарь обновляет свое состояние в соответствии с этими событиями.

В этой задаче мне помогли getter’ы и setter’ы. Например, при изменении месяца просто присваивается новая отображаемая дата с измененным номером месяца, и внутри геттера вызывается метод перерисовки тела и навигации календаря. Несмотря на то, что можно было бы обойтись и без них, мне данный подход представляется более красивым. К примеру, вот так выглядит метод перехода к следующему месяцу, году или декаде, в зависимости от текущего вида:

В свою очередь внутри геттера происходит вызов отрисовки элементов календаря (упрощенно):

Точно так же происходит переход на другой вид, очень просто:

Формирование разметки

Основа для календаря выглядит следующим образом:

Без таблиц и намека на них. Ячейка является простым

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

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

Вычисление общего количества дней в месяце

Чтобы сформировать корректный HTML, нужно знать сколько дней в месяце. Для этого используется небольшой трюк с передачей следующего месяца и нулевой даты (в Date() дата месяца начинается с единицы).

Формирование названий дней

Когда инициализируешь календарь, можно задавать день, с которого начинается неделя. Мне показалось интересным показать как можно сформировать разметку с названиями дней с помощью рекурсии:

Использование flexbox

Для позиционирования внутри календаря я использую flexbox. Он с легкостью позволяет отцентрировать контент внутри ячеек, будет по центру во всех браузерах (которые поддерживают эту технологию) и на разных ОС, в отличие от техники задания высоты и такого же междустрочного интервала.

Плюс он позволяет располагать элементы на равноудаленном расстоянии друг от друга всего одной строчкой:

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

Можно также упомянуть про кнопки «Сегодня» и «Очистить»:

Если их две, они занимают по 50% ото всей ширины, если одна, то она занимает всю ширину. Этого также можно достичь одной строкой:

Это означает, что элемент в случае необходимости может как увеличиваться в размерах, так и уменьшаться, но при этом размеры всех соседей будут одинаковые. Когда кнопка одна, она расширяется на всю ширину, когда две, они пропорционально уменьшаются и занимают по 50%, и т.д. Можно добавлять сколько угодно элементов, у всех них будут одинаковые размеры, и в сумме они будут занимать всю ширину родителя.

В итоге мы получаем легкость позиционирования контента как при использовании таблиц, но сохраняем при этом чистоту и валидность разметки.

Позиционирование

Позиция элемента задается двумя значениям:

  1. сторона, с которой будет появляться календарь
  2. положение на этой стороне

Если нужно расположить календарь сверху справа, то значение будет выглядеть как:

Для того, чтобы добавить анимацию «подъезжания» к текстовому полю, я добавил вспомогательные классы, которые говорят с какой стороны нужно начинать анимацию. В данном случае этот класс выглядел бы как .-from-top-. За анимацию отвечают css transition и css transform. Это позволяет достичь плавности, а также добавлять кастомные переходы.

Что касается Date()

Как я упоминал вначале, мне не совсем понятны ситуации, когда вместо объекта даты нужно передавать строку. Возможно это удобно при автоматической инициализации, когда параметры нужно передавать через data атрибуты, но для меня все же удобнее просто передать new Date(). Тем более, что запись вида new Date(2015, 11, 17) не особо сложнее ‘2015-12-17’. Поэтому у меня во всех параметрах, где задается дата, необходимо передавать new Date().

Несколько слов об использовании

Мне нравится практика автоматической инициализации плагинов, поэтому для инициализации календаря к текстовому полю достаточно добавить класс ‘datepicker-here’ и все заработает.

Опции можно передать через data атрибуты.

Кастомизируемое содержимое ячейки

В Air Datepicker есть возможность полностью изменять содержимое ячеек. Это позволяет добавлять, например, названия событий или какой-то вспомогательный контент в ячейки. Для этого нужно использовать опцию onRenderCell():

Заключение

В итоге я могу сказать, что получил неплохой опыт, улучшил свои навыки работы с датой и написания документации. Календарь получился небольшим: всего 20kb (минифицированный js файл), но достаточно функциональным, по крайней мере для меня он свои задачи выполняет. Буду рад, если он или эта статья кому-нибудь поможет.

Верстка формы + скрипт выбора даты

На этом уроке, мы займемся версткой формы, пока без отправления данных на сервер. Кроме того, установим скрипт выбора даты, при онлайн бронировании.

Читать еще:  Как сохранить изменения в html коде

Изучение макета

Перед нами фрагмент формы для бронирования из реального PSD макета, из которого нужно сделать HTML страницу с точно таким же стилевым оформлением.

Мысленно разобьем макет-дизайн формы, на блоки-обертки и вложенные в них элементы. Мы сгруппировали однотипные элементы в четыре блока и всю эту конструкцию поместили в один общий контейнер booking_form.

  • В первом блоке — заголовок h2
  • Во втором input_contact – четыре текстовых поля для контактов
  • В третьем input_label – два текстовых поля с метками
  • В четвертом submit_button – кнопка Отправить

Зачем обертывать однотипные элементы в общие блоки? Так, нам проще задавать для них общие стили оформления, делать отступы и контролировать их расположение и поведение.

В атрибут placeholder закладывается подсказка, какую информацию, должен ввести пользователь

HTML структура

Забронировать визит

Написать HTML код, можно, просто глядя на макет, однако для написания CSS, необходимо детально погрузиться в Photoshop или Avocode.

CSS код

Задаем общие базовые стили для всех элементов. Обнуляем поля и отступы, убираем дефолтную обводку внутри полей и уберем влияние паддингов и маржинов на размеры элементов (border-box).

* <
margin: 0;
padding: 0;
outline: 0;
box-sizing: border-box;
>

Максимальная ширина формы, отступы от края браузера. Свойство auto, ставит форму посередине от правого и левого края браузера.

.booking_form <
max-width: 400px;
margin: 4rem auto;
>

Стилевое оформление для заголовка. Шрифт Roboto Condensed, находите на Google Font и выполняете их инструкции.

h2 <
font-family: ‘Roboto Condensed’;
font-size: 32px;
color: #313030;
padding-bottom: 30px;
>

Для того, чтобы во втором блоке, поля расположить в строку, подключаем flex-технологию. Свойство space-between, раскидает инпуты по краям формы, а свойство wrap, разрешит перенос полей на новую строку.

.booking_form .input_contact <
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-pack: justify;
-ms-flex-pack: justify;
justify-content: space-between;
-ms-flex-wrap: wrap;
flex-wrap: wrap;
>

Для достижения лучшей кроссбраузерности, добавим вендорные префиксы, для flexbox c помощью сервиса.

Общие стили оформления, для вводимого текста для всех текстовых полей.

input[type=text] <
height: 30px;
border: 1px solid #f1f1f1;
padding: 0 13px;
font-family: ‘Open Sans’;
color: #737272;
font-size: 14px;
>

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

.booking_form .input_contact input[type=text] <
width: 190px;
margin-bottom: 15px;
>

.booking_form .input_label input[type=text] <
width: 320px;
margin-bottom: 15px;
>

В третьем блоке, label и input, расположим в строку.

.booking_form .input_label label <
display: flex;
justify-content: space-between;
flex-wrap: wrap;
>

Отдельно стилизуем, метки.

.booking_form .input_label span <
font-family: ‘Open Sans’;
color: #737272;
font-size: 14px;
line-height: 30px;
>

Текст у placeholder.

input::-webkit-input-placeholder,
input::-moz-input-placeholder <
font-family: ‘Open Sans’;
color: #737272;
font-size: 14px;
>

При установке курсора в текстовое поле, текст у placeholder, исчезает.

*:focus::-webkit-input-placeholder <
color: transparent;
>

*:focus::-ms-input-placeholder <
color: transparent;
>

Сместим кнопку к правому краю формы.

.booking_form .submit_button <
display: flex;
justify-content: flex-end;
>

Оформление для кнопки.

.booking_form input[type=submit] <
width: 120px;
height: 45px;
background: #607D8B;
color: #fff;
font-family: ‘Roboto Condensed’;
font-size: 20px;
margin-top: 20px;
border: none;
cursor: pointer;
>

Скрипт выбора даты jQuery UI

К текстовому полю, прикрутим идентификатор datepicker, при клике по которому появится календарь.

Подключим между тегами head, CSS файл библиотеки.

Перед закрывающим тегом body подключим обе библиотеки и инициализируем скрипт выбора даты datepicker.

Демонстрация примера

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

Она выглядит вот так:

  • BB-код ссылки для форумов (например, можете поставить её в подписи):
  • Комментарии ( 0 ):

    Для добавления комментариев надо войти в систему.
    Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.

    Copyright © 2010-2020 Русаков Михаил Юрьевич. Все права защищены.

    Выбор даты рождения html

    Элементы используется для создания интерактивных элементов управления в веб-формах для принятия данных от пользователя; в зависимости от устройства и user agent, доступен широкий выбор типов входных данных и виджетов управления.»> типа date создают поля ввода и позволяют пользователю ввести дату, либо использовать text box для автоматической проверки контента или использовать специальный интерфейс date picker. Возвращаемое значение включает год, месяц, день, но не время. Используйте поля ввода time или datetime-local , чтобы вводить время или дату/время соответственно.

    Отображение date различается в зависимости от браузера, кроме того не все браузеры поддерживают date . Подробнее см. Browser compatibility. В неподдерживаемых браузерах элемент будет отображаться как обычный .

    Исходный код этого интерактивного примера хранится в репозитории GitHub. Если вы хотите внести свой вклад в проект интерактивных примеров, пожалуйста, клонируйте https://github.com/mdn/interactive-examples и отправьте нам запрос на внесение изменений.

    Среди браузеров которые поддерживают кастомный интерфейс для выбора даты в Chrome/Opera выглядит как:

    В Edge выглядит как:

    В Firefox выглядит как:

    ValueВозвращает DOMString , с датой в формате гггг-мм-дд, или пустую строку
    Событияchange и input
    Поддерживаемые атрибутыautocomplete , list , readonly , and step
    IDL attributeslist , value , valueAsDate , valueAsNumber .
    Методы select() , stepDown() , stepUp()

    Значение

    Возвращает DOMString представляющий значение даты введенной в input. Вы можете установить значение по умолчанию для элемента с помощью добавления атрибута в value , например:

    Помните что отображаемый формат даты отличается от настоящего значения value — отображаемый формат даты будет выбран базируясь на расположении браузера пользователя, тогда как значение это всегда отформатированный гггг-мм-дд.

    Вы также можете получить или установить значение даты в JavaScript используя свойство ввода элемента value , к примеру:

    Дополнительные атрибуты

    АтрибутОписание
    maxМаксимально возможная дата для установки
    minМинимально возможная дата для установки
    stepШаг (в днях), с которым будет изменяться дата при нажатии кнопок вниз или вверх данного элемента

    Максимально возможная дата для установки. Если value является более поздней датой, чем дата, указанная в атрибуте max , элемент отобразит ошибку при помощи constraint validation. Если в атрибуте max указано значение, не удовлетворяющее формату yyyy-MM-dd , значит элемент не будет иметь максимальной даты.

    В атрибуте max должна быть указана строка с датой, которая больше или равна дате, указанной в атрибуте min .

    Минимально возможная дата для установки. Если value является более ранней датой, чем дата, указанная в атрибуте min , элемент отобразит ошибку при помощи constraint validation. Если в атрибуте min указано значение, не удовлетворяющее формату yyyy-MM-dd , значит элемент не будет иметь минимальной даты.

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

    The step attribute is a number that specifies the granularity that the value must adhere to, or the special value any , which is described below. Only values which are equal to the basis for stepping ( min if specified, value otherwise, and an appropriate default value if neither of those is provided) are valid.

    A string value of any means that no stepping is implied, and any value is allowed (barring other constraints, such as min and max ).

    Note: When the data entered by the user doesn’t adhere to the stepping configuration, the user agent may round to the nearest valid value, preferring numbers in the positive direction when there are two equally close options.

    For date inputs, the value of step is given in days, with a scaling factor of 86,400,000 (since the underlying numeric value is in milliseconds). The default value of step is 1, indicating 1 day.

    Specifying any as a value for the step attribute makes the same effect as it were equal to 1 for date inputs.

    Использование полей ввода c типом date

    На первый взгляд, элемент выглядит заманчиво — он предоставляет легкий графический интерфейс для выбора даты, нормализует формат даты, отправляемой на сервер независимо от локальных настроек пользователя. Тем не менее, есть проблемы с в связи с ограниченой поддержкой браузеров.

    We’ll look at basic and more complex uses of , then offer advice on mitigating the browser support issue later on (see Handling browser support). Of course, hopefully over time browser support will become more ubiquitous, and this problem will fade away.

    Как использовать date?

    Самый простой способ использовать — это использовать его с элементами и label , как показано ниже:

    Setting maximum and minimum dates

    Вы можете использовать атрибуты min и max , чтобы ограничить дату, которую может выбрать пользователь. В следующем примере мы устанавливаем минимальную дату 2017-04-01 и максимальную дату 2017-04-30 . Пользователь сможет выбрать дату только из этого диапазона:

    В результате выполнения кода, пользователь сможет выбрать любой день апреля 2017 года, но не сможет выбрать и даже просмотреть дни других месяцев и годов, в том числе через виджет date picker.

    Note: You should be able to use the step attribute to vary the number of days jumped each time the date is incremented (e.g. maybe you only want to make Saturdays selectable). However, this does not seem to work effectively in any implementation at the time of writing.

    Controlling input size

    doesn’t support form sizing attributes such as size . You’ll have to resort to CSS for sizing needs.

    Validation

    By default, does not apply any validation to entered values. The UI implementations generally don’t let you enter anything that isn’t a date — which is helpful — but you can still leave the field empty or (in browsers where the input falls back to type text ) enter an invalid date (e.g. the 32nd of April).

    If you use min and max to restrict the available dates (see Setting maximum and minimum dates), supporting browsers will display an error if you try to submit a date that is outside the set bounds. However, you’ll have to check the results to be sure the value is within these dates, since they’re only enforced if the date picker is fully supported on the user’s device.

    In addition, you can use the required attribute to make filling in the date mandatory — again, an error will be displayed if you try to submit an empty date field. This, at least, should work in most browsers.

    Let’s look at an example — here we’ve set minimum and maximum dates, and also made the field required:

    If you try to submit the form with an incomplete date (or with a date outside the set bounds), the browser displays an error. Try playing with the example now:

    Here’s a screenshot for those of you who aren’t using a supporting browser:

    Here’s the CSS used in the above example. Here we make use of the или

    If you try submitting it, you’ll see that the browser now displays an error message (and highlights the input as invalid) if your entry doesn’t match the pattern nnnn-nn-nn , where n is a number from 0 to 9. Of course, this doesn’t stop people from entering invalid dates, or incorrectly formatted dates, such as yyyy-dd-mm (whereas we want yyyy-mm-dd ). So we still have a problem.

    The best way to deal with dates in forms in a cross-browser way at the moment is to get the user to enter the day, month, and year in separate controls ( представляет собой элемент управления который содержит меню опций:»> elements being popular; see below for an implementation), or to use a JavaScript library such as jQuery date picker.

    Examples

    In this example we create two sets of UI elements for choosing dates: a native picker and a set of three представляет собой элемент управления который содержит меню опций:»> elements for choosing dates in older browsers that don’t support the native input.

    The HTML looks like so:

    The months are hardcoded (as they are always the same), while the day and year values are dynamically generated depending on the currently selected month and year, and the current year (see the code comments below for detailed explanations of how these functions work.)

    JavaScript

    The other part of the code that may be of interest is the feature detection code — to detect whether the browser supports , we create a new используется для создания интерактивных элементов управления в веб-формах для принятия данных от пользователя; в зависимости от устройства и user agent, доступен широкий выбор типов входных данных и виджетов управления.»> element, set its type to date , then immediately check what its type is set to — non-supporting browsers will return text , because the date type falls back to type text . If is not supported, we hide the native picker and show the fallback picker UI ( представляет собой элемент управления который содержит меню опций:»> ) instead.

    Note: Remember that some years have 53 weeks in them (see Weeks per year)! You’ll need to take this into consideration when developing production apps.

    Простой JavaScript календарь выбора даты (datepicker)

    Описание

    Календарь выбора даты, также называемый datepicker, написан на JavaScript. Он полностью автономен, т.е. работает без jQuery или каких-либо дополнений, с легкость интегрируется в любой проект. Требования IE 10+

    Достаточно подключить скрипт и стиль отображения:

    Затем добавить в тег:

    или вызвать для всех тегов с CSS классом .datepicker:

    Скачать

    Описание функций и их параметров

    Общая функция xCal(object, delim, order)

    Все передаваемые параметры необязательны.

    Первый параметр object

    В качестве первого параметра можно передавать объект или его ID: xCal(this) или xCal(‘date2’). При отсутствии каких-либо параметров календарь закрывается. Для получения текущей даты функцию можно вызвать со значением первого параметра равным двойке alert(xCal(2)). Пример.

    Второй и третий параметр

    Если в качестве второго параметра передается объект, то третий параметр игнорируется. Объект может содержать набор некоторых параметров из таблицы ниже. В ином случае устанавливаются необязательные параметры delim и order (см. описание этих параметров в таблице ниже).

    Примеры использования функции xCal():

    Таблица параметров календаря доступных для установки

    ПараметрВозможные значенияЗначение по умолчаниюОписание
    lang«en», «ru»«ru»Язык интерфейса. Возможно добавить необходимые языки в js файл по аналогии с имеющимися
    classстрока«xcalend»Имя CSS класса для визуального оформления календаря
    delimстрока«.»Разделитель между числами дня, месяца и года
    order0 — ДД.ММ.ГГГГ,
    1 — ГГГГ.ММ.ДД,
    2 — ММ.ДД.ГГГГ
    При значении равном единице используется обратный порядок ГГГГ.ММ.ДД, при значении равном двойке используется порядок на американский манер ММ.ДД.ГГГГ, в остальных случаях и по умолчанию ДД.ММ.ГГГГ
    idстрокаотсутствуетУникальный ID календаря. При отсутствии используется название из class
    autoOn0 — выключено,
    1 — включено
    1Автоматическое открытие календаря при наведении курсора на поле. Используется функцией xCal.all(). Для ручной установки необходимо в теге использовать onmouseenter=»xCal(this)»
    autoOff0 — выключено,
    1 — включено
    1Автоматическое закрытие календаря при выходе курсора за его пределы
    now0 — нет, 1 — да1Возможность установки текущей даты в один клик
    set00 — нет, 1 — даВозможность установки значения «00.00.0000» в один клик, в соответствии с установленным значения порядка отображения
    x0 — нет, 1 — да1Отображать кнопку «Закрыть»
    hide0 — нет, 1 — да1Скрывать календарь после выбора даты
    toстрока или элементdocument.bodyМесто размещения календаря.
    Если этот параметр является строкой, то используется элемент с указанным ID
    fnстрока или функцияотсутствуетВызов функции при выборе даты.
    Если задано название функции в виде строки, то в функцию с таким названием передается выбранная дата в качестве единственного параметра.
    Если тип этого параметра является функцией, то в нее передается два параметра: выбранная дата и объект со всеми текущими установленными параметрами указанными в данной справочной таблице.

    Включение календаря для всех элементов одного класса. Функция xCal.all(className, delim, order)

    Функция xCal.all(className, delim, order) предназначена для прикрепления календаря ко всем полям с CSS классом, указанном в первом параметре, className. Эта функция имеет такие же параметры как и у xCal(). Отличается только первым параметром, который должен быть именем CSS класса и является обязательным.

    Пример использования функции xCal.all():

    Установка умолчаний. Функция xCal.set(options)

    Функция xCal.set(options) предназначена для установки значений по умолчанию.

    Пример использования функции xCal.set():

    Примеры использования

    Пример 1

    Дата выбрана. Кликните по полю с датой для вызова календаря:

    Пример 2

    Если поле пустое, то календарь предложит текущую дату. В этом примере также включено автоматическое открытие календаря при наведении курсора на поле:

    Пример 3

    Пример 4

    Тоже самое, что и в предыдущем примере, но в обратном порядке и с разделителем тире:
    Открыть календарь, Очистить поле, Текущая дата

    Пример 5. Использование xCal.all()

    В этом примере события назначаются для всех элементов с классом .datepicker:

    Пример 6

    Функцию можно применить к любому тегу. Последний результат всегда будет содержаться в xCal.value.
    Нажмите ТУТ или ЗДЕСЬ и последний выбранный результат можно всегда посмотреть по этой ссылке.
    А это результат только для «ТУТ«.

    Пример 7. Использование xCal.set()

    Можно динамически менять умолчания параметров. Для смены языка во всех приведенных примерах выше, кроме случаев, где явно указано в передаваемом параметре, нажмите на поле:

    Пример 8. AJAX

    Использование своих функций. Данный пример подходит для AJAX. Замените «alert» на свою функцию:

    Получай Биткоины пассивно!
    Заставь время работать на себя!

    Самый простой, надежный и проверенный способ растущего пассивного дохода без вложений, затрат времени и изучения.

    Делай сегодня то, что другие не хотят, или не знают, и завтра сможешь жить так, как другие не смогут. Всего одно простое решение ведет к большим переменам.

    Ссылка на основную публикацию
    Adblock
    detector