10 полезных особенностей HTML5, которыми вы, возможно, не пользуетесь

0
1702
views

Перевод статьи «10 useful HTML5 features, you may not be using».

HTML5 это уже не новинка. Некоторые его фичи мы используем еще с первого релиза (т. е. с января 2008 года). В рамках марафона #100DaysOfCode я заново пересмотрел список отличительных особенностей HTML5. И оказалось, что я все еще не использовал многие функции!

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

https://html5-tips.netlify.app/

Тег details

Тег <details> предоставляет подробности чего-либо по запросу пользователя. Если вам нужно показывать какой-то контент только если пользователь явно этого хочет, используйте этот тег. По умолчанию этот виджет закрыт. При открытии он разворачивается и показывает находящийся в нем контент.

Вместе с тегом <details> используется тег <summary> — для видимого заголовка.

Код

<details>
     <summary>Click Here to get the user details</summary>
         <table>
                <tr>
                    <th>#</th>
                    <th>Name</th>
                    <th>Location</th>
                    <th>Job</th>
                </tr>
                <tr>
                    <td>1</td>
                    <td>Adam</td>
                    <td>Huston</td>
                    <td>UI/UX</td>
                </tr>
          </table>
</details>

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

Поиграть можно здесь.

Совет

Используйте это в GitHub Readme, чтобы показывать подробную информацию только по запросу. Вот пример того, как я спрятал огромный список свойств react-компонентов и при этом оставил возможность для его просмотра. Круто, правда?

Редактируемый контент

Чтобы сделать контент редактируемым, можно добавлять к элементам атрибут contenteditable. Это работает с такими элементами как DIV, P, UL и т. п. Атрибут указывается со значением true или false, например <element contenteditable="true|false">.

Обратите внимание, что когда для элемента не указан атрибут contenteditable, он наследует его от родителя.

Код

<h2> Shoppping List(Content Editable) </h2>
 <ul class="content-editable" contenteditable="true">
     <li> 1. Milk </li>
     <li> 2. Bread </li>
     <li> 3. Honey </li>
</ul>

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

Поиграть можно здесь.

Совет

С помощью этого атрибута можно сделать редактируемыми элементы span или div. При этом вы можете применять к контенту css-стили. Это может быть куда лучшим вариантом, чем работа с полями ввода. Попробуйте!

Map

Тег <map> помогает нам определять карту-изображение. Карта-изображение это любая картинка с одной или большим числом кликабельных зон. Тег <map> используется с тегом <area>, при помощи которого определяются кликабельные зоны. Эти зоны могут иметь форму прямоугольника, круга или многоугольника. Если вы не указываете форму, захватывается все изображение.

Код

<div>
    <img src="circus.jpg" width="500" height="500" alt="Circus" usemap="#circusmap">

    <map name="circusmap">
        <area shape="rect" coords="67,114,207,254" href="elephant.htm">
        <area shape="rect" coords="222,141,318, 256" href="lion.htm">
        <area shape="rect" coords="343,111,455, 267" href="horse.htm">
        <area shape="rect" coords="35,328,143,500" href="clown.htm">
        <area shape="circle" coords="426,409,100" href="clown.htm">
    </map>
 </div>

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

Поиграть можно здесь.

Совет

Карта-изображение имеет свои недостатки, но ими можно пользоваться для визуальных презентаций. Скажем, можно создать фамильное древо и поставить ссылки на фотографии отдельных людей.

Выделение контента

Для выделения любого текста можно использовать тег <mark>.

Код

 <p> Did you know, you can <mark>"Highlight something interesting"</mark> just with an HTML tag? </p>

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

Поиграть можно здесь.

Совет

При помощи CSS можно легко изменить цвет выделения.

mark {
  background-color: green;
  color: #FFFFFF;
}

Атрибут data-*

Атрибуты data-* используются для хранения пользовательских данных на странице или в приложении без визуального представления. Сохраненные данные можно использовать в JavaScript-коде для дальнейшего взаимодействия с пользователем.

Атрибуты data-* состоят из двух частей:

  • имени атрибута, которое не должно содержать заглавных букв и должно иметь как минимум один символ после префикса «data-»,
  • значения атрибута, которое может быть любой строкой.

Код

