Сайт веб-мастера Александра Климова
Меню

Material Design Lite. Текстовые поля

Текстовые поля создаются на основе стандартных HTML-элементов <input type="text"> и textarea.

Классы для компонента.

  • mdl-textfield - Обязательный. Задаёт контейнер. Для внешнего контейнера div
  • mdl-js-textfield - Обязательный. Задаёт поведение компонента. Для внешнего контейнера div
  • mdl-textfield__input - Обязательный. Создаёт текстовое поле. Используется в input или textarea.
  • mdl-textfield__label - Обязательный. Создаёт надпись для текстового поля. Используется в label.
  • mdl-textfield--floating-label - Необязательный. Создаёт визуальный стиль. Используется во внешнем div.
  • mdl-textfield__error - Необязательный. Использует span для вывода ошибки. Используется при наличии атрибута pattern у input.
  • mdl-textfield--expandable - Обязательный. Определят внешний блок div для разворачивающего текстового поля.
  • mdl-button - Обязательный. Используется в качестве значка для разворачивающего текстового поля. Используется в label внешнего блока.
  • mdl-js-button - Обязательный. Задаёт поведение значка. Используется в label внешнего блока.
  • mdl-button--icon - Обязательный. Используется в качестве контейнера для значка для разворачивающего текстового поля. Используется в label внешнего блока.
  • mdl-input__expandable-holder - Обязательный. Контейнер для разворачивающего текстового поля. Используется во внутреннем блоке.
  • is-invalid - Необязательный. Задаёт текстовое поля как недействительное при начальной загрузке

Для однострочного текстового поля создайте блок div, внутри которого разместите элемент input с атрибутом type нужного варианта text и идентификатором id.

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


<div>
  <input type="text" id="user">
  <label for="user">User name</label>
</div>

При желании добавьте атрибут pattern для элемента input и свяжите с сообщением об ошибке, которое можно указать в элементе span сразу после label. Варианты шаблонов можно посмотреть здесь.


<div>
  <input type="text" id="user" pattern="[A-Z,a-z, ]*">
  <label for="user">User name</label>
  <span>Letters and spaces only</span>
</div>

Добавьте MDL-классы для всех элементов.


<div class="mdl-textfield mdl-js-textfield">
  <input class="mdl-textfield__input" type="text" id="user" pattern="[A-Z,a-z, ]*">
  <label class="mdl-textfield__label" for="user">User name</label>
  <span class="mdl-textfield__error">Letters and spaces only</span>
</div>

Компонент готов к использованию.

Элемент textarea оформляется по такому же сценарию.


<div class="mdl-textfield mdl-js-textfield">
  <textarea class="mdl-textfield__input" type="text" rows="3" maxrows="6"
   id="schools"></textarea>
  <label class="mdl-textfield__label" for="schools">Schools attended (max. 6)</label>
</div>

Чтобы добавить разворачивающее текстовое поле, создайте внешний блок div, разместите в нём элемент label с атрибутом for, значение которого должно совпадать с идентификатором элемента input.

Внутри label разместите элемент i с классом material-icons и текстом, который задаёт значок. Текст для значков можно посмотреть здесь. Для примера использовалось слово search - это самый распространённый вариант для разворачивающего элемента.

Далее после label, но внутри внешнего блока создайте внутренний блок div


<div>
    <label for="expando1">
        <i class="material-icons">search</i>
    </label>
    <div>
       ...
    </div>
</div>

Теперь внутри внутреннего блока создайте элемент input с нужными атрибутами. После него создайте элемент label с атрибутом for и небольшим текстом.


...
    <div>
        <input type="text" id="expando1">
        <label for="expando1">Expandable text field</label>
    </div>
...

Добавьте MDL-классы.


<div class="mdl-textfield mdl-js-textfield mdl-textfield--expandable">
    <label class="mdl-button mdl-js-button mdl-button--icon" for="expando1">
        <i class="material-icons">search</i>
    </label>
    <div class="mdl-textfield__expandable-holder">
        <input class="mdl-textfield__input" type="text" id="expando1">
        <label class="mdl-textfield__label" for="expando1">Expandable text field</label>
    </div>
</div>

Компонент готов к использованию.

Примеры

Текстовые поля для текста и чисел

Input is not a number!

Текстовые поля для текста и чисел с всплывающей надписью

Input is not a number!

Многострочный текст

Разворачивающее поле

Вернуться на общую страницу Material Design Lite

Реклама