<h2> Know data attribute </h2>
 <div 
       class="data-attribute" 
       id="data-attr" 
       data-custom-attr="You are just Awesome!"> 
   I have a hidden secret!
  </div>

 <button onclick="reveal()">Reveal</button>

И на JavaScript:

function reveal() {
   let dataDiv = document.getElementById('data-attr');
    let value = dataDiv.dataset['customAttr'];
   document.getElementById('msg').innerHTML = `<mark>${value}</mark>`;
}

Примечание. Для чтения этих атрибутов в JavaScript вы можете использовать getAttribute() с полными именами атрибутов (например, data-custom-attr). Но стандарт определяет более простой способ: с использованием свойства dataset.

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

Поиграть можно здесь.

Совет

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

Тег output

Тег <output> представляет результат вычислений. Обычно этот элемент определяет область, которая будет использоваться для показа текстового результата каких-то вычислений.

Код

<form oninput="x.value=parseInt(a.value) * parseInt(b.value)">
   <input type="number" id="a" value="0">
          * <input type="number" id="b" value="0">
                = <output name="x" for="a b"></output>
</form>

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

Поиграть можно здесь.

Совет

Если вы осуществляете какие-то вычисления на стороне клиента (в JavaScript) и хотите, чтобы результат отображался на странице, используйте тег <output>. Вам не придется выполнять дополнительные действия по получению элемента с использованием getElementById().

Тег datalist

При помощи тега <datalist> задается скрытый список заготовленных опций, из которых пользователь может выбрать нужное при наборе в текстовом поле. Здесь есть функционал автодополнения autocomplete, благодаря которому можно получить только подходящие опции.

Код

<form action="" method="get">
    <label for="fruit">Choose your fruit from the list:</label>
    <input list="fruits" name="fruit" id="fruit">
        <datalist id="fruits">
           <option value="Apple">
           <option value="Orange">
           <option value="Banana">
           <option value="Mango">
           <option value="Avacado">
        </datalist>
     <input type="submit">
 </form>  

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

Поиграть можно здесь.

Совет

Чем это отличается от традиционной связки <select>-<option>? Тег <select> предназначен для выбора одного или большего числа элементов из списка. Чтобы их выбрать, нужно просмотреть весь список. Тег <datalist> более продвинутый, в нем есть поддержка автодополнения.

Range (ползунок)

Range это тип input, при помощи которого можно создавать ползунок для ввода чисел в заданном диапазоне.

Код

<form method="post">
    <input 
         type="range" 
         name="range" 
         min="0" 
         max="100" 
         step="1" 
         value=""
         onchange="changeValue(event)"/>
 </form>
 <div class="range">
      <output id="output" name="result">  </output>
 </div>

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

Поиграть можно здесь.

Тег meter

Этот тег используется для вывода количественных данных в заданном диапазоне.

Код

<label for="home">/home/atapas</label>
<meter id="home" value="4" min="0" max="10">2 out of 10</meter><br>

<label for="root">/root</label>
<meter id="root" value="0.6">60%</meter><br>

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

Поиграть можно здесь.

Совет

Не используйте тег <meter> для отображения прогресса завершенности задачи. В HTML5 для этого есть специальный тег <progress>.

<label for="file">Downloading progress:</label>
<progress id="file" value="32" max="100"> 32% </progress>

Input-ы

Тег <input> нам знаком по использованию таких его видов как text, password и т. п. Но у этого тега есть несколько специфических вариантов использования.

Код

required

Можно пометить поле ввода как обязательное.

<input type="text" id="username1" name="username" required>
autofocus

Элемент автоматически получает фокус (на него помещается курсор).

<input type="text" id="username2" name="username" required autofocus>
Валидация при помощи регулярных выражений

Вы можете задать паттерн для проверки input-а.

<input type="password" 
            name="password" 
            id="password" 
            placeholder="6-20 chars, at least 1 digit, 1 uppercase and one lowercase letter" 
            pattern="^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{6,20}$" autofocus requ
Инструмент выбора цвета
<input type="color" onchange="showColor(event)">
<p id="colorMe">Color Me!</p>

Итоги

Я уверен, что пропустил много других полезных тегов и атрибутов из HTML5. Как насчет того чтобы дополнить список? Предлагайте свои варианты в комментариях!