<?xml version="1.0" encoding="utf-8" ?><rss version="2.0" xmlns:tt="http://teletype.in/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>Alexey Tabula</title><generator>teletype.in</generator><description><![CDATA[Alexey Tabula]]></description><image><url>https://teletype.in/files/9d/4d/9d4da52c-f3eb-4443-9191-02ec334e3403.png</url><title>Alexey Tabula</title><link>https://teletype.in/@webtabula</link></image><link>https://teletype.in/@webtabula?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=webtabula</link><atom:link rel="self" type="application/rss+xml" href="https://teletype.in/rss/webtabula?offset=0"></atom:link><atom:link rel="next" type="application/rss+xml" href="https://teletype.in/rss/webtabula?offset=10"></atom:link><atom:link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></atom:link><pubDate>Sun, 05 Apr 2026 15:16:00 GMT</pubDate><lastBuildDate>Sun, 05 Apr 2026 15:16:00 GMT</lastBuildDate><item><guid isPermaLink="true">https://teletype.in/@webtabula/qM5Q7SGKK</guid><link>https://teletype.in/@webtabula/qM5Q7SGKK?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=webtabula</link><comments>https://teletype.in/@webtabula/qM5Q7SGKK?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=webtabula#comments</comments><dc:creator>webtabula</dc:creator><title>[8 урок] Flexbox CSS</title><pubDate>Mon, 25 May 2020 05:22:09 GMT</pubDate><media:content medium="image" url="https://teletype.in/files/62/22/62222647-aff4-4ca6-a1d9-88c62b34bfc8.png"></media:content><description><![CDATA[<img src="https://teletype.in/files/9e/20/9e20796f-d85f-4d7f-8010-40b3a9a00eda.png"></img>Долгое время единственными надёжными инструментами CSS верстки были такие способы как Float (обтекание) и позиционирование .]]></description><content:encoded><![CDATA[
  <figure class="m_original">
    <img src="https://teletype.in/files/9e/20/9e20796f-d85f-4d7f-8010-40b3a9a00eda.png" width="1280" />
  </figure>
  <h2>Почему Flexbox?</h2>
  <p>Долгое время единственными надёжными инструментами CSS верстки были такие способы как Float (обтекание) и позиционирование .</p>
  <p>С их помощью сложно или невозможно достичь следующих простых требований к макету :</p>
  <ul>
    <li>Вертикального выравнивания блока внутри родителя.</li>
    <li>Оформления всех детей контейнера так, чтобы они распределили между собой доступную ширину/высоту, независимо от того, сколько ширины/высоты доступно.</li>
    <li>Сделать все колонки в макете одинаковой высоты, даже если наполнение в них различно.</li>
  </ul>
  <p>Как вы увидите в последующих разделах, flexbox значительно облегчает работу с макетами. Погружаемся!</p>
  <p></p>
  <h2>Display: flex</h2>
  <p>Для начала нам нужно добавить к блоку с содержимом <code>display:flex;</code></p>
  <figure class="m_original">
    <img src="https://teletype.in/files/48/8a/488a510e-0c44-47e0-ae10-cf943d15c7b7.png" width="300" />
  </figure>
  <figure class="m_original">
    <img src="https://teletype.in/files/d6/fb/d6fbba61-ed30-4096-ad42-98946f02b5f5.png" width="300" />
  </figure>
  <pre>.container { 
  display: flex; 
}</pre>
  <p>Теперь можем поговорить про расположение объектов. </p>
  <p></p>
  <h2>flex-direction</h2>
  <p>Свойство flex-direction помогает нам определить положение объектов в контейнере. </p>
  <pre>.container { 
  flex-direction: row | row-reverse | column | column-reverse; 
}</pre>
  <figure class="m_original">
    <img src="https://teletype.in/files/39/52/3952491d-9836-4db2-8a59-cb1b0b77ea42.png" width="300" />
  </figure>
  <p><code>1. flex-direction: row</code>  - данное свойство задается по стандарту и располагает элементы справа налево, по горизонтали.</p>
  <p><code>2. flex-direction: row-reverse</code> - главное отличие от <code>row</code>, это то, что элементы располагаются в обратном порядке, т.е. слева на право.</p>
  <p><code>3. flex-direction: column</code> - это свойство расположит элементы вертикально, т.е. сверху вниз.</p>
  <p><code>4. flex-direction: column-reverse</code> - это свойство расположит элементы вертикально и в обратном порядке.</p>
  <p></p>
  <h2>flex-wrap</h2>
  <p>По умолчанию все элементы flex будут пытаться поместиться в одну строку. Вы можете изменить это и разрешить элементам переноситься по мере необходимости с помощью этого свойства.</p>
  <pre>.container { 
  flex-wrap: nowrap | wrap | wrap-reverse; 
}</pre>
  <p><code>1. flex-wrap: nowrap</code> - все элементы будут пытаться поместиться в одну строку</p>
  <p><code>2. flex-wrap: wrap</code> - элементы будут переноситься по мере необходимости</p>
  <p><code>3. flex-wrap: wrap-reverse</code> - reverse работает так же как и в предыдущих случаях</p>
  <p></p>
  <h2>flex-flow</h2>
  <p>Это сокращенное обозначение свойств flex-direction и flex-wrap, т.е. это мы используем для экономии места в css коде. </p>
  <pre>.container { 
  flex-flow: column wrap; 
}</pre>
  <p></p>
  <h2>justify-content</h2>
  <p>Cвойство  <strong><code>justify-content</code></strong> определяет, как браузер распределяет пространство между и вокруг элементов контента вдоль <a href="https://developer.mozilla.org/ru/docs/%D0%A1%D0%BB%D0%BE%D0%B2%D0%B0%D1%80%D1%8C/Main_Axis" target="_blank">главной оси</a> flex контейнера, или вдоль строчной оси grid контейнера.</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/80/00/8000f462-ff2d-4569-a070-a1a5b0fa27e9.png" width="348" />
  </figure>
  <pre>.container { 
  justify-content: flex-start | flex-end | center | space-between | space-around | space-evenly | start | end | left | right ... + safe | unsafe; 
}</pre>
  <p><code>1. justify-content: flex-start</code> - элементы располагаются друг за другом и прижимаются к началу контейнера по главной оси.</p>
  <p><code>2. justify-content: flex-end</code> - элементы располагаются друг за другом и прижимаются к концу контейнера по главной оси, в зависимости от её направления (flex-direction).</p>
  <p><code>3. justify-content: center</code> - элементы располагаются друг за другом в центре контейнера по главной оси.</p>
  <p><code>4. justify-content: space-between</code> - Элементы равномерно распределены вдоль главной оси контейнера. Расстояния между каждой парой соседних элементов равны. Первый элемент прижат к началу контейнера по главной оси, а последний - к концу.</p>
  <p><code>5. justify-content: space-around</code> - Элементы равномерно распределены вдоль главной оси контейнера. Расстояния между каждой парой соседних элементов равны. Пустые пространства перед первым элементом и после последнего элемента равны половине расстояния между парами соседних элементов.</p>
  <p><code>6. justify-content: space-evenly</code> - Элементы равномерно распределены вдоль главной оси контейнера. Расстояния между каждой парой соседних элементов равны расстояниям от начала контейнера до первого элемента и от последнего элемента до конца контейнера.</p>
  <p><code>7. justify-content: start</code> - Элементы располагаются друг за другом и прижимаются к началу контейнера по главной оси.</p>
  <p><code>8. justify-content: end</code> - Элементы располагаются друг за другом и прижимаются к концу контейнера по главной оси.</p>
  <p><code>9. justify-content: left</code> - Элементы располагаются друг за другом и прижимаются к левому краю контейнера по главной оси. Если главная ось не горизонтальна, это значение работает как  <code>start</code>.</p>
  <p><code>10. justify-content: right</code> - Элементы располагаются друг за другом и прижимаются к правому краю контейнера по главной оси. Если главная ось не горизонтальна, это значение работает как  <code>start</code>.</p>
  <p></p>
  <h2>align-items</h2>
  <p>свойство <strong><code>align-items</code></strong> выравнивает flex-элементы текущей flex-линии таким же образом, как и <code>justify-content</code>, но в перпендикулярном направлении.</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/cf/12/cf1279fb-ba19-44a4-a793-575f4f3a2348.png" width="355" />
  </figure>
  <pre>.container { 
  align-items: stretch | flex-start | flex-end | center | baseline | first baseline | last baseline | start | end | self-start | self-end + ... safe | unsafe; 
}</pre>
  <p><code>1. align-items: stretch</code> - элементы Flex растягиваются, например, поперечный размер поля элемента совпадает с линией при соблюдении ограничений ширины и высоты.</p>
  <p><code>2. align-items: flex-start</code> - край поперечного начала края гибкого элемента выровнен с краем поперечного начала линии.</p>
  <p><code>3. align-items: flex-end/end/self-end</code> - элементы располагаются в конце поперечной оси.</p>
  <p><code>4. align-items: flex-start/ start/ self-start </code>  - элементы располагаются в начале оси.</p>
  <p><code>5. align-items: center</code> - Внешний отступ полей гибкого элемента центрируется в пределах линии на поперечной оси.</p>
  <p><code>6. align-items: baseline</code> - Все элементы flex выровнены таким образом, что их базовые линии совпадают.</p>
  <p></p>
  <h2>align-content</h2>
  <p>Свойство <strong><code>align-content</code></strong> устанавливает распределение пространства между и вокруг элементами контента вдоль поперечной оси элемента типа <code>flexbox</code> или   <code>grid</code>.</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/a9/c4/a9c43793-7491-4956-b469-1d69ccb4c2b8.png" width="347" />
  </figure>
  <p><code>1. start</code>  - элементы расположены вплотную друг к другу, прижавшись к началу контейнера выравнивания по поперечной оси.</p>
  <p><code>2. end</code>  - элементы расположены вплотную друг к другу, прижавшись к концу контейнера выравнивания по поперечной оси.</p>
  <p><code>3. flex-start</code>  элементы расположены вплотную друг к другу, прижавшись к краю контейнера выравнивания в зависимости от поперечной стороны начала (cross-start) контейнера flex.<br />Это относится только к элементам макета flex. Для элементов, которые не являются потомками flex контейнера, это значение трактуется как <code>start</code>.</p>
  <p><code>4. flex-end</code> - элементы расположены вплотную друг к другу, прижавшись к краю контейнера выравнивания в зависимости от поперечной стороны конца (cross-end) контейнера flex.<br />Это относится только к элементам макета flex. Для элементов, которые не являются потомками flex контейнера, это значение трактуется как <code>end</code>.</p>
  <p><code>5. center</code> - элементы расположены вплотную друг к другу в центре контейнера выравнивания по поперечной оси. </p>
  <p><code>6. normal </code> - элементы расположены в их дефолтной позиции как если бы <code>align-content</code> не было определено.</p>
  <p><code>7. baselinefirst baseline</code><br /><code>last baseline</code></p>
  <figure class="m_original">
    <img src="https://upload.wikimedia.org/wikipedia/commons/thumb/3/39/Typography_Line_Terms.svg/410px-Typography_Line_Terms.svg.png" width="410" />
  </figure>
  <p>Определяет участие в выравнивании первой или последней базовой линии: выравнивает базовую линию выравнивания первого или последнего базового набора блока с соответствующей базовой линией в общем первом или последнем базовом наборе всех блоков в его группе совместного использования базовой линии.<br />Резервное выравнивание для <code>first baseline</code> равно <code>start</code>, для <code>last baseline</code> - <code>end</code>.</p>
  <p><code>8. space-between</code> - элементы равномерно распределены внутри контейнера выравнивания вдоль поперечной оси. Интервал между каждой парой соседних элементов одинаков. Первый элемент находится на одном уровне с начальной кромкой контейнера выравнивания на поперечной оси, а последний элемент находится на одном уровне с конечной кромкой контейнера выравнивания на поперечной оси.</p>
  <p><code>9. space-around</code> - элементы равномерно распределены внутри контейнера выравнивания вдоль поперечной оси. Интервал между каждой парой соседних предметов одинаков. Пустое пространство до первого и после последнего элемента равно половине пространства между каждой парой смежных элементов.</p>
  <p><code>10. space-evenly</code> - элементы равномерно распределены внутри контейнера выравнивания вдоль поперечной оси. Интервал между каждой парой соседних элементов, начальным краем и первым элементом, а также конечным краем и последним элементом абсолютно одинаков.</p>
  <p><code>11. stretch</code>- если объединённый размер элементов вдоль поперечной оси меньше размера контейнера выравнивания, размер любого <code>auto</code>-размерного элемента увеличивается одинаково (не пропорционально), но при этом соблюдаются ограничения, налагаемые <a href="https://developer.mozilla.org/ru/docs/Web/CSS/max-height" target="_blank"><code>max-height</code></a>/<a href="https://developer.mozilla.org/ru/docs/Web/CSS/max-width" target="_blank"><code>max-width</code></a> (или эквивалентной функциональности), так что объединённый размер точно заполняет контейнер выравнивания вдоль поперечной оси.</p>
  <p><code>12. safe</code> - используется вместе с ключевым словом выравнивания. Если выбранное ключевое слово означает, что элемент переполняет контейнер выравнивания, что приводит к потере данных, вместо этого элемент выравнивается, как если бы режим выравнивания был <code>start</code>.</p>
  <p><code>13. unsafe</code> - используется вместе с ключевым словом выравнивания. Независимо от относительных размеров элемента и контейнера выравнивания и от того, может ли произойти переполнение, которое приводит к потере данных, данное значение выравнивания учитывается.</p>
  <p></p>
  <p></p>
  <hr />
  <p>Дополнительные материалы для улучшения знаний по Flexbox:<br />1. <a href="http://www.flexboxdefense.com/" target="_blank">http://www.flexboxdefense.com/</a></p>
  <p>2. <a href="https://flexboxfroggy.com/#ru" target="_blank">https://flexboxfroggy.com/#ru</a></p>
  <p>3.<a href="https://mastery.games/flexboxzombies/" target="_blank">https://mastery.games/flexboxzombies/</a></p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@webtabula/8ZPSrwPn7</guid><link>https://teletype.in/@webtabula/8ZPSrwPn7?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=webtabula</link><comments>https://teletype.in/@webtabula/8ZPSrwPn7?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=webtabula#comments</comments><dc:creator>webtabula</dc:creator><title>[7 урок] Спецификация CSS</title><pubDate>Fri, 22 May 2020 00:59:52 GMT</pubDate><media:content medium="image" url="https://teletype.in/files/67/d3/67d37b2c-e5da-41e9-b1eb-008d49a6a039.png"></media:content><description><![CDATA[<img src="https://teletype.in/files/be/2e/be2e23a0-9217-4df9-bec0-5e0d8be98f4c.png"></img>Специфичность - это способ, с помощью которого браузеры определяют, какие значения свойств CSS наиболее соответствуют элементу и, следовательно, будут применены. Специфичность основана на правилах соответствия, состоящих из селекторов CSS различных типов.]]></description><content:encoded><![CDATA[
  <figure class="m_original">
    <img src="https://teletype.in/files/be/2e/be2e23a0-9217-4df9-bec0-5e0d8be98f4c.png" width="1280" />
  </figure>
  <p><strong>Специфичность </strong>- это способ, с помощью которого браузеры определяют, какие значения свойств CSS наиболее соответствуют элементу и, следовательно, будут применены. Специфичность основана на правилах соответствия, состоящих из <a href="https://developer.mozilla.org/ru/docs/Web/CSS/Reference#Selectors" target="_blank">селекторов CSS</a> различных типов.</p>
  <p></p>
  <h2>Исключение из правил - !important </h2>
  <p>Когда при объявлении стиля используется модификатор <code>!important</code>, это объявление получает наивысший приоритет среди всех прочих объявлений. Хотя технически модификатор <code>!important</code> не имеет со специфичностью ничего общего, он непосредственно на неё влияет. Поскольку <code>!important</code> усложняет отладку, нарушая естественное <a href="https://developer.mozilla.org/ru/docs/Web/CSS/Cascade" target="_blank">каскадирование</a> ваших стилей, он <strong>не приветствуется</strong> и следует избегать его использования. Если к элементу применимы два взаимоисключающих стиля с модификатором <code>!important</code>, то применен будет стиль с большей специфичностью.</p>
  <p><strong>Несколько практических советов:</strong></p>
  <ul>
    <li><strong>Всегда пытайтесь использовать</strong> специфичность, а <code>!important</code> используйте только в крайних случаях</li>
    <li><strong>Используйте</strong> <code>!important</code> <strong>только</strong> в страничных стилях, которые переопределяют стили сайта или внешние стили (стили библиотек, таких как Bootstrap или normalize.css)</li>
    <li><strong>Никогда не используйте</strong> <code>!important</code>, если вы пишете плагин или мэшап.</li>
    <li><strong>Никогда не используйте</strong> <code>!important</code> в общем CSS сайта.</li>
  </ul>
  <p><strong>Вместо <code>!important</code> можно:</strong></p>
  <ol>
    <li>Лучше использовать каскадные свойства CSS</li>
    <li>Использовать более специфичные правила. Чтобы сделать правило более специфичным и повысить его приоритет, укажите один элемент или несколько перед нужным вам элементом:</li>
  </ol>
  <figure class="m_original">
    <img src="https://teletype.in/files/57/51/5751fecc-e571-4582-ac84-58defef7ac9b.png" width="635" />
  </figure>
  <p>Вне зависимости от порядка следования правил, текст всегда будет зелёным, поскольку у этого правила наибольшая специфичность (при этом, правило для голубого цвета имеет преимущество перед правилом для красного, несмотря на порядок следования).</p>
  <p><strong>Вам придется использовать <code>!important</code> если:</strong></p>
  <p>А) Первый сценарий:</p>
  <ol>
    <li>У вас есть общий файл стилей, устанавливающий правила для внешнего вида сайта.</li>
    <li>Вы пользуетесь (или кто-то другой пользуется) весьма сомнительным средством - объявлением стилей непосредственно в элементах</li>
  </ol>
  <p>В таком случае вам придется объявить некоторые стили в вашем общем файле CSS как <code>!important</code>, переопределяя, таким образом, стили, установленные в самих элементах.</p>
  <p>Пример из практики: Некоторые плохо написанные <strong>плагины jQuery</strong>, использующие присваивание стилей самим элементам.</p>
  <p>Б) Еще сценарий:</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/43/d8/43d83a6f-754a-44cb-978d-cae895b836a5.png" width="1017" />
  </figure>
  <p>Как сделать цвет текста в абзацах <code>awesome</code> красным всегда, даже если они расположены внутри <code>#someElement</code>? Без <code>!important</code> у первого правила специфичность больше и оно имеет преимущество перед вторым.</p>
  <p><strong>Как преодолеть !important</strong></p>
  <p>A) Просто добавьте еще одно правило с модификатором <code>!important</code>, у которого селектор имеет большую специфичность (благодаря добавлению типа элемента (тэга), идентификатора (атрибута id) или класса к селектору).</p>
  <p>Пример большей специфичности:</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/28/40/284035f0-c2c6-47cc-8254-391fbad5a453.png" width="1012" />
  </figure>
  <p>Б) Или добавьте правило с модификатором <code>!important</code> и таким же селектором, но расположенное в файле после существующего (при прочих равных выигрывает последнее объявленное правило):</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/20/03/20033487-843c-469c-972f-ab20a5b6dff1.png" width="1020" />
  </figure>
  <p></p>
  <h2>Не исключение - :not()</h2>
  <p>Отрицающий псевдокласс <code>:not</code> <em>не учитывается</em> как псевдокласс при расчете специфичности. Однако селекторы, расположенные внутри <code>:not</code>, при подсчете количества <a href="https://developer.mozilla.org/ru/docs/Web/CSS/Specificity#selector-type" target="_blank">по типам селекторов</a> рассматриваются как обычные селекторы и учитываются.</p>
  <p>Следующий фрагмент CSS ...</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/75/05/750551b7-d9a5-4947-81aa-a9eca6122c11.png" width="1017" />
  </figure>
  <p>... примененный к такому HTML ...</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/08/1e/081e6b4e-1700-4cd8-abd9-a57979df5305.png" width="1018" />
  </figure>
  <p>... отобразится на экране так:</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/f3/fc/f3fc7214-1250-482d-ba3d-5e7f3ebd67d2.png" width="726" />
  </figure>
  <p></p>
  <h2>Специфичность основана на форме</h2>
  <p>Специфичность опирается на форму селектора. В следующем примере, при определении специфичности селектора, селектор <code>*[id=&quot;foo&quot;]</code> считается селектором атрибута, даже при том, что ищет идентификатор.</p>
  <p>Эти объявления стилей ...</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/bc/21/bc213c82-beb8-4468-aac9-ce74ca5aefdd.png" width="1018" />
  </figure>
  <p>... примененные к нижеследующей разметке ...</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/9e/d2/9ed26de2-ca29-4f83-a771-e3c0c644ceba.png" width="1017" />
  </figure>
  <p>... в результате выглядят так:</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/fd/02/fd021ae0-394d-4683-9d03-ee52884009bc.png" width="1071" />
  </figure>
  <p>Потому что оба правила соответствуют одному и тому же элементу, но селектор идентификатора имеет большую специфичность.</p>
  <p></p>
  <h2>Независимость от расположения </h2>
  <p>Взаимное расположение элементов, указанных в селекторе не влияет на специфичность правила. Следующие объявления стилей ...</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/05/83/05837faf-33bf-4d9c-849b-8443690ca49d.png" width="1017" />
  </figure>
  <p>... в сочетании со следующим HTML ...</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/7c/86/7c8647cc-612d-4a15-86e6-766a24db954c.png" width="1016" />
  </figure>
  <p>... отобразится как:</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/6e/58/6e58ff5f-3cef-4daa-b582-786e1c13f5fc.png" width="586" />
  </figure>
  <p>Потому что, хотя оба объявления имеют одинаковое количество <a href="https://developer.mozilla.org/ru/docs/Web/CSS/Specificity#selector-type" target="_blank">типов селекторов</a>, но селектор <code>html h1</code> объявлен последним.</p>
  <p></p>
  <h2>Непосредственно соответствующие элементы и унаследованные стили</h2>
  <p>Стили непосредственно соответствующих элементов всегда предпочитаются унаследованным стилям, независимо от специфичности унаследованного правила. Этот CSS ...</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/79/14/79140a5f-559d-456b-8ac8-3ab8e1bdebc4.png" width="1020" />
  </figure>
  <p>... с таким HTML ...</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/45/87/4587b579-cb16-4359-81b2-dbeb77b36ca6.png" width="1017" />
  </figure>
  <p>... тоже отобразится как:</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/6e/58/6e58ff5f-3cef-4daa-b582-786e1c13f5fc.png" width="586" />
  </figure>
  <p>Потому что селектор <code>h1</code> непосредственно соответствует элементу, а стиль, задающий зеленый цвет, всего лишь унаследован от родителя.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@webtabula/lhPhbG9Oj</guid><link>https://teletype.in/@webtabula/lhPhbG9Oj?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=webtabula</link><comments>https://teletype.in/@webtabula/lhPhbG9Oj?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=webtabula#comments</comments><dc:creator>webtabula</dc:creator><title>[6 урок] Селекторы CSS</title><pubDate>Wed, 20 May 2020 06:56:18 GMT</pubDate><media:content medium="image" url="https://teletype.in/files/ae/48/ae48e562-de76-4a2b-b81c-0006d52b4a2b.png"></media:content><description><![CDATA[<img src="https://teletype.in/files/de/86/de8609a6-58b6-47bd-bc8f-3ee848f799a6.png"></img>В CSS - селекторы используются для стилизации HTML элементов на веб-странице. Существует широкий выбор CSS-селекторов, позволяющий максимально точно отбирать элементы для стилизации. В этой статье мы в мельчайших подробностях рассмотрим разные их типы и увидим, как они работают.]]></description><content:encoded><![CDATA[
  <figure class="m_original">
    <img src="https://teletype.in/files/de/86/de8609a6-58b6-47bd-bc8f-3ee848f799a6.png" width="1280" />
  </figure>
  <p>В CSS - селекторы используются для стилизации HTML элементов на веб-странице. Существует широкий выбор CSS-селекторов, позволяющий максимально точно отбирать элементы для стилизации. В этой статье мы в мельчайших подробностях рассмотрим разные их типы и увидим, как они работают.</p>
  <p></p>
  <h2>Что такое селекторы?</h2>
  <p>Вы уже встерчались с селекторами. Это выражения, которые говорят браузеру, к какому элементу HTML нужно применить те или иные свойства CSS, определённые внутри блока объявления стиля.</p>
  <p></p>
  <figure class="m_original">
    <img src="https://mdn.mozillademos.org/files/16550/selector.png" width="471" />
  </figure>
  <p>Ранее Вы встречали несколько разных селекторов и узнали, что существуют селекторы, которые по-разному относятся к документу, — например используя элемент <code>h1</code> или класс <code>.special</code>.</p>
  <p>В CSS селекторы определяются в спецификации CSS-селекторов; как и другие части CSS, нужно поддерживать их работу в браузерах. Большинство селекторов, которые Вы встретите, определены в <a href="https://www.w3.org/TR/selectors-3/" target="_blank">Спецификации селекторов 3 уровня</a>, где Вы сможете найти всю информацию о поддержке селекторов в браузерах.</p>
  <p></p>
  <h2>Несколько селекторов</h2>
  <p>Несколько селекторов, использующих одни и те же таблицы стилей, можно объединить в <em>лист селекторов</em>: правило будет добавлено к каждому селектору. К примеру, у меня есть одинаковые правила для заголовка <code>h1</code> и класса <code>.special</code>; я могу написать их так:</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/81/32/8132551d-393f-45a6-b5e2-39da1a91a300.png" width="1271" />
  </figure>
  <p>А могу написать короче — просто отделив селекторы запятыми:</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/45/ac/45ac1355-15b2-4c9c-9bf0-9e1b1cd6820a.png" width="1272" />
  </figure>
  <p>Пробел можно вставлять до или после запятой. Ещё удобнее писать каждый селектор с новой строки:</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/13/f8/13f8afe7-10bc-4a5e-8b6f-888438d60b99.png" width="1271" />
  </figure>
  <p>В упражнении ниже объедините два селектора в одном правиле. Результат должен остаться таким же.</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/9d/2a/9d2ad564-b2ae-41a8-a0af-5644d74d3bda.png" width="773" />
  </figure>
  <figure class="m_original">
    <img src="https://teletype.in/files/fd/4f/fd4faaab-9a1d-4a5b-8c3f-c50bca94ca81.png" width="773" />
  </figure>
  <p>При объединении селекторов таким образом, при условии если хоть один селектор будет недействительным, всё правило будет пропущено.</p>
  <p>В примере ниже правило для селектора класса не будет работать, в то время как <code>h1</code> будет стилизован.</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/8d/3b/8d3bc187-bfbe-4f0a-b795-fe6c24ecdbc9.png" width="1157" />
  </figure>
  <p>Но если мы объединим селекторы, правило не применится ни к <code>h1</code>, ни к классу: оно считается недействительным.</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/e6/19/e6199a4f-7862-458d-8d93-0a9cce116cc5.png" width="1157" />
  </figure>
  <p></p>
  <h2>Типы селекторов</h2>
  <p>Понимание того, какой именно селектор Вам нужен, очень помогает подобрать подходящий элемент. Сейчас мы разберём разные виду селекторов.</p>
  <h3>Селекторы тегов, классов и идентификаторов</h3>
  <p>К этой группе относятся селекторы HTML-элементов, таких как <code>&lt;h1&gt;</code>.</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/0a/be/0abed0e8-4445-4361-82b4-5b18125df770.png" width="1157" />
  </figure>
  <p>К группе относятся и селекторы классов:</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/45/2d/452dcdaf-d9b2-433c-81bd-eb9ee2a1fc9c.png" width="1157" />
  </figure>
  <p>или селекторы идентификаторов (ID):</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/2d/fd/2dfd4c04-8518-4ef2-88aa-2f7d1ba9d8f9.png" width="1158" />
  </figure>
  <h3>Селекторы атрибутов</h3>
  <p>Эта группа селекторов позволяет выбирать селекторы, основываясь на <em>наличии </em>у них конкретного атрибута элемента:</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/5b/34/5b3422bb-1cfd-4cf9-8c3f-527eecf13f41.png" width="1156" />
  </figure>
  <p>или основываясь на <em>значении </em>атрибута:</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/36/1f/361f21fc-7ec0-439c-8e82-658f6eb4b86a.png" width="1156" />
  </figure>
  <p></p>
  <h3>Псевдоклассы, псевдоэлементы</h3>
  <p>К этой группе относятся псевдоклассы, которые стилизуют определённое состояние элемента. Псевдокласс <code>:hover</code>, например, применяет правило, только если на элемент наведён курсор мыши</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/07/ee/07ee7de6-7812-478b-98c1-1187f7738f71.png" width="1156" />
  </figure>
  <p>К группе ещё относятся псевдоэлементы, которые выбирают определённую часть элемента (вместо целого элемента). Например, <code>::first-line</code> всегда выбирает первую строку внутри элемента (абзаца <code>&lt;p&gt;</code> в нашем случае), действуя, как если бы тег <code>&lt;span&gt;</code> оборачивал первую строку, а затем был стилизован.</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/97/5e/975e7f96-09ab-48b9-a035-b39744d4fb9f.png" width="1158" />
  </figure>
  <p></p>
  <h3>Комбинаторы</h3>
  <p>И последняя группа селекторов: она позволяет объединять селекторы, чтобы было легче находить конкретные элементы внутри документа. В следующем примере мы отыскали дочерний элемент <code>&lt;article&gt;</code> с помощью комбинатора дочерних элементов (<code>&gt;</code>):</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/f5/b8/f5b86bbc-a6c8-4a0d-b684-6335557e7a9e.png" width="1154" />
  </figure>
  <p></p>
  <p></p>
  <h2>Все CSS-селекторы</h2>
  <p><strong>Селектор </strong>определяет, к какому элементу применять то или иное CSS-правило.</p>
  <p>Обратите внимание - не существует селекторов, которые бы позволили выбрать родителя (содержащий контейнер) или соседа родителя или потомков соседа родителя.</p>
  <p></p>
  <h3>Базовые селекторы</h3>
  <p><strong>Универсальный селектор</strong></p>
  <p>Звездочка (*) - универсальный селектор для CSS. Соответствует любому тегу. Убирая звездочки с простых селекторов имеет тот же эффект. Например, <em>* .warning </em>и <em>.warning </em>считаются равными.</p>
  <p>В CSS 3, звездочка (<code>*</code>) может использоваться в комбинации с пространством имён</p>
  <ul>
    <li><code>ns|*</code> - вхождения всех элементов в пространстве имён ns</li>
    <li><code>*|*</code> - находит все элементы</li>
    <li><code>|*</code> - ищет все элементы без объявленного пространства имён</li>
  </ul>
  <p><em>Пример</em></p>
  <figure class="m_original">
    <img src="https://teletype.in/files/f7/fe/f7fed492-425f-4938-8aff-166be0fc972d.png" width="1270" />
  </figure>
  <figure class="m_original">
    <img src="https://teletype.in/files/58/02/5802da42-9996-416f-9866-c423311f1030.png" width="843" />
  </figure>
  <p></p>
  <p><strong>Селекторы по типу элемента</strong></p>
  <p>CSS селекторы по типу выбирают элементы по имени узла. Используются отдельно, поэтому, селектор типа для конкретного имени тега выбирает все элементы этого типа, то есть с этим именем узла в документе.</p>
  <p><em>Синтаксис</em></p>
  <figure class="m_original">
    <img src="https://teletype.in/files/d2/96/d2962b10-5323-46a6-91f5-67846799718f.png" width="1272" />
  </figure>
  <p><em>Пример</em></p>
  <figure class="m_original">
    <img src="https://teletype.in/files/5c/da/5cda7a6f-4353-4890-89fc-07f338a0b368.png" width="1270" />
  </figure>
  <figure class="m_original">
    <img src="https://teletype.in/files/aa/3e/aa3ea318-d1df-464c-9918-3c5563f8f4cf.png" width="1270" />
  </figure>
  <figure class="m_original">
    <img src="https://teletype.in/files/0c/c5/0cc5c4fc-1c52-4767-b56a-4c6f521dd281.png" width="844" />
  </figure>
  <p></p>
  <p><strong>Селекторы по классу</strong></p>
  <p>В HTML документе, селекторы по CSS классу находят элементы с нужным классом. Атрибут класса определяется как разделенный пробелами список элементов, и один из этих пунктов должен точно соответствовать имени класса, приведенному в селекторе.</p>
  <p><em>Синтаксис</em></p>
  <figure class="m_original">
    <img src="https://teletype.in/files/1b/ef/1bef13dc-b7c9-4dbe-af60-961d401df8de.png" width="1272" />
  </figure>
  <p><em>Пример</em></p>
  <figure class="m_original">
    <img src="https://teletype.in/files/da/45/da451517-2898-4c09-81d6-7eaa09b42fbd.png" width="1273" />
  </figure>
  <figure class="m_original">
    <img src="https://teletype.in/files/5a/b9/5ab91db0-b0e3-424e-bb8d-d3d648c53d15.png" width="1272" />
  </figure>
  <figure class="m_original">
    <img src="https://teletype.in/files/a2/3b/a23b1575-6162-4a01-85da-f4165e9b0fde.png" width="845" />
  </figure>
  <p></p>
  <p><strong>Селекторы по идентификатору</strong></p>
  <p>В HTML-документах CSS-селекторы по ID производят выборку всех элементов по ID, полностью совпадающих с селектором.</p>
  <p><em>Синтаксис</em></p>
  <figure class="m_original">
    <img src="https://teletype.in/files/04/34/04341539-bc5c-433e-8f43-c5dd4f23c9c3.png" width="1275" />
  </figure>
  <p><em>Пример</em></p>
  <figure class="m_original">
    <img src="https://teletype.in/files/6e/1c/6e1ca38f-41cb-49c1-a43b-0abd6c96a9e7.png" width="1273" />
  </figure>
  <figure class="m_original">
    <img src="https://teletype.in/files/5c/1c/5c1c6583-1c98-4a53-b4d9-e8dd6e1d7ba1.png" width="843" />
  </figure>
  <p></p>
  <p><strong>Селекторы по атрибуту</strong></p>
  <p>Селекторы атрибутов отбирают элементы по наличию атрибута или его значению.</p>
  <p><code>1. [<em>attr</em>]</code> - Обозначает элемент с атрибутом по имени attr.</p>
  <p><code>2. [<em>attr</em>=<em>value</em>]</code> - Обозначает элемент с именем атрибута attr и значением в точности сопадающим с value.</p>
  <p><code>3. [<em>attr</em>~=<em>value</em>]</code> - Обозначает элемент с именем атрибута attr значением которого является набор слов разделенных пробелами, одно из которых в точности равно value</p>
  <p><code>4. [<em>attr</em>|=<em>value</em>]</code> - Обозначает элемент с именем атрибута attr. Его значение при этом может быть или в точности равно &quot;value&quot; или может начинаться с &quot;value&quot; со сразу же следующим &quot;-&quot; (U+002D). Это может быть использовано когда язык описывается с подкодом.</p>
  <p><code>5. [<em>attr</em>^=<em>value</em>]</code> - Обозначает элемент с именем атрибута attr значение которого начинается с &quot;value&quot;</p>
  <p><code>6. [<em>attr</em>$=<em>value</em>]</code> - Обозначает элемент с именем атрибута attr чье значение заканчивается на &quot;value&quot;</p>
  <p><code>7. [<em>attr</em>*=<em>value</em>]</code> - Обозначает элемент с именем атрибута attr чье значение содержит по крайней мере одно вхождение строки &quot;value&quot; как подстроки.</p>
  <p><em>Пример</em></p>
  <figure class="m_original">
    <img src="https://teletype.in/files/f7/47/f747fb31-2c63-45be-a750-53cf91948120.png" width="1384" />
  </figure>
  <figure class="m_original">
    <img src="https://teletype.in/files/b6/84/b6840d91-f2cb-4fbf-8d3b-68c26cdb79d9.png" width="1158" />
  </figure>
  <figure class="m_original">
    <img src="https://teletype.in/files/a4/b9/a4b98963-eb78-47c3-96f9-f915b42a3bf7.png" width="843" />
  </figure>
  <p></p>
  <h3>Комбинаторы</h3>
  <p><strong>Комбинатор потомков</strong></p>
  <p>Комбинатор <code> ␣</code> (пробел) представляет собой 2 или более селекторов, найдет элементы соответвующие обоим селекторам. Селекторы по потомкам похожи на селекторы дочерних элементов, но они не учитывают вложенность элементов и пременяют свои свойства ко всем элемнтам данного типа, находящимся внутри родительского элемента, независимо от глубины вложенности.</p>
  <p><em>Синтаксис</em></p>
  <figure class="m_original">
    <img src="https://teletype.in/files/4b/26/4b262675-1ad4-44a9-bfe3-99eaf3c5f534.png" width="1271" />
  </figure>
  <p><em>Пример</em></p>
  <figure class="m_original">
    <img src="https://teletype.in/files/4d/df/4ddf65e9-2b00-43d6-943c-d2382c724500.png" width="1273" />
  </figure>
  <figure class="m_original">
    <img src="https://teletype.in/files/97/5d/975dfcb8-f23d-4feb-981c-f2c96226a9c3.png" width="843" />
  </figure>
  <p></p>
  <p><strong>Дочерние селекторы</strong></p>
  <p><code>Комбинатор &gt;</code> разделяет 2 селектора, находит элементы заданные вторым селектором, являющие <strong>прямыми </strong>потомками для элементов отобранных первым селектором. Напротив, два селектора в селекторе потомков находят элементы не обязательно являющиеся прямыми потомками, т.е. несмотря на количество &quot;прыжков&quot; до них в DOM.</p>
  <p><em>Синтаксис</em></p>
  <figure class="m_original">
    <img src="https://teletype.in/files/7c/30/7c308818-057a-40a9-b650-b430bb3835d5.png" width="1273" />
  </figure>
  <p><em>Пример</em></p>
  <figure class="m_original">
    <img src="https://teletype.in/files/8d/fd/8dfd6ec3-211c-4ac5-b27d-6a476c95fcb8.png" width="1273" />
  </figure>
  <figure class="m_original">
    <img src="https://teletype.in/files/b1/a3/b1a37177-8f7a-4a37-ac66-a70224fe5567.png" width="844" />
  </figure>
  <p></p>
  <p><strong>Комбинатор всех соседних элементов</strong></p>
  <p>Общий комбинатор смежных селекторов <code>(~)</code> разделяет два селектора и находит второй элемент только если ему предшествует первый, и они оба имеют общего родителя. Свойства будут применены ко всем элементам, указанным в правой части, следующим за элементом, указанным в левой части.</p>
  <p><em>Синтаксис</em></p>
  <figure class="m_original">
    <img src="https://teletype.in/files/00/0a/000a6a5d-05f0-4a43-86e7-6ffda91a0da2.png" width="1270" />
  </figure>
  <p><em>Пример</em></p>
  <figure class="m_original">
    <img src="https://teletype.in/files/75/c8/75c82232-94e3-40db-9e97-9289af1fa8ff.png" width="1269" />
  </figure>
  <figure class="m_original">
    <img src="https://teletype.in/files/4c/e8/4ce802ae-dcb8-46f7-ab68-a8076601e331.png" width="844" />
  </figure>
  <p></p>
  <p><strong>Комбинатор следующего соседнего элемента</strong></p>
  <p>Указывает на смежный или следующий селектор. Обеспечивает выбор только элемента расположенного непосредственно за определенным в первой части элементом.</p>
  <p><em>Синтаксис</em></p>
  <figure class="m_original">
    <img src="https://teletype.in/files/af/2b/af2ba6cd-40d7-4f2b-a985-a76aa37af49b.png" width="1272" />
  </figure>
  <p><em>Пример</em></p>
  <figure class="m_original">
    <img src="https://teletype.in/files/4b/c7/4bc7466b-b153-41b7-bae7-5a10ae227716.png" width="1271" />
  </figure>
  <figure class="m_original">
    <img src="https://teletype.in/files/7c/3f/7c3fb104-c39f-44bf-b01c-28750333e2a1.png" width="843" />
  </figure>
  <p></p>
  <h3>Псевдо</h3>
  <p><strong>Псевдоклассы</strong></p>
  <p><strong>Псевдокласс </strong>в CSS — это ключевое слово, добавленное к селектору, которое определяет его особое состояние. Например, <a href="https://developer.mozilla.org/ru/docs/Web/CSS/:hover" target="_blank"><code>:hover</code></a> может быть использован для изменения цвета кнопки при наведении курсора на неё.</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/64/86/6486a7fc-a4a7-40af-b21c-c09704689f9a.png" width="1273" />
  </figure>
  <p>Псевдоклассы дают возможность стилизовать элемент на основе не только отношений в DOM-дереве, но и основываясь на внешних факторах, таких как история посещений (например, <a href="https://developer.mozilla.org/ru/docs/Web/CSS/:visited" target="_blank"><code>:visited</code></a>), состояние содержимого (вроде  <a href="https://developer.mozilla.org/ru/docs/Web/CSS/:checked" target="_blank"><code>:checked</code></a> у некоторых элементов формы) или позиции курсора мыши (например,  <a href="https://developer.mozilla.org/ru/docs/Web/CSS/:hover" target="_blank"><code>:hover</code></a> определяет, находится ли курсор мыши над элементом).</p>
  <p><em>Синтаксис</em></p>
  <figure class="m_original">
    <img src="https://teletype.in/files/c1/49/c1490645-8a72-476f-84c8-4027ee00bc88.png" width="1273" />
  </figure>
  <p></p>
  <p><strong>Псевдоэлементы</strong></p>
  <p><strong>Псевдоэлемент</strong> в CSS — это ключевое слово, добавляемое к селектору, которое позволяет стилизовать определённую часть выбранного элемента. Например, псевдоэлемент <a href="https://developer.mozilla.org/ru/docs/Web/CSS/::first-line" target="_blank"><code>::first-line</code></a> может быть использован для изменения шрифта первой строки абзаца.</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/bc/c5/bcc5f3cc-ed67-49d1-92ba-67ae6b874c2a.png" width="1271" />
  </figure>
  <p><em>Синтаксис</em></p>
  <figure class="m_original">
    <img src="https://teletype.in/files/a6/99/a6996ad2-61cf-470c-9497-fc93433deddc.png" width="1274" />
  </figure>
  <p>В селекторе можно использовать только один псевдоэлемент. Он должен находиться после простых селекторов в выражении.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@webtabula/i-r0PHh_m</guid><link>https://teletype.in/@webtabula/i-r0PHh_m?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=webtabula</link><comments>https://teletype.in/@webtabula/i-r0PHh_m?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=webtabula#comments</comments><dc:creator>webtabula</dc:creator><title>[5 урок] Основы CSS</title><pubDate>Fri, 15 May 2020 16:58:53 GMT</pubDate><media:content medium="image" url="https://teletype.in/files/22/44/22440bb4-9bba-4a3a-bc5a-c6bf7497dbbe.png"></media:content><description><![CDATA[<img src="https://teletype.in/files/9b/e3/9be3481f-4966-46dc-8514-c514291f078e.png"></img>CSS (Cascading Style Sheets) — это код, который вы используете для стилизации вашей веб-страницы. ]]></description><content:encoded><![CDATA[
  <figure class="m_custom">
    <img src="https://teletype.in/files/9b/e3/9be3481f-4966-46dc-8514-c514291f078e.png" width="1280" />
  </figure>
  <p>CSS (Cascading Style Sheets) — это код, который вы используете для стилизации вашей веб-страницы. </p>
  <h2>Что такое CSS ?</h2>
  <p>Как и HTML, CSS на самом деле не является языком программирования. Это не язык разметки - это язык таблицы стилей. Это означает, что он позволяет применять стили выборочно к элементам в документах HTML. Например, чтобы выбрать все элементы абзаца на HTML странице и изменить текст внутри них с черного на красный, вы должны написать этот CSS:</p>
  <figure class="m_custom">
    <img src="https://teletype.in/files/4a/2f/4a2fb5bb-80cf-4727-999e-0beac717f72d.png" width="1272" />
  </figure>
  <p>Чтобы подключить наш CSS, Откройте ваш файл <code>index.html</code> и вставьте следующую строку куда-нибудь в шапку, между <code>&lt;head&gt;</code> и <code>&lt;/head&gt;</code> тегами:</p>
  <figure class="m_custom">
    <img src="https://teletype.in/files/58/0e/580ea02b-ccf7-4e84-b6b2-d1bff9ad6695.png" width="794" />
  </figure>
  <p></p>
  <h2>Анатомия CSS</h2>
  <figure class="m_custom">
    <img src="https://mdn.mozillademos.org/files/9461/css-declaration-small.png" width="850" />
  </figure>
  <p>Вся структура называется <strong>набором правил</strong> (но зачастую для краткости &quot;правило&quot; ). Отметим также имена отдельных частей:</p>
  <p><strong>Селектор (Selector) - </strong>имя HTML элемента в начале набора правил. Он выбирает элемент(ы) для применения стиля (в данном случае, элементы <code>p</code> ). Для стилизации другого элемента, просто измените селектор.</p>
  <p><strong>Объявление (Declaration)</strong> - единственное правило, например <code>color: red;</code> указывает, какие из <strong>свойств</strong> элемента вы хотите стилизовать. </p>
  <p><strong>Свойства (Properties) - </strong>Способы, которыми вы можете стилизовать определенный HTML элемент (в данном случае, <code>color</code> является свойством для элементов <code>&lt;p&gt;</code> ). В CSS вы выбираете, какие свойства вы хотите затронуть в вашем правиле.</p>
  <p><strong>Значение свойства (Property value)</strong> - справа от свойства, после двоеточия, у нас есть <strong>значение свойства</strong>, который выбирает одно из множества возможных значений для данного свойства (существует множество значений <code>color</code>, помимо <code>red</code> ).</p>
  <p>Обратите внимание на важные части синтаксиса:</p>
  <ul>
    <li>Каждый набор правил (кроме селектора) должен быть обернут в фигурные скобки (<code>{}</code>).</li>
    <li>В каждом объявлении необходимо использовать двоеточие (<code>:</code>), чтобы отделить свойство от его значений.</li>
    <li>В каждом наборе правил вы должны использовать точку с запятой (<code>;</code>), чтобы отделить каждое объявление от следующего.</li>
  </ul>
  <p>Таким образом, чтобы изменить несколько значений свойств сразу, вам просто нужно написать их, разделяя точкой с запятой, например так:</p>
  <figure class="m_custom">
    <img src="https://teletype.in/files/75/16/75169737-fa97-4209-9313-b369aa969f30.png" width="1272" />
  </figure>
  <h3>Выбор нескольких элементов</h3>
  <p>Вы также можете выбрать несколько элементов разного типа и применить единый набор правил для всех из них. Добавьте несколько селекторов, разделенных запятыми. Например:</p>
  <figure class="m_custom">
    <img src="https://teletype.in/files/d7/3a/d73a12b8-803e-43fa-bd99-1f45b00e3203.png" width="1270" />
  </figure>
  <p></p>
  <h3>Разные типы селекторов</h3>
  <figure class="m_custom">
    <img src="https://teletype.in/files/46/e4/46e42077-e672-4cd6-b615-9c6ace887084.png" width="1265" />
  </figure>
  <p></p>
  <h2>Шрифты и текст</h2>
  <p>Теперь, когда мы изучили некоторые основы CSS, давайте добавим ещё несколько правил и информацию в наш файл <code>style.css</code>, чтобы наш пример хорошо выглядел. Прежде всего, давайте сделаем, чтобы наши шрифты и текст выглядели немного лучше.</p>
  <p>1. Прежде всего, вернитесь и найдите <a href="https://developer.mozilla.org/ru/docs/Learn/Getting_started_with_the_web/What_will_your_website_look_like" target="_blank">вывод из Google Fonts</a>, который вы уже где-то сохранили. Добавьте элемент <a href="https://developer.mozilla.org/ru/docs/Web/HTML/Element/link" target="_blank"><code>&lt;link&gt;</code></a> где-нибудь внутри шапки вашего <code>index.html</code> (снова, в любом месте между тегами <code>&lt;head&gt;</code> и <code>&lt;/head&gt;</code>). Это будет выглядеть примерно так:</p>
  <figure class="m_custom">
    <img src="https://teletype.in/files/9b/c9/9bc9bc93-de65-42d4-bc13-3f5328b42363.png" width="1137" />
  </figure>
  <p>Этот код связывает вашу страницу с таблицой стилями, которая загружает семейство шрифтов Open Sans вместе с вашей страницой и позволяет вам применять их к вашим HTML элементам используя свою собственную таблицу стилей.</p>
  <p>2. Затем, удалите существующее правило в вашем <code>style.css</code> файле. Это был хороший тест, но красный текст, на самом деле, не очень хорошо выглядит.</p>
  <p>3. Добавьте следующие строки в нужное место, заменив строку placeholder актуальной <code>font-family</code> строкой, которую вы получили из Google Fonts. (<code>font-family</code> просто означает, какой шрифт(ы) вы хотите использовать для вашего текста). Это правило устанавливает глобальный базовый шрифт и размер шрифта для всей страницы (поскольку <code>&lt;html&gt;</code> является родительским элементом для всей страницы, и все элементы внутри него наследуют такой же <code>font-size</code> и <code>font-family</code>):</p>
  <figure class="m_custom">
    <img src="https://teletype.in/files/32/df/32df8f26-98de-49da-8315-77e18ae70579.png" width="1056" />
  </figure>
  <p></p>
  <h2>Блоки</h2>
  <p>Одна вещь, которую вы заметите в написании CSS, заключается в том, что многое из этого касается блоков - настройка их размера, цвета, положения и т.д. Большинство HTML элементов на странице можно рассматривать как блоки, расположенные друг над другом.</p>
  <p></p>
  <figure class="m_custom">
    <img src="https://mdn.mozillademos.org/files/9441/boxes.jpg" width="640" />
  </figure>
  <p>Не удивительно, макет CSS основан, главным образом, на <em>блочной модели (box model)</em>. Каждый из блоков, занимающий пространство на вашей странице имеет такие свойства, как:</p>
  <ul>
    <li><code>padding</code>, пространство только вокруг контента (например, вокруг абзаца текста)</li>
    <li><code>border</code>, сплошная линия, которая расположена рядом с padding</li>
    <li><code>margin</code>, пространство вокруг внешней стороны элемента</li>
  </ul>
  <p></p>
  <figure class="m_custom">
    <img src="https://mdn.mozillademos.org/files/9443/box-model.png" width="574" />
  </figure>
  <p>В этом разделе мы также используем:</p>
  <ul>
    <li><code>width</code> (ширину элемента)</li>
    <li><code>background-color</code>, цвет позади контента и padding элементов</li>
    <li><code>color</code>, цвет контента элемента (обычно текста)</li>
    <li><code>text-shadow</code>: устанавливает тень на тексте внутри элемента</li>
    <li><code>display</code>: устанавливает режим отображения элемента (пока что не волнуйтесь об этом)</li>
  </ul>
  <p>Итак, давайте начнем и добавим больше CSS на нашей странице! Продолжайте добавлять эти новые правила, расположенные в нижней части страницы, и не бойтесь экспериментировать с изменением значений, чтобы увидеть, как это работает.</p>
  <p></p>
  <h3>Изменение цвета страницы</h3>
  <figure class="m_custom">
    <img src="https://teletype.in/files/7e/fa/7efa6564-df6d-4823-99f4-1f94df0a3ef6.png" width="1156" />
  </figure>
  <p>Это правило устанавливает цвет фона для всей страницы. </p>
  <p></p>
  <h3>Разбираемся с блоками</h3>
  <figure class="m_custom">
    <img src="https://teletype.in/files/af/6d/af6d49b7-fedd-4dbf-a187-495ea14c9927.png" width="1155" />
  </figure>
  <p>Теперь для <code>&lt;body&gt;</code> элемента. Здесь есть немало деклараций, так что давайте пройдем через них всех по одному:</p>
  <ul>
    <li><code>width: 600px;</code> — заставляет тело быть всегда 600 пикселей в ширину.</li>
    <li><code>margin: 0 auto;</code> — когда вы устанавливаете два значения для таких свойств как <code>margin</code> или <code>padding</code>, первое значение элемента влияет на верхнюю <strong>и</strong> нижнюю сторону (делает их <code>0</code> в данном случае), и второе значение на левую <strong>и</strong> правую сторону (здесь, <code>auto</code> является особым значением, которое делит доступное пространство по горизонтали поровну слева и справа). Вы также можете использовать один, три или четыре значения, как описано здесь.</li>
    <li><code>background-color: #FF9500;</code> — как и прежде, устанавливает цвет фона элемента. Я использовал красновато-оранжевый для тела, в отличие от темно-синего цвета для <code>&lt;html&gt;</code> элемента, но не стесняйтесь и эксперементируйте.</li>
    <li><code>padding: 0 20px 20px 20px;</code> — у нас есть четыре значения, установленные для padding, чтобы сделать немного пространства вокруг нашего контента. В этот раз мы не устанавливаем padding на верхней части тела, но делаем 20 пикселей слева, снизу и справа. Значения устанавливаются сверху, справа, снизу, слева, в таком порядке.</li>
    <li><code>border: 5px solid black;</code> — просто устанавливает сплошную черную рамку шириной 5 пикселей со всех сторон тела.</li>
  </ul>
  <p></p>
  <h3>Позиционирование и стилизация нашего заголовка главной страницы</h3>
  <figure class="m_custom">
    <img src="https://teletype.in/files/55/0d/550d0d63-abe0-41da-9ed3-741325b955a0.png" width="1157" />
  </figure>
  <p>Вы, возможно, заметили, что есть ужасный разрыв в верхней части тела. Это происходит, потому что браузеры применяют некоторый <strong>стиль по умолчанию</strong> для элемента <code>&lt;h1&gt;</code> (по сравнению с другими), даже если вы не применяли какой-либо CSS вообще! Это может звучать как плохая идея, но мы хотим, чтобы веб-страница без стилей имела базовую читаемость. Чтобы избавиться от разрыва, мы переопределили стиль по умолчанию, установив <code>margin: 0;</code>.</p>
  <p>Затем мы установили заголовку верхний и нижний padding на 20 пикселей, и сделали текст заголовка того же цвета, как и цвет фона html.</p>
  <p>Здесь, мы использовали одно довольно интересное свойство - это <code>text-shadow</code>, которое применяет тень к текстовому контенту элемента. Оно имеет следующие четыре значения:</p>
  <ul>
    <li>Первое значение пикселей задает <strong>горизонтальное смещение</strong> тени от текста — как далеко она движется поперек: отрицательное значение должно двигать ее влево.</li>
    <li>Второе значение пикселей задает <strong>вертикальное смещение</strong> тени от текста — как далеко она движется вниз, в этом примере: отрицательное значение должно переместить ее вверх.</li>
    <li>Третье значение пикселей задает <strong>радиус размытия</strong> тени — большее значение будет означать более размытую тень.</li>
    <li>Четвертое значение задает основной цвет тени.</li>
  </ul>
  <p>И вновь попробуйте поэкспериментировать с различными значениями, чтобы посмотреть, что вы можете придумать.</p>
  <p></p>
  <h3>Центрирование изображения</h3>
  <figure class="m_custom">
    <img src="https://teletype.in/files/aa/87/aa877249-1da3-423d-99ca-92b914a116b9.png" width="1156" />
  </figure>
  <p>В заключение, мы отцентрируем изображение, чтобы оно лучше выглядело. Мы можем использовать <code>margin: 0 auto</code> уловку снова, как мы это делали раньше для body, но мы также должны сделать кое-что еще. Элемент <code>&lt;body&gt;</code> является блочным, это значит, что он занимает место на странице и может иметь margin и другие значения отступов, применяемых к нему. Изображения, наоборот, являются строчными элементами, то есть они этого не могут. Таким образом, чтобы применить margin к изображению, мы должны дать изображению блочное поведение с помощью <code>display: block;</code>.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@webtabula/VnKbroinz</guid><link>https://teletype.in/@webtabula/VnKbroinz?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=webtabula</link><comments>https://teletype.in/@webtabula/VnKbroinz?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=webtabula#comments</comments><dc:creator>webtabula</dc:creator><title>Как мошенники зарабатывают на чеках</title><pubDate>Tue, 12 May 2020 04:46:26 GMT</pubDate><description><![CDATA[<img src="https://teletype.in/files/29/08/2908871f-359c-4ffc-9907-290c0e942371.jpeg"></img>Забираете ли вы чеки из магазинов или уходите, оставив их на кассе либо выбросив в ближайшую урну? А знали ли вы, что ваш чек может стать хорошим вариантом наживы для мошенников?]]></description><content:encoded><![CDATA[
  <figure class="m_original">
    <img src="https://teletype.in/files/29/08/2908871f-359c-4ffc-9907-290c0e942371.jpeg" width="564" />
  </figure>
  <p>Забираете ли вы чеки из магазинов или уходите, оставив их на кассе либо выбросив в ближайшую урну? А знали ли вы, что ваш чек может стать хорошим вариантом наживы для мошенников?</p>
  <p><br /></p>
  <p>Никогда не оставляйте чеки на кассе</p>
  <p>На первый взгляд все кажется совсем безобидным. Так, в торговом центре или в супермаркете к вам подходит человек и просит отдать ему чек на вашу покупку. В качестве предлога рассказывается одна из легенд.</p>
  <p><br /></p>
  <p>Как правило, мошенник поясняет, что ваш чек нужен ему для пополнения бонусов на карте в том или ином магазине. В другом случае это может быть девушка, которая сообщает, что чек требуется ей для отчета по тратам, например для взыскания алиментов через суд.</p>
  <p><br /></p>
  <p>Причина может быть какой угодно и звучит так правдоподобно, что отказать сложно, особенно когда дело касается чеков на покупку продуктов питания.</p>
  <p><br /></p>
  <p>Мошенники также подбирают оставленные чеки на кассе, а иногда и не брезгуют урнами и вынимают оттуда только что выброшенные чеки</p>
  <p><br /></p>
  <p>Чем опасен чек, оплаченный наличными</p>
  <p>После того как чек получен, мошенники могут использовать несколько разных схем. Зависят эти схемы от способа оплаты товара. В случае и с наличными, и с картой мошенник может взять в магазине вещь, указанную в чеке, предварительно сняв с нее защитные магниты, и вынести из магазина.</p>
  <p><br /></p>
  <p>Если на выходе его задержит охранник, то он просто покажет тот самый чек, где значится данный товар.</p>
  <p><br /></p>
  <p>Чаще всего украденные таким образом вещи мошенники не перепродают, а возвращают в магазин уже на следующий день. По закону магазин обязан будет его принять. Но данная схема сработает только в случае оплаты наличными. При оплате товара картой деньги будут перечислены на карту покупателя, а мошенник останется ни с чем.</p>
  <p><br /></p>
  <p>Чем опасен чек, оплаченный картой</p>
  <p>Если товар был оплачен картой, то на чеке будут напечатаны персональные данные о покупателе: имя, фамилия и последние четыре цифры номера карты. С такими данными мошенник может разыскать владельца в соцсетях и выяснить его номер телефона (многие указывают его на странице своего аккаунта).</p>
  <p><br /></p>
  <p>Далее мошенник отправляет на этот номер сообщение якобы от банка о том, что карта заблокирована и требуется отправить код. Не все обращают внимание на подозрительный номер «банка», поэтому легко могут поддаться на уловку аферистов.</p>
  <p><br /></p>
  <p>Если вы уверены в том, что чек на данную покупку вам уже точно не пригодится, то постарайтесь избавиться от него таким образом, чтобы он не попал в чужие руки.</p>
  <p><strong>P.S.</strong></p>
  <p>Тема сборная. От себя небольшие ремарки:</p>
  <p>Вряд ли кто выбросит чек от планшета, а вот помельче- наушники и т.п. В продуктовом нужны чеки с дорогим товаром- алкоголь, кофе, конфеты.</p>
  <p>По чеку с картой можно достать более полную информацию( но вложения не соответствуют профиту, в большинстве случаев.)</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@webtabula/aSuWyrvrr</guid><link>https://teletype.in/@webtabula/aSuWyrvrr?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=webtabula</link><comments>https://teletype.in/@webtabula/aSuWyrvrr?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=webtabula#comments</comments><dc:creator>webtabula</dc:creator><title>[4 Урок] Форма HTML</title><pubDate>Sun, 10 May 2020 15:54:02 GMT</pubDate><media:content medium="image" url="https://teletype.in/files/99/f7/99f7d585-4163-4688-a61c-37427279b8a9.png"></media:content><description><![CDATA[<img src="https://teletype.in/files/fb/da/fbda748a-f71f-4eae-9cbb-83c51a6598ea.png"></img>Наберитесь терпения, это будет большая статья, я верю в вас!❤️]]></description><content:encoded><![CDATA[
  <figure class="m_original">
    <img src="https://teletype.in/files/fb/da/fbda748a-f71f-4eae-9cbb-83c51a6598ea.png" width="1280" />
  </figure>
  <p><em>Наберитесь терпения, это будет большая статья,</em> я верю в вас!❤️</p>
  <h2>Содержание статьи:</h2>
  <p><strong>1. Основы HTML формы:</strong></p>
  <ul>
    <li>Ваша первая форма</li>
    <li>Как структурировать HTML форму</li>
  </ul>
  <p><strong>2. Виджеты форм:</strong></p>
  <ul>
    <li>Стандартные виджеты формы</li>
  </ul>
  <p><strong>3. Валидация и подтверждение данных форм:</strong></p>
  <ul>
    <li>Отправка данных формы</li>
    <li>Валидация данных форм</li>
  </ul>
  <p></p>
  <h2>1️⃣ Основы HTML форм </h2>
  <p>HTML-формы являются одним из основных пунктов взаимодействия пользователя с веб-сайтом или приложением. Формы позволяют пользователям вводить данные, обычно отправляя эти данные на веб-сервер, но веб-страница также может использовать данные клиента на стороне формы.<br /><br />Основное различие между HTML-формой и обычным HTML-документом заключается в том, что большую часть времени данные, собираемые с помощью формы, отправляются на веб-сервер. В этом случае вам необходимо настроить веб-сервер для приема и обработки данных. Настройка такого сервера выходит за рамки данной статьи, но если вы хотите узнать больше, см. Раздел «Отправка данных формы» </p>
  <p></p>
  <h3>Ваша первая форма</h3>
  <p>Основные тэги используемые в формах: <code>&lt;form&gt;</code>, <code>&lt;label&gt;</code>, <code>&lt;input&gt;</code>, <code>&lt;textarea&gt;</code>, and <code>&lt;button&gt;</code>.</p>
  <p></p>
  <p><strong>Элемент &lt;form&gt;</strong></p>
  <p>Все HTML-формы начинаются с элемента &lt;form&gt;, например:</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/f6/b9/f6b93322-f7f8-4572-8cd3-c5e9d683ccc3.png" width="915" />
  </figure>
  <p>Этот элемент формально определяет форму. Это контейнерный элемент, такой как элемент <code>&lt;div&gt; </code>или <code>&lt;p&gt;</code>, но он также поддерживает некоторые специфические атрибуты для настройки поведения формы. Все его атрибуты являются необязательными, но обычно это стандартная практика - всегда устанавливать хотя бы атрибут <code>action</code> и атрибут <code>method</code>:<br /><br />1. Атрибут <code>action</code> определяет местоположение (URL), куда должны отправляться собранные данные формы при ее отправке.<br />2. Атрибут <code>method</code> определяет, с каким HTTP-методом отправлять данные (это может быть «get» или «post»).</p>
  <p></p>
  <p><strong>Элементы &lt;label&gt;, &lt;input&gt; и &lt;textarea&gt;</strong></p>
  <p>Наша контактная форма очень проста: часть для ввода данных содержит три текстовых поля, каждое из которых имеет метку. Поле ввода имени является основным однострочным текстовым полем, поле ввода электронной почты является однострочным текстовым полем, которое принимает только адреса электронной почты, а поле ввода сообщения является многострочным текстовым полем. </p>
  <p>С точки зрения HTML-кода нам нужно что-то вроде следующего для реализации этих виджетов формы:</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/2f/7a/2f7a1484-b4ea-4e16-b77b-af8e596d848e.png" width="914" />
  </figure>
  <p>Элементы <code>&lt;div&gt;</code> предназначены для удобного структурирования нашего кода и облегчения стилизации (см. Далее в этой статье). Обратите внимание на использование атрибута <code>for</code> для всех элементов <code>&lt;label&gt;</code>; это формальный способ связать метку с виджетом формы. Этот атрибут ссылается на идентификатор соответствующего виджета. </p>
  <p>В элементе <code>&lt;input&gt;</code> наиболее важным атрибутом является атрибут <code>type</code>. Этот атрибут чрезвычайно важен, поскольку он определяет способ появления и поведения элемента <code>&lt;input&gt;</code>. </p>
  <ul>
    <li>В нашем простом примере мы используем <code>text</code> значения для первого ввода — значение по умолчанию для этого атрибута. Он представляет собой базовое однострочное текстовое поле, которое принимает любой вид ввода текста.</li>
    <li>Для второго ввода мы используем значение <code>email</code>, которое определяет  текстовое поле, принимающее только сформированный адрес электронной почты. Это превращает базовое текстовое поле в своего рода&quot; интеллектуальное &quot; поле, которое будет выполнять некоторые проверки данных, введенных пользователем. Он также предусматривает включение символа @ на клавиатуре по умолчанию на устройствах с динамическими клавиатурами. Подробнее о проверке формы вы узнаете в статье ниже.</li>
  </ul>
  <p>И последнее, но не менее важное: обратите внимание на синтаксис <code>&lt;input&gt;</code> и <code>&lt; textarea&gt;&lt; / textarea&gt;</code>. Это одна из странностей HTML. Тег <code>&lt;input&gt;</code> является пустым элементом, что означает, что он не нуждается в закрывающем теге. <code>&lt;textarea&gt; </code>- это не пустой элемент, то есть он должен быть закрыт соответствующим конечным тегом. Это влияет на специфическую особенность HTML-форм: то, как вы определяете значение по умолчанию. Чтобы определить значение по умолчанию элемента <code>&lt;input&gt;</code>, вы должны использовать атрибут <code>value</code> следующим образом:</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/c9/69/c9696d53-b6b8-484a-84a1-b91eb0e10978.png" width="914" />
  </figure>
  <p>Если вы хотите определить значение по умолчанию для &lt;textarea&gt;, вам просто нужно поместить это значение по умолчанию между открывающим и закрывающим тегом элемента &lt;textarea&gt;, например:</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/1d/4b/1d4b9f2d-3c36-4a1b-b54e-76ee486cc8e3.png" width="912" />
  </figure>
  <p></p>
  <p><strong>Элемент &lt;button&gt;</strong></p>
  <p>Разметка для нашей формы почти завершена; нам все еще нужно добавить кнопку, позволяющую пользователю отправлять свои данные, как только он заполнит форму. Это делается с помощью элемента <code>&lt;button&gt;</code>; добавьте следующее непосредственно над закрывающим тегом <code>&lt;/form&gt;</code> :</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/c7/ff/c7ff39ea-3b1e-4ad5-a985-99ffbc801b85.png" width="917" />
  </figure>
  <p>Вы увидите, что элемент <code>&lt;button&gt;</code> также принимает атрибут <code>type</code> — он принимает одно из трех значений: <code>submit</code>, <code>reset</code> или <code>button</code>.</p>
  <ul>
    <li>Щелчок по кнопке <code>submit</code> (значение по умолчанию) отправляет данные формы на веб-страницу, определенную атрибутом <code>action</code> элемента <code>&lt;form&gt;</code>.</li>
    <li>Щелчок по кнопке <code>reset</code> немедленно сбрасывает все виджеты формы к их значению по умолчанию. С точки зрения UX, это считается плохой практикой.</li>
    <li>Щелчок по кнопке <code>button</code> делает... ничего! Это звучит глупо, но это удивительно полезно для создания пользовательских кнопок с помощью JavaScript.</li>
  </ul>
  <p></p>
  <p><strong>Сейчас у вас должна получиться вот такая форма:</strong></p>
  <figure class="m_original">
    <img src="https://teletype.in/files/b1/09/b109349e-1e51-4a5e-9ff4-9a3cbd7fe944.png" width="473" />
  </figure>
  <p>О том как стилизовать форму, мы будем говорить дальше, пока можете добавить внутрь <code>&lt;head&gt;&lt;/head&gt;</code> тэг <code>&lt;style&gt;&lt;/style&gt;</code> и написать внутри вот такой код:</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/5c/de/5cde4b25-bdff-4706-84e5-520f73b3d9ea.png" width="763" />
  </figure>
  <figure class="m_original">
    <img src="https://teletype.in/files/a9/cb/a9cb1723-ed78-40e4-bd64-847ec3e3ffa1.png" width="762" />
  </figure>
  <figure class="m_original">
    <img src="https://teletype.in/files/b8/ea/b8ea5740-9994-40ca-8a09-4c361d7baaec.png" width="900" />
  </figure>
  <p></p>
  <h3>Как структурировать HTML-формы</h3>
  <p>Получив базовые знания, теперь мы более подробно рассмотрим элементы, используемые для придания структуры и значения различным частям форм.</p>
  <p></p>
  <p><strong>Элемент &lt;form&gt;</strong></p>
  <p>Элемент <code>&lt;form&gt;</code> формально определяет форму и атрибуты, которые определяют поведение этой формы. Каждый раз, когда вы хотите создать HTML-форму, вам нужно начать с создания элемента &lt;form&gt;, поместив внутрь него всё содержимое. Многие вспомогательные технологии или браузерные плагины могут обнаруживать элементы <code>&lt;form&gt;</code> и реализовывать специальные хуки, чтобы их было проще использовать.</p>
  <p>Мы уже встречались с этим в предыдущей статье.</p>
  <p></p>
  <p><strong>Элементы &lt;fieldset&gt; и &lt;legend&gt;</strong></p>
  <p>Элемент <code>&lt;fieldset&gt;</code> - это удобный способ стилистической и семантической группировки элементов формы. Вы можете установить заголовок <code>&lt;fieldset&gt;</code>, добавив элемент <code>&lt;legend&gt;</code> сразу после открывающего тега <code>&lt;fieldset&gt;</code>. Текст элемента <code>&lt;legend&gt;</code> формально описывает назначение содержимого <code>&lt;fieldset&gt;</code>.</p>
  <p>Различные вспомогательные технологии будут использовать <code>&lt;legend&gt;</code> как часть метки <code>label</code> всех элементов внутри <code>&lt;fieldset&gt;</code>. Например, такие экранные дикторы как <a href="https://www.freedomscientific.com/products/software/jaws/" target="_blank">Jaws</a> или <a href="https://www.nvaccess.org/" target="_blank">NVDA</a> произносят заголовок формы <code>&lt;legend&gt;</code> перед произношением названия меток элементов.</p>
  <p>Небольшой пример:</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/da/f0/daf03e0e-9e58-4753-ba0b-6588710d98fd.png" width="1015" />
  </figure>
  <p><strong>Общие HTML-структуры, используемые с формами</strong></p>
  <p>Помимо структур, специфичных для HTML-форм, полезно помнить, что формы-это просто HTML. Это означает, что вы можете использовать всю мощь HTML для структурирования HTML-формы.</p>
  <p>Как вы можете видеть в примерах, это обычная практика, чтобы обернуть метку и ее виджет с элементом <code>&lt;div&gt;</code>. элементы <code>&lt;p&gt;</code> также часто используются, как и списки HTML (последний наиболее распространен для структурирования нескольких флажков или переключателей).</p>
  <p>В дополнение к элементу <code>&lt;fieldset&gt;</code> для структурирования сложной формы также широко используются HTML-заголовки (например, <code>&lt;h1&gt;</code>, <code>&lt;h2&gt;</code>) и секционирование (например, <code>&lt;section&gt;</code>).</p>
  <p>Прежде всего, это зависит от вас, чтобы найти стиль, который вы находите удобным для кодирования, и который также приводит к доступным, пригодным для использования формам.</p>
  <p>Это имеет каждый отдельный раздел функциональности, содержащийся в элементах <code>&lt;section&gt;</code>, и <code>&lt;fieldset&gt;</code>, содержащий переключатели.</p>
  <p></p>
  <p>Давайте воплотим эти идеи на практике и построим форму платежа. Эта форма будет содержать ряд типов виджетов, которые вы, возможно, еще не понимаете — не беспокойтесь об этом сейчас; вы узнаете, как они работают дальше. А пока внимательно прочитайте описания, следуя приведенным ниже инструкциям, и начните формировать представление о том, какие элементы оболочки мы используем для структурирования формы и почему.</p>
  <p></p>
  <p>1. Для начала сделайте локальную копию нашего <a href="https://github.com/mdn/learning-area/blob/master/html/introduction-to-html/getting-started/index.html" target="_blank">пустого файла шаблона</a> и <a href="https://github.com/mdn/learning-area/blob/master/html/forms/html-form-structure/payment-form.css" target="_blank">CSS</a> для нашей платежной формы в новом каталоге на вашем компьютере.</p>
  <p>2. Прежде всего, примените CSS к HTML, добавив следующую строку внутри HTML &lt;head&gt;:</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/a3/2e/a32eb594-4163-4d7f-8b51-d0808892e226.png" width="634" />
  </figure>
  <p>3. Затем начните свою форму с добавления внешнего элемента &lt;form&gt; :</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/41/a1/41a1d8c2-9283-45d2-a0cb-aba4761ffc33.png" width="634" />
  </figure>
  <p>4. Внутри тегов &lt;form&gt; начните с добавления заголовка и абзаца, чтобы сообщить пользователям, как отмечаются обязательные поля:</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/ab/1a/ab1aa372-850f-46c2-b0e4-dbabbd0441f5.png" width="853" />
  </figure>
  <p>5. Далее мы добавим большую часть кода в форму, расположенную ниже нашей предыдущей записи. Здесь вы увидите, что мы оборачиваем поля контактной информации внутри отдельного элемента <code>&lt;section&gt;</code>. Кроме того, у нас есть набор из двух переключателей, каждый из которых мы помещаем в свой собственный элемент списка (<code>&lt;li&gt;</code>). Наконец, у нас есть два стандартных текста <code>&lt;input&gt;</code> и связанные с ними <code>&lt;label&gt;</code> элементы, каждый из которых содержится внутри <code>&lt;p&gt;</code>, а также ввод пароля для ввода пароля. Добавьте этот код в свою форму прямо сейчас:</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/86/1b/861bcaf5-73dc-43aa-9373-1e89c1bdfb28.png" width="643" />
  </figure>
  <p>6. Теперь перейдем ко второму <code>&lt;section&gt;</code> нашей формы-платежной информации. Здесь мы имеем три различных виджета вместе с их метками, каждый из которых содержится внутри <code>&lt;p&gt;</code>. Первый-это выпадающее меню (<code>&lt;select&gt;</code>) для выбора типа кредитной карты. второй-это элемент &lt;input&gt; типа number, предназначенный для ввода номера кредитной карты. Последний-это элемент <code>&lt;input&gt;</code> типа <code>date</code>, предназначенный для ввода даты истечения срока действия карты (этот элемент будет иметь виджет выбора даты в поддерживающих браузерах и вернется к обычному вводу текста в не поддерживающих браузерах). Опять же, введите следующее ниже предыдущего раздела:</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/20/c6/20c63ad0-a884-4f2b-abcc-36d0b219c670.png" width="569" />
  </figure>
  <p>7. Последний раздел, который мы добавим, намного проще, он содержит только <code>&lt;button&gt;</code> типа <code>submit</code> для отправки данных формы. Теперь добавьте это в нижнюю часть вашей формы:</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/3d/c3/3dc36897-146c-47d3-b32b-fc7ff63ecc1d.png" width="570" />
  </figure>
  <h2>2️⃣ Виджеты форм</h2>
  <p>Сейчас мы сосредоточимся на виджетах форм, встроенных в браузеры, но поскольку формы HTML остаюстся несколько ограниченными и особенности их реализации различаются для разных браузеров, веб-разработчики иногда создают собственные виджеты форм. (&quot;Как создать собственную форму&quot; позже в данном модуле для более подробного изучения.)</p>
  <p></p>
  <h3>&lt;input&gt;</h3>
  <p>Все текстовые поля имеют общие атрибуты:</p>
  <ul>
    <li>Они могут быть помечены как <code>readonly</code> (пользователь не может изменять начальное значение) или даже <code>disabled</code> начальное значение никогда не посылается вместе с остальными данными формами).</li>
    <li>Они могут иметь атрибут <code>placeholder</code>; это текст, который появляется внутри теста поля формы и кратко описывает, для чего используется данная форма.</li>
    <li>Существуют общие характеристики <code>size</code> (физический размер поля) и длину (максимальное количество символов, которые может ввести пользователь).</li>
    <li>Они могут быть определены с помощью <a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Input" target="_blank">spell checking</a>, если браузер поддерживает данную функцию.</li>
  </ul>
  <figure class="m_original">
    <img src="https://teletype.in/files/90/13/901330d1-8cdc-438d-82c8-ad6c085160db.png" width="912" />
  </figure>
  <figure class="m_original">
    <img src="https://teletype.in/files/54/0c/540c2169-fad6-446c-af35-01b27ceaf1d8.png" width="813" />
  </figure>
  <h3>&lt;textarea&gt;</h3>
  <p>Многострочное текстовое поле задается с помощью элемента <code>&lt;textarea&gt;</code>, а не с помощью элемента <code>&lt;input&gt;</code>.</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/f9/0c/f90cd6d4-e383-49ab-a880-c5133db5dbca.png" width="911" />
  </figure>
  <figure class="m_original">
    <img src="https://teletype.in/files/54/9b/549bbab2-c6f8-4831-b798-b0cbeeb51e7b.png" width="745" />
  </figure>
  <p>Атрибуты &lt;textarea&gt;</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/f2/5b/f25b22e1-a4b2-4924-8aee-0202c2debf63.png" width="914" />
  </figure>
  <p></p>
  <h3>Drop-down</h3>
  <p>Drop-down -это простой способ позволить пользователям выбрать один из многих вариантов, не занимая много места в пользовательском интерфейсе.</p>
  <p>Поле выбора создается с элементом &lt;select&gt; с одним или несколькими элементами &lt;option&gt; в качестве его дочерних элементов, каждый из которых указывает одно из своих возможных значений.</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/08/dc/08dca3ae-0cf3-42ef-9a83-8e041c6ae3a9.png" width="915" />
  </figure>
  <figure class="m_original">
    <img src="https://teletype.in/files/fa/42/fa429fd9-23b6-4b70-b9de-fd7c78769997.png" width="916" />
  </figure>
  <figure class="m_original">
    <img src="https://teletype.in/files/9a/85/9a855328-c7b5-4273-89c9-136d3a81cacb.png" width="887" />
  </figure>
  <p>По умолчанию поле выбора позволяет пользователю выбрать только одно значение. Добавляя атрибут <code>multiple</code> в элемент <code>&lt;select&gt;</code>, вы можете разрешить пользователям выбирать несколько значений, используя механизм по умолчанию, предоставляемый операционной системой (например, удерживая нажатой клавишу Cmd/Ctrl и щелкая несколько значений).</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/08/3d/083d5d4f-48e7-4b0d-a9c3-43128412b822.png" width="913" />
  </figure>
  <figure class="m_original">
    <img src="https://teletype.in/files/26/17/2617ae74-af86-4df7-b34a-8bf8ccbf6db9.png" width="734" />
  </figure>
  <h3>Поле автозаполнения</h3>
  <p>Вы можете предоставить предлагаемые автоматически заполненные значения для виджетов форм с помощью элемента <code>&lt;datalist&gt;</code> с некоторыми дочерними элементами <code>&lt;option&gt;</code>, чтобы указать значения для отображения.</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/9f/d2/9fd2210f-ec25-43a3-ae27-362fee81eab1.png" width="914" />
  </figure>
  <figure class="m_original">
    <img src="https://teletype.in/files/40/3e/403e5a3d-9bda-43c2-bf72-fbcf645a6f46.png" width="437" />
  </figure>
  <p></p>
  <h3>Check box</h3>
  <p>check box создается с помощью элемента <code>&lt;input&gt;</code> с его атрибутом установленным в поле <code>type=&quot;checkbox&quot;</code>.</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/a2/98/a29812b6-87e9-46fa-8f8d-77b72aea3f2f.png" width="352" />
  </figure>
  <p></p>
  <h3>Radio button</h3>
  <p>Radio button создается с помощью элемента &lt;input&gt; с атрибутом установленным в <code>type=&quot;radio&quot;</code>.</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/20/c9/20c9e12a-3d3d-4f37-8e14-dd01bf136031.png" width="915" />
  </figure>
  <figure class="m_original">
    <img src="https://teletype.in/files/b7/54/b7540581-7f1e-4bf3-81c3-fa78c4ce3be4.png" width="916" />
  </figure>
  <figure class="m_original">
    <img src="https://teletype.in/files/34/aa/34aa77e1-0ef7-4d08-9e95-6e663e48f067.png" width="352" />
  </figure>
  <h3>Button</h3>
  <p>В HTML-формах существует три вида кнопок:</p>
  <ol>
    <li><strong>Submit</strong> - отправляет данные формы на сервер</li>
    <li><strong>Reset</strong> - Сбрасывает все виджеты форм к их значениям по умолчанию</li>
    <li><strong>Anonymous</strong> - Кнопки, которые не имеют автоматического эффекта, но могут быть настроены с помощью кода JavaScript. Если вы опустите атрибут type, это будет значение по умолчанию.</li>
  </ol>
  <p><strong>Submit</strong></p>
  <figure class="m_original">
    <img src="https://teletype.in/files/d3/cd/d3cdecaa-014f-4c3b-8965-92ae55edbfa4.png" width="915" />
  </figure>
  <p><strong>Reset</strong></p>
  <figure class="m_original">
    <img src="https://teletype.in/files/89/16/8916e433-d661-442b-bf10-c4154b8fd212.png" width="915" />
  </figure>
  <p><strong>Anonymous</strong></p>
  <figure class="m_original">
    <img src="https://teletype.in/files/5f/b3/5fb3d3c9-6428-4318-8298-44f08a726ce2.png" width="915" />
  </figure>
  <p></p>
  <figure class="m_original">
    <img src="https://teletype.in/files/78/51/785194e3-1211-4ab0-8087-c8f99c30efde.png" width="464" />
  </figure>
  <p></p>
  <h3>Продвинутые виджеты </h3>
  <p>В этом разделе мы рассмотрим те виджеты, которые позволяют пользователям вводить сложные или необычные данные. Это включает в себя точные или приблизительные цифры, даты и время, а также цвета.</p>
  <p><strong>Numbers</strong></p>
  <p>Виджеты для чисел создаются с помощью элемента &lt;input&gt;, а его атрибут type имеет значение number.</p>
  <ol>
    <li>Ограничить значение можно при помощи атрибутов <code>min</code> и <code>max</code></li>
    <li>Так же можно задать &quot;шаг&quot; при помощи атрибута <code>step</code></li>
  </ol>
  <figure class="m_original">
    <img src="https://teletype.in/files/3b/34/3b344211-c2a4-4c6d-8445-aa95be506bc3.png" width="914" />
  </figure>
  <p></p>
  <p><strong>Sliders</strong></p>
  <p>Другой способ выбрать число - это использовать ползунок. С визуальной точки зрения ползунки менее точны, чем текстовые поля, поэтому они используются для выбора числа, точное значение которого не обязательно важно.</p>
  <p>Ползунок создается с помощью <code>&lt;input&gt;</code> с его атрибутом <code>type=&quot;range&quot;</code>. Очень важно правильно настроить слайдер; для этого настоятельно рекомендуется установить атрибуты <code>min</code>, <code>max</code> и <code>step</code>.</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/d4/4a/d44ad96c-ecf2-42cd-9204-340da3541c56.png" width="915" />
  </figure>
  <p>В этом примере создается ползунок, значение которого может находиться в диапазоне от 0 до 500, а кнопки инкремента/декремента изменяют значение на +10 и -10.</p>
  <p>Одна из проблем с ползунками заключается в том, что они не дают никакой визуальной обратной связи. Вам нужно добавить это самостоятельно с помощью JavaScript, но это относительно легко сделать. В этом примере мы добавим пустой элемент &lt;span&gt;, в который запишем текущее значение слайдера, обновляя его по мере изменения.</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/5b/41/5b4125ae-d06d-4f04-a1b6-ec48bec28580.png" width="916" />
  </figure>
  <p>Чтобы данные отображались, придется добавить перед закрывающимся тэгом <code>&lt;/body&gt;</code>  тэг <code>&lt;script&gt;&lt;/script&gt;</code>  и записать внутри него:</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/94/3f/943f4a9b-2e5f-454b-9261-cfc5bcb8a98e.png" width="914" />
  </figure>
  <h3><strong>Дата и время </strong></h3>
  <p>Сбор значений даты и времени традиционно был кошмаром для веб-разработчиков. HTML5 вносит здесь некоторые усовершенствования, предоставляя специальный элемент управления для обработки этого конкретного вида данных.</p>
  <p><strong>datetime-local</strong></p>
  <p>Это создает виджет для отображения и выбора даты с указанием времени, но без какой-либо конкретной информации о часовом поясе.</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/c2/e6/c2e61653-cb96-47b0-8367-f72e639d22c6.png" width="914" />
  </figure>
  <p></p>
  <p><strong>month</strong></p>
  <p>Это создает виджет для отображения и выбора месяца с годом.</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/a6/16/a61637ce-06cc-47e5-828c-e6b4827471fb.png" width="665" />
  </figure>
  <p><strong>time</strong></p>
  <p>Это создает виджет для отображения и выбора значения времен</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/26/19/26190983-a702-4b6b-9bca-9e5631ff8dbe.png" width="663" />
  </figure>
  <p><strong>week</strong></p>
  <p>Это создает виджет для отображения и выбора номера недели и ее года.</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/09/3d/093d8844-d415-4191-b790-dd596087ddaa.png" width="664" />
  </figure>
  <p>Все элементы управления датой и временем могут быть ограничены с помощью атрибутов min и max.</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/e8/3a/e83a57ee-2e46-40e1-8b5e-03bf6cd29368.png" width="698" />
  </figure>
  <h3>Подборка цвета</h3>
  <p>С цветами всегда немного трудно справиться. Существует множество способов их выражения: значения RGB (десятичные или шестнадцатеричные), значения HSL, ключевые слова и т. д. Виджет &quot;color&quot; позволяет пользователям выбирать цвет как текстовым, так и визуальным способом.</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/0b/3e/0b3e75b2-74ff-46fd-a5fb-7bc7d07b748f.png" width="665" />
  </figure>
  <p></p>
  <h3>Другие виджеты</h3>
  <p>Есть несколько других виджетов, которые не могут быть легко классифицированы из-за их очень специфического поведения, но которые все еще очень полезны.</p>
  <p><strong>Выбор файла</strong></p>
  <p>Для создания виджета выбора файлов используется элемент <code>&lt;input&gt;</code> с атрибутом <code>type=&quot;file&quot;</code>. Типы файлов, которые принимаются, могут быть ограничены с помощью атрибута <code>accept</code>. Кроме того, если вы хотите позволить пользователю выбрать более одного файла, вы можете сделать это, добавив атрибут <code>multiple</code>.</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/a4/b6/a4b690bc-5591-4747-913c-1436b4b89f6d.png" width="665" />
  </figure>
  <p><strong>Скрытие содержимого</strong></p>
  <p>Иногда по техническим причинам удобно иметь фрагменты данных, которые отправляются вместе с формой, но не отображаются пользователю. Для этого вы можете добавить невидимый элемент в свою форму. Используйте <strong>&lt;input&gt;</strong> с его атрибутом <code>type=&quot;hidden&quot;</code>.</p>
  <p>При создании такого элемента необходимо задать его <code>name</code> и атрибуты <code>value</code>:</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/f7/eb/f7eb7961-eda8-486d-81ee-7089ba0dfa8d.png" width="675" />
  </figure>
  <p></p>
  <p><strong>Кнопка изображение</strong></p>
  <p>Элемент image button-это элемент, который отображается точно так же, как &lt;img&gt;, за исключением того, что когда пользователь нажимает на него, он ведет себя как кнопка submit</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/25/b2/25b23f4a-7f1f-4a56-bf4c-48c06d6b4ed3.png" width="688" />
  </figure>
  <h2><strong>3️⃣ Валидация и подтверждение данных форм</strong></h2>
  <h3>Отправка данных формы</h3>
  <p>В этой статье рассматривается, что происходит, когда пользователь отправляет форму - куда передаются данные и как мы их обрабатываем, когда они туда попадают? Мы также рассмотрим некоторые проблемы безопасности, связанные с отправкой данных формы.</p>
  <p></p>
  <h3>Куда отправляются данные</h3>
  <p>Элемент <code>&lt;form&gt;</code> определяет способ отправки данных. Все его атрибуты предназначены для того, чтобы вы могли настроить запрос на отправку, когда пользователь нажимает кнопку отправки. Двумя наиболее важными атрибутами являются <code>action</code> и <code>method</code>.</p>
  <p><strong>Атрибут action</strong></p>
  <p>Этот атрибут определяет, куда отправляются данные. Его значение должно быть действительным URL. Если этот атрибут не указан, данные будут отправлены на URL-адрес страницы, содержащей форму.</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/02/0b/020b4707-db11-4bc9-a32f-0d8da1c76c19.png" width="677" />
  </figure>
  <p><strong>Атрибут method</strong></p>
  <p>Этот атрибут определяет способ отправки данных.<a href="https://developer.mozilla.org/en-US/docs/Web/HTTP" target="_blank">Протокол HTTP</a>  предоставляет несколько способов выполнить запрос; Данные HTML-формы могут передаваться несколькими различными способами, наиболее распространенными из которых являются метод <code>GET</code> и метод <code>POST</code>.</p>
  <p><code>Метод GET</code></p>
  <p>Метод <code>GET</code> - это метод, используемый браузером, который говорит серверу, что нужно отправить назад данный ресурс: «Эй, сервер, я хочу получить этот ресурс». В этом случае браузер отправляет пустое тело. Поскольку тело пустое, если форма отправляется с использованием данного метода, данные, отправляемые на сервер, добавляются к URL-адресу.</p>
  <p>Рассмотрим следующую форму:</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/2e/24/2e24cb28-07d6-407e-bb91-c6a967ed137b.png" width="665" />
  </figure>
  <p>Поскольку используется метод <code>GET</code>, вы увидите URL <code>www.foo.com/?say=Hi&amp;to=Mom</code>, который появится в адресной строке браузера при отправке формы.</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/4e/5c/4e5c2ec6-d9ee-43a2-8a5d-d63dbb39d7dc.png" width="900" />
  </figure>
  <p>Данные добавляются в URL как последовательность пар имя / значение. После того, как URL веб-адрес закончился, мы добавляем знак вопроса (<code>?</code>), за которым следуют пары имя / значение, каждая из которых разделена амперсандом (<code>&amp;</code>). В этом случае мы передаем две части данных на сервер:</p>
  <ul>
    <li><code>say</code>, со значением <code>Hi</code></li>
    <li><code>to</code>, со значением <code>Mom</code></li>
  </ul>
  <p>HTTP-запрос имеет следующий вид:</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/56/4d/564d9484-3841-4320-901a-d5da2aab498a.png" width="665" />
  </figure>
  <p></p>
  <p><code>Метод POST</code></p>
  <p>Метод <code>POST</code> немного отличается. Браузер использует этот метод для связи с сервером при запросе ответа с учётом данных, представленные в теле HTTP-запроса: «Эй, сервер, взгляни на эти данные и отправь мне соответствующий результат». Если форма отправляется с использованием этого метода, данные добавляются в тело HTTP-запроса.</p>
  <p>Давайте рассмотрим пример — это та же самая форма, которую мы рассматривали в разделе <code>GET</code> выше, но с атрибутом <code>method</code>, установленным в <code>post</code>.</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/62/b2/62b2e4ad-1e5b-4b88-afb5-81632ec40819.png" width="666" />
  </figure>
  <p>Когда форма отправляется с использованием метода <code>POST</code>, данные добавляются не к URL-адресу, а включаются в тело запроса. HTTP-запрос имеет следующий вид:</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/70/28/702885ad-0e8f-429a-adc3-f846405f49f6.png" width="666" />
  </figure>
  <p>Заголовок <code>Content-Length</code> указывает размер тела, а заголовок <code>Content-Type</code>  указывает тип данных, отправляемых на сервер. Мы обсудим эти заголовки позже.</p>
  <p></p>
  <p><strong>Просмотр HTTP-запросов</strong></p>
  <p>HTTP-запросы никогда не отображаются пользователю (если вы хотите их видеть, Вам нужно использовать такие инструменты, как <a href="https://developer.mozilla.org/en-US/docs/Tools/Network_Monitor" target="_blank">Firefox Network Monitor</a> или <a href="https://developers.google.com/chrome-developer-tools/" target="_blank">Chrome Developer Tools</a>). Например, данные формы можно увидеть на вкладке Сеть (Network) в Chrome следующим образом (после отправки формы):</p>
  <ol>
    <li>Нажмите F12</li>
    <li>Выберите Network</li>
    <li>Выберите &quot;All&quot;</li>
    <li>Выберите &quot;foo.com&quot; во вкладке &quot;Name&quot;</li>
    <li>Выберите &quot;Headers&quot;</li>
  </ol>
  <p>Затем вы можете получить данные формы, как показано на рисунке ниже.</p>
  <p></p>
  <figure class="m_original">
    <img src="https://mdn.mozillademos.org/files/14691/network-monitor.png" width="797" />
  </figure>
  <p>Единственное, что отображается пользователю — вызываемый URL. Как упоминалось раннее, запрос с методом <code>GET</code> позволит пользователю увидеть информацию из запроса в URL, а запрос с методом <code>POST</code> не позволит. Две причины, почему это может быть важно:</p>
  <ol>
    <li>Если необходимо отправить пароль (или любую другую важную информацию), никогда не используйте метод <code>GET</code>, иначе рискуете отобразить эту информацию в URL-строке, что небезопасно.</li>
    <li>Если необходимо отправить большой объем информации, <code>POST</code>-метод является предпочтительным, так как некоторые браузеры ограничивают длину URL. К тому же, многие сервера так же ограничивают длину обрабатываемых URL.</li>
  </ol>
  <p></p>
  <p><strong>На стороне сервера: получение данных</strong></p>
  <p><a href="https://www.php.net/" target="_blank">PHP </a>предлагает несколько глобальных объектов для доступа к данным. Например, вы используете <code>POST</code>-метод, в приведенном ниже примере данные просто получаются и показываются пользователю. Разумеется, как использовать данные — решать только вам. Вы можете отобразить эти данные, поместить в базу данных, отправить по почте или передать эти данные куда-либо еще.</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/3f/b4/3fb44d1a-6fb0-495e-be2e-c622de05114e.png" width="915" />
  </figure>
  <p>Пример показывает страницу с данными, которые мы отправили. Вы можете посмотреть это в действии в нашем файле с примером: <a href="https://github.com/mdn/learning-area/blob/master/html/forms/sending-form-data/php-example.html" target="_blank">php-example.html</a> — который содержит те же данные, которые вы видели раньше: <code>method</code>: <code>post</code> и <code>action</code> из <code>php-example.php</code>. Когда данные переданы на отправку (submit), они переданы в форму <a href="https://github.com/mdn/learning-area/blob/master/html/forms/sending-form-data/php-example.php" target="_blank">php-example.php</a>, которая содержит PHP код из примера выше. Когда код будет выполнен, браузер выведет (output) обработанное сообщение:<code>Hi Mom</code>.</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/6c/bb/6cbb9825-8b3f-4be2-8705-41f8e0131fc5.png" width="474" />
  </figure>
  <h3>Валидация данных форм</h3>
  <p>Проверка данных формы позволяет нам удостовериться в том, что пользователи заполняют форму в правильном формате, убедиться, что отправленные данные будут успешно работать с нашими приложениями. Эта статья расскажет, что вам нужно знать о проверке формы.</p>
  <p><strong>Что такое валидация формы ?</strong></p>
  <p>Откройте любой популярный сайт с формой регистрации и вы заметите, что они дают вам обратную связь, когда вы вводите ваши данные не в том формате, который они ожидают от вас. Вы получите подобные сообщения:</p>
  <ul>
    <li>&quot;Это поле обязательно для заполнения&quot; (вы не можете оставить это поле пустым)</li>
    <li>&quot;Пожалуйста введите ваш телефонный номер в формате xxx-xxxx&quot; (вводит три цифры разделенные тире, за ними слеуют четыре цифры)</li>
    <li>&quot;Пожалуйста введите настоящий адрес электронной почты&quot; (если ваша запись не в формате&quot;somebody@example.com&quot;)</li>
    <li>&quot;Ваш пароль должен быть от 8 до 30 символов длиной, и содержать одну заглавную букву, один символ, и число&quot;</li>
  </ul>
  <p>Это называется валидация формы — когда вы вводите данные, веб-прилолжение проверяет, что данные корректны. Если данные верны, приложение позволяет данным быть отправленными на сервер и (как правило) быть сохраненными в базе данных; если нет - оно выдает вам сообщение об ошибке, обьясняющее какие исправления необходимо внести. Проверка формы может быть реализована несколькими различными способами.</p>
  <p>Мы хотим сделать заполнение веб-форм максимально простым. Итак, почему мы настаиваем на подтверждении наших форм? Существуют три основные причины:</p>
  <ul>
    <li><strong>Мы хотим получить нужные данные в нужном формате</strong> — наши приложения не будут работать должным образом, если данные нашего пользователя хранятся в неправильном формате, если они вводят неправильную информацию или вообще не передают информацию.</li>
    <li><strong>Мы хотим защитить учетные записи наших пользователей</strong> — заставляя наших пользователей вводить защищенные пароли, это упрощает защиту информации об их учетной записи.</li>
    <li><strong>Мы хотим обезопасить себя</strong> — существует множество способов, которыми злоумышленники могут злоупотреблять незащищенными формами, чтобы повредить приложение, в которое они входят (см. <a href="https://developer.mozilla.org/en-US/docs/Learn/Server-side/First_steps/Website_security" target="_blank">Безопасность веб-сайта</a>).</li>
  </ul>
  <p><strong>Какие типы валидации форм существуют ?</strong></p>
  <p>Существует два разных типа проверки формы, с которыми вы столкнетесь в Интернете:</p>
  <ul>
    <li><strong>Проверка на стороне клиента - </strong>это проверка, которая происходит в браузере, прежде чем данные будут отправлены на сервер. Это удобнее, чем проверка на стороне сервера, так как дает мгновенный ответ. Ее можно далее подразделить на:</li>
    <ul>
      <li><strong>JavaScript</strong> проверка выполняется с использованием JavaScript. Полностью настраиваемая.</li>
      <li><strong>Встроенная проверка формы, </strong>используя функции проверки формы HTML5. Для этого обычно не требуется JavaScript. Встроенная проверка формы имеет лучшую производительность, но она не такая настраиваемая, как с использованием JavaScript.</li>
    </ul>
    <li><strong>Проверка на стороне сервера</strong> - это проверка, которая возникает на сервере после отправки данных. Серверный код используется для проверки данных перед их сохранением в базе данных. Если данные не проходят проверку валидности, ответ отправляется обратно клиенту, чтобы сообщить пользователю, какие исправления должны быть сделаны. Проверка на стороне сервера не такая удобная, как проверка на стороне клиента, поскольку она не выдает ошибок до тех пор, пока не будет отправлена вся форма. Тем не менее, проверка на стороне сервера - это последняя линия защиты вашего приложения от неправильных или даже вредоносных данных. Все популярные <a href="https://developer.mozilla.org/en-US/docs/Learn/Server-side/First_steps/Web_frameworks" target="_blank">серверные фреймворки</a> имеют функции для проверки и очистки данных (что делает их безопасными).</li>
  </ul>
  <p>В реальном мире разработчики склонны использовать комбинацию проверки на стороне клиента и сервера.</p>
  <p></p>
  <p><strong>Использование встроенной проверки форм</strong></p>
  <p>Одной из особенностей HTML5 является возможность проверки большинства пользовательских данных без использования скриптов. Это делается с помощью <a href="https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/HTML5/Constraint_validation" target="_blank">атрибутов проверки элементов формы</a>, которые позволяют вам указывать правила ввода формы, например, нужно ли заполнять значение, минимальная и максимальная длина данных, должно ли это быть число, адрес электронной почты, адрес или что-то еще, и шаблон, которому это должно соответствовать. Если введенные данные соответствуют всем этим правилам, данные считаются валидными; если нет - невалидными.</p>
  <p>Когда элемент валидный:</p>
  <ul>
    <li>Элемент соответствует CSS псевдо-классу <a href="https://developer.mozilla.org/ru/docs/Web/CSS/:valid" target="_blank"><code>:valid</code></a> ; это позволяет вам применить конкретный стиль к валидным элементам.</li>
    <li>Если пользователь пытается отправить данные, браузер отправит форму, если нет ничего, остановит отправку (например, JavaScript).</li>
  </ul>
  <p>Если элемент невалидный:</p>
  <ul>
    <li>Элемент соответствует CSS псевдо-классу <a href="https://developer.mozilla.org/ru/docs/Web/CSS/:invalid" target="_blank"><code>:invalid</code></a>; это позволяет вам применить конкретный стиль к невалидным элементам.</li>
    <li>Если пользователь пытается отправить данные, браузер заблокирует форму и выдаст сообщение об ошибке.</li>
  </ul>
  <p></p>
  <p><strong>Ограничения проверки элементов input</strong></p>
  <p>В этом разделе мы рассмотрим некоторые функции HTML5, которые можно использовать для проверки <code>&lt;input&gt;</code> элементов.</p>
  <p>Начнем с простого примера - input, который позволяет вам выбирать ваш любимый плод между бананом и вишней. Он включает простой текст <code>&lt;input&gt;</code> соответствующий ярлык (label) и отправку (submit) <code>&lt;button&gt;</code>. Вы можете найти исходный код на GitHub <a href="https://github.com/mdn/learning-area/blob/master/html/forms/form-validation/fruit-start.html" target="_blank">fruit-start.html</a>,и живой пример ниже:</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/0d/9f/0d9f350c-6973-4a77-a33b-2d8148da0b96.png" width="1014" />
  </figure>
  <p>Простейшей функцией проверки HTML5 для использования является  <code><a href="https://developer.mozilla.org/ru/docs/Web/HTML/Element/input#attr-required" target="_blank">required</a></code> атрибут. Если вы хотите сделать ввод обязательным, вы можете пометить элемент, используя этот атрибут. Если этот атрибут установлен, форма не будет отправляться (и будет отображаться сообщение об ошибке), когда поле пустое (поле input также будет считаться невалидным).</p>
  <p>Добавьте атрибут <code>required</code> в ваш input, как показано выше </p>
  <figure class="m_original">
    <img src="https://teletype.in/files/b6/f8/b6f8e2fa-962e-4217-897f-feaebfe69256.png" width="1014" />
  </figure>
  <figure class="m_original">
    <img src="https://teletype.in/files/7f/a5/7fa564d2-e6d1-4fba-ac59-c5ea3a03abfc.png" width="674" />
  </figure>
  <p>Проверка формы не требует сложного JavaScript, но она требует тщательного изучения пользователя. Всегда помните, чтобы помочь вашему пользователю исправить данные, которые они предоставляют. Для этого обязательно выполните следующие действия:</p>
  <ul>
    <li>Отображать явные сообщения об ошибках.</li>
    <li>Будьте правдоподобны в отношении формата ввода.</li>
    <li>Укажите, где именно происходит ошибка (особенно на больших формах).</li>
  </ul>
  <hr />
  <p><strong>Полезные ссылки:</strong></p>
  <ol>
    <li><a href="https://developers.google.com/web/fundamentals/design-and-ux/input/forms/" target="_blank">Совете от Google по формам</a></li>
    <li><a href="https://www.w3schools.com/html/html_forms.asp" target="_blank">Повторить теорию о формах и пройти тест </a></li>
  </ol>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@webtabula/FWghRMHqQ</guid><link>https://teletype.in/@webtabula/FWghRMHqQ?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=webtabula</link><comments>https://teletype.in/@webtabula/FWghRMHqQ?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=webtabula#comments</comments><dc:creator>webtabula</dc:creator><title>[3 Урок] Структура HTML</title><pubDate>Sun, 10 May 2020 11:01:54 GMT</pubDate><media:content medium="image" url="https://teletype.in/files/ee/07/ee075a4d-251e-4b34-8e6b-fdf390aff4bf.png"></media:content><description><![CDATA[<img src="https://teletype.in/files/d9/8e/d98ea478-f528-430e-b526-c1505e6314e1.png"></img>Веб-страницы могут и будут отличаться друг от друга, но все они, преимущественно, состоят из аналогичных стандартных компонентов, если только страница не отображает полноэкранное видео или игру, не является частью какого-либо художественного проекта или просто плохо структурирована:]]></description><content:encoded><![CDATA[
  <figure class="m_original">
    <img src="https://teletype.in/files/d9/8e/d98ea478-f528-430e-b526-c1505e6314e1.png" width="1280" />
  </figure>
  <h2>Основные составляющие документа</h2>
  <p>Веб-страницы могут и будут отличаться друг от друга, но все они, преимущественно, состоят из аналогичных стандартных компонентов, если только страница не отображает полноэкранное видео или игру, не является частью какого-либо художественного проекта или просто плохо структурирована:</p>
  <p><strong>Заголовок</strong></p>
  <p>Обычно это большая полоса вверху страницы, с крупным заголовком и / или логотипом. Здесь указывается общая информация о веб-сайте, не меняющаяся от страницы к странице.</p>
  <p><strong>Навигационное меню</strong></p>
  <p>Ссылки на основные разделы сайта; обычно в виде кнопок, ссылок или вкладок. Также как и заголовок, навигация остается неизменной на всех страницах сайта — наличие непоследовательной навигации на Вашем сайте запутает и разочарует пользователей. Многие веб-дизайнеры считают панель навигации частью заголовка, а не отдельным компонентом, но это не является обязательным требованием; на самом деле, некоторые также утверждают, что их разделение на отдельные компоненты улучшает доступность, поскольку раздельная структура будет понятнее для людей, пользующихся считывателями экрана.</p>
  <p><strong>Основное содержимое</strong></p>
  <p>Большая область в центре страницы, содержащая, в основном, уникальный контент данной веб-страницы, например видео, которое вы хотите посмотреть, или рассказ, который вы читаете, или карту, которую вы хотите просмотреть, или заголовки новостей и т. д. Это одна из частей сайта, которая определенно будет меняться от страницы к странице!</p>
  <p><strong>Боковая панель</strong></p>
  <p>Как правило, содержит некоторую второстепенную информацию, ссылки, цитаты, рекламу и т.д. Обычно она относится к содержимому в основном контенте (например, на странице со статьей, боковая панель может содержать биографию автора или ссылки на связанные статьи), но в некоторых случаях здесь размещают и другие элементы, например, вторичную навигационную систему.</p>
  <p><strong>Подвал (футер)</strong></p>
  <p>Полоса в нижней части страницы, которая обычно содержит уведомления об авторских правах или контактную информацию. Это место для размещения общей информации (например, заголовка), но обычно эта информация не является критичной или вторична для самого веб-сайта. Нижний колонтитул также иногда используется для SEO целей, предоставляя ссылки для быстрого доступа к популярному контенту.</p>
  <p></p>
  <p>Для реализации такой семантической разметки HTML предоставляет выделенные теги, которые можно использовать для создания таких разделов, например:</p>
  <ul>
    <li><strong>Заголовок: </strong><code>&lt;header&gt;</code>.</li>
    <li><strong>Навигационное меню: </strong><code>&lt;nav&gt;</code>.</li>
    <li><strong>Основное содержимое: </strong><a href="https://developer.mozilla.org/ru/docs/Web/HTML/Element/main" target="_blank"><code>&lt;main&gt;</code></a>, с различными подразделами содержимого, представленными элементами <code>&lt;article&gt;</code>, <code>&lt;section&gt;</code> и <code>&lt;div&gt;</code>.</li>
    <li><strong>Боковая панель: </strong><code>&lt;aside&gt;</code>, обычно располагается внутри <code>&lt;main&gt;</code>.</li>
    <li><strong>Нижний колонтитул: </strong><code>&lt;footer&gt;</code>.</li>
  </ul>
  <figure class="m_original">
    <img src="https://teletype.in/files/4f/55/4f559aac-06fd-4f72-9959-08ae1c4e2ddd.png" width="914" />
  </figure>
  <figure class="m_original">
    <img src="https://teletype.in/files/dd/7e/dd7eefa2-34c0-4b67-8eed-7763ca7ca146.png" width="915" />
  </figure>
  <figure class="m_original">
    <img src="https://teletype.in/files/ce/ac/ceac1736-c689-4cb1-8fac-c0281de597af.png" width="915" />
  </figure>
  <h2>Подробнее об элементах HTML макета</h2>
  <p> Пока что это основные определения, которые вы должны попытаться понять:</p>
  <ul>
    <li><code>&lt;main&gt;</code> предназначен для содержимого, <em>уникального для этой страницы</em>. Используйте <code>&lt;main&gt;</code> только <em>один</em> раз на странице и размещайте прямо внутри <code>&lt;body&gt;</code>. В идеале он не должен быть вложен в другие элементы.</li>
    <li><code>&lt;article&gt;</code> окружает блок связанного содержимого, который имеет смысл сам по себе без остальной части страницы (например, один пост в блоге).</li>
    <li><code>&lt;section&gt;</code> подобен <code>&lt;article&gt;</code>, но больше подходит для группирования одной части страницы, которая представляет собой одну часть функциональности (например, мини-карту или набор заголовков статей и сводок). Считается хорошей практикой начинать каждый раздел с заголовка. Также обратите внимание, что в зависимости от контекста вы можете разбить <code>&lt;article&gt;</code> на несколько <code>&lt;section&gt;</code> или, наоборот, <code>&lt;section&gt;</code> на несколько <code>&lt;article&gt;</code>.</li>
    <li><code>&lt;aside&gt;</code> содержит контент, который не имеет прямого отношения к основному содержимому, но может содержать дополнительную информацию, косвенно связанную с ним (словарь, биография автора, связанные ссылки и т. д.).</li>
    <li><code>&lt;header&gt;</code> представляет собой группу вводного содержимого. Если он дочерний элемент <code>&lt;body&gt;</code>, то он определяет глобальный заголовок веб-страницы, но если он дочерний элемент <code>&lt;article&gt;</code> или <code>&lt;section&gt;</code>, то определяет конкретный заголовок для этого раздела (постарайтесь не путать его с titles и headings). </li>
    <li><code>&lt;nav&gt;</code> содержит основные функции навигации для страницы. Так же часто в нем можно увидеть логотип и / или название сайта или компании. Вторичные ссылки и т. д. не входят в навигацию.</li>
    <li><code>&lt;footer&gt;</code> представляет собой группу конечного контента для страницы.</li>
  </ul>
  <p></p>
  <h2>Несемантические обертки</h2>
  <p>случаев в HTML есть элементы <code>&lt;div&gt;</code> и <code>&lt;span&gt;</code>. Вам следует использовать их с подходящим значением атрибута <code>class</code> или <code>id</code>, чтобы можно было легко получить к ним доступ.</p>
  <p><code>&lt;span&gt;</code> — это строчный несемантический элемент, который стоит использовать только если Вы не можете подобрать более подходящий семантический текстовый элемент для обёртывания контента или если не хотите добавлять какие-либо конкретные значения. Например:</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/c8/42/c8420ee8-b157-41d2-b699-ba3256276961.png" width="933" />
  </figure>
  <p><code>&lt;div&gt;</code>- это блочный несемантический элемент, который следует использовать только если Вы не можете подобрать более подходящий семантический блочный элемент или если не хотите добавлять какие-либо конкретные значения. Например, представьте виджет корзины в интернет-магазине, который Вы можете открыть в любой момент нахождения на сайте:</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/9d/98/9d98366c-c4fd-4b7c-a35b-eb5b302d731a.png" width="914" />
  </figure>
  <p></p>
  <h2>Перенос строки и горизонтальный разделитель</h2>
  <p>Два элемента, которые Вы будете периодически использовать или захотите узнать о них: <code>&lt;br&gt;</code> и <code>&lt;hr&gt;</code>:</p>
  <p><code>&lt;br&gt;</code> создает разрыв строки в абзаце, и это единственный способ изменить жёсткую структуру в ситуации, когда Вам нужна серия фиксированных коротких строк, например, в почтовом адресе или стихотворении. Пример:</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/17/a4/17a40e13-bcba-414d-b681-88042206c155.png" width="915" />
  </figure>
  <p><code>&lt;hr&gt;</code> создает горизонтальный разделитель в документе, это означает тематическое изменение текста (например, изменение темы или сцены). Визуально он просто похож на горизонтальную линию. В качестве примера:</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/aa/f0/aaf08047-682d-4549-bbc9-b85874157264.png" width="912" />
  </figure>
  <p></p>
  <h2>Заключение</h2>
  <p>Вы стали лучше понимаеть, как структурировать веб-страницу или сайт. В последней статье этого модуля мы узнаем, как отлаживать HTML.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@webtabula/EbecbTa8u</guid><link>https://teletype.in/@webtabula/EbecbTa8u?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=webtabula</link><comments>https://teletype.in/@webtabula/EbecbTa8u?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=webtabula#comments</comments><dc:creator>webtabula</dc:creator><title>[2 Урок] Метаданные в HTML</title><pubDate>Sun, 10 May 2020 10:20:16 GMT</pubDate><media:content medium="image" url="https://teletype.in/files/0a/63/0a632067-4d43-491e-a0fe-2d2b8e2619c2.png"></media:content><description><![CDATA[<img src="https://teletype.in/files/39/46/39466054-90cf-4c1b-9671-e39aad02c71c.png"></img>Давайте снова посмотрим на HTML-документ из прошлой статьи:]]></description><content:encoded><![CDATA[
  <figure class="m_original">
    <img src="https://teletype.in/files/39/46/39466054-90cf-4c1b-9671-e39aad02c71c.png" width="1280" />
  </figure>
  <h2>Что такое &lt;head&gt;?</h2>
  <p>Давайте снова посмотрим на HTML-документ из прошлой статьи:</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/b5/df/b5df566c-de45-4ab7-99eb-4c8a29d6c32b.png" width="1016" />
  </figure>
  <p>Содержимое <code>&lt;head&gt;</code>, в отличие от содержимого элемента <code>&lt;body&gt;</code>, не отображается на странице. Задача &lt;head&gt; — хранить метаданныедокумента. В приведенном выше примере &lt;head&gt; совсем небольшой:</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/16/af/16aff85f-b1bc-4da2-8b59-197d8574e18b.png" width="1013" />
  </figure>
  <p></p>
  <h2>Название страницы (title)</h2>
  <p>Мы уже видели, как работает элемент <code>&lt;title&gt;</code>: его используют для добавления заголовка (названия страницы) в документ. Элемент <code>&lt;h1&gt;</code> тоже иногда назвают заголовком страницы. Но это разные вещи!</p>
  <ul>
    <li>Элемент <code>&lt;h1&gt;</code> виден на странице, открытой в браузере, — его используют <strong>один раз на странице</strong>, чтобы выделить название содержимого. Это может быть название истории, заголовок новости или что-то в этом роде.</li>
    <li>Элемент <code>&lt;title&gt;</code> — метаданные, название всего HTML-документа, а не заголовок внутри его содержимого, текст из <code>&lt;title&gt;</code> предлагается в качестве названия закладки.</li>
  </ul>
  <figure class="m_original">
    <img src="https://teletype.in/files/36/5c/365cd59b-05e3-4f90-ae4b-d114ff875445.png" width="606" />
  </figure>
  <h2>Метаданные: Элемент &lt;meta&gt;</h2>
  <p>Метаданные — данные, которые описывают данные. У HTML есть «официальное» место для метаданных документа — элемент <a href="https://developer.mozilla.org/ru/docs/Web/HTML/Element/meta" target="_blank"><code>&lt;meta&gt;</code></a>. Конечно, другие вещи, о которых мы говорим в этой статье, тоже можно назвать метаданными. Существует множество разновидностей <code>&lt;meta&gt;</code>. Не станем пытаться охватить их все сразу — так недолго и запутаться —, а рассмотрим несколько самых популярных, чтобы разобраться, что к чему.</p>
  <p></p>
  <h3>Указываем кодировку текста документа</h3>
  <p>В заголовке примера выше есть следующая строка:</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/f4/e1/f4e19257-c99a-4b71-8cff-cff42a8ee95a.png" width="1014" />
  </figure>
  <p>В этом элементе указана кодировка документа — набор символов, которые в нём можно использовать. <code>utf-8</code> — универсальный набор символов, который включает почти все символы со всех языков человечества. Такая веб-страница сможет работать с любым языком. Установить эту кодировку всех веб-страницах, которые вы создаёте — отличная идея! Страница в такой кодировке прекрасно отображает как английские, так и японские символы:</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/97/74/97747d88-186f-4a3c-a88e-073240f914f9.png" width="604" />
  </figure>
  <p>Если использовать, скажем, кодировку <code>ISO-8859-1</code>  (набор символов для латиницы), текст страницы испортится:</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/54/9a/549a4a23-20dd-4c70-b76e-955876935d63.png" width="1208" />
  </figure>
  <h3>Указываем автора и описание</h3>
  <p>У элементов <code>&lt;meta&gt;</code> часто есть атрибуты <code>name</code> и <code>content</code>:</p>
  <ul>
    <li><code>name</code> — тип элемента, то есть какие именно метаданные он содержит.</li>
    <li><code>content</code> — сами метаданные.</li>
  </ul>
  <p>Два полезных элемента метаданных — указание автора страницы и краткое описание её содержимого. Рассмотрим эти элементы на примере:</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/ca/2b/ca2b6dfd-48c6-413c-87fa-b74f00fc89d1.png" width="1013" />
  </figure>
  <p>По указанному имени автора (author) можно найти человека, который написал страницу, и связаться с ним. Некоторые системы управления содержимым (CMS ) автоматически обрабатывают эту информацию и делают её доступной для таких целей.</p>
  <p>Краткое описание (description) содержимого страницы учитывается поисковыми системами при совпадении ключевых слов. Такое называют поисковой оптимизацией, или SEO.</p>
  <p></p>
  <h2>Добавление иконок</h2>
  <p>Чтобы добавить своему сайту узнаваемости, можно указать в метаданных разные иконки.</p>
  <p><a href="https://ru.wikipedia.org/wiki/Favicon" target="_blank">Favicon</a>, один из старожилов интернета, стал первой из таких иконок. Браузеры показывают её в заголовке вкладки и в списке избранных страниц.</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/6c/3d/6c3d8791-9e4d-4dec-a01c-40f23eb5d89f.png" width="693" />
  </figure>
  <p>Чтобы добавить на страницу favicon:</p>
  <ol>
    <li>Сохраните изображение в формате <code>.ico</code> (многие браузеры поддерживают и в более привычных форматах, таких как <code>.gif</code> или <code>.png</code>) в папку со своим документом. Старые браузеры, например, Internet Explorer 6, поддерживают только формат <code>.ico</code></li>
    <li>Добавьте ссылку на иконку в <code>&lt;head&gt;</code> документа:</li>
  </ol>
  <figure class="m_original">
    <img src="https://teletype.in/files/2f/91/2f917ba1-9e9b-4f09-89a5-a41bbf5bb145.png" width="651" />
  </figure>
  <p>Для разных устройств можно указывать разные иконки. Например, на главной странице MDN:</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/c8/10/c8100a3e-df6b-4482-99b6-b76620273805.png" width="1282" />
  </figure>
  <p>В комментариях указано, для чего используется каждая иконка — например, при добавлении страницы на домашний экран iPad будет использована иконка в высоком разрешении. </p>
  <p>Не беспокойтесь о реализации всех этих типов значков — это довольно продвинутая функция, и мы не станем возвращаться к ней в курсе. Основная цель — показать вам, что это такое, если вы столкнетесь с ними при просмотре исходного кода других веб-сайтов.</p>
  <p></p>
  <h2>Подключение CSS и JavaScript</h2>
  <p>Современные сайты используют CSS, чтобы выглядеть привлекательнее, и добавляют интерактивные функции через JavaScript: видеоплееры, карты, игры. Обычно связянные стили добавляют на страницу через элемент <code>&lt;link&gt;</code>, а скрипты — через элемент <code>&lt;script&gt;</code> .</p>
  <ul>
    <li>Элемент <code>&lt;link&gt;</code> помещают в заголовок документа. У него есть два атрибута: <code>rel=&quot;stylesheet&quot;</code> показывает, что мы указываем <em>стиль</em> документа, а в <code>href</code> указан путь к файлу:</li>
  </ul>
  <figure class="m_original">
    <img src="https://teletype.in/files/16/41/16412308-040e-446b-9ab1-f4451671146e.png" width="633" />
  </figure>
  <ul>
    <li>Элемент  <code>&lt;script&gt;</code> не обязательно находится в заголовке — на самом деле лучше поместить его в самом конце страницы, прямо перед закрывающем тегом <code>&lt;/body&gt;</code>. Так браузер сначала отобразит саму страницу, а уже затем загрузит и запустит скрипт — иначе скрипт может обратиться к ещё не созданному элементу страницы и сломаться.</li>
  </ul>
  <figure class="m_original">
    <img src="https://teletype.in/files/96/8a/968ac432-f73d-4fd3-8f2a-ffdde2034dc1.png" width="634" />
  </figure>
  <p><strong>Примечание</strong>: Элемент <code>&lt;script&gt;</code> кажется пустым, но это не всегда так, и указывать закрывающий тег обязательно. Вместо того чтобы ссылаться на внешний скрипт, код можно писать прямо внутри этого элемента — так можно не тратить время на загрузку отдельного скрипта, но зато не выйдет сослаться на один js-файл с нескольких страниц.</p>
  <p></p>
  <h2>Язык страницы </h2>
  <p>Наконец, стоит отметить, что вы можете (и действительно должны) установить язык для своей страницы. Это можно сделать, добавив атрибут lang в открывающий HTML-тег (как в примере meta-example.html: и как показано ниже):</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/f3/f3/f3f36547-0778-4f88-a060-164bb4d3e660.png" width="1016" />
  </figure>
  <p>Это полезно во многих случаях. Ваш HTML-документ будет более эффективно индексироваться поисковыми системами, если его язык установлен (что позволяет ему правильно отображаться в языковых результатах), и он полезен людям с нарушением зрения, которые используют программы, читающие страницы вслух (например, слово &quot;шесть&quot; пишется одинаково как на французском, так и на английском языках, но произносится по-разному.).</p>
  <p>Можно также указать язык для части документа. Например, мы могли бы установить язык для части страницы на японском:</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/92/21/92219410-4918-4b27-9312-223b31d143cd.png" width="1014" />
  </figure>
  <h2></h2>
  <h2>Заключение</h2>
  <p>На этом заканчивается наш беглый обзор по HTML-блоку head — с его помощью вы можете делать гораздо больше, но исчерпывающий обзор будет скучным и запутанным на этом этапе, мы же сейчас хотели дать вам представление о самых распространённых вещах, которые вы можете там найти! В следующей статье мы рассмотрим основы разметки текста в HTML.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@webtabula/ee1fZGOXG</guid><link>https://teletype.in/@webtabula/ee1fZGOXG?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=webtabula</link><comments>https://teletype.in/@webtabula/ee1fZGOXG?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=webtabula#comments</comments><dc:creator>webtabula</dc:creator><title>[1 Урок] Основы HTML</title><pubDate>Sun, 10 May 2020 09:00:11 GMT</pubDate><media:content medium="image" url="https://teletype.in/files/e0/df/e0df6248-ff1d-44e6-8b49-ba5a100d3f23.png"></media:content><description><![CDATA[<img src="https://teletype.in/files/83/fb/83fbfe40-8460-4d15-b55b-fbefc306fb1f.png"></img>HTML не является языком программирования, это язык разметки, и используется, чтобы сообщать вашему браузеру, как отображать веб-страницы, которые вы посещаете. Он может быть сложным или простым, в зависимости от того, как хочет веб-дизайнер. HTML состоит из ряда элементов, которые вы используете, чтобы вкладывать или оборачивать различные части контента, чтобы заставить контент отображаться или действовать определенным образом. Ограждающие теги могут сделать слово или изображение ссылкой на что-то еще, могут сделать слова курсивом, сделать шрифт больше или меньше и так далее.]]></description><content:encoded><![CDATA[
  <figure class="m_original">
    <img src="https://teletype.in/files/83/fb/83fbfe40-8460-4d15-b55b-fbefc306fb1f.png" width="1280" />
    <figcaption>@lifeincodee</figcaption>
  </figure>
  <h2>Что такое HTML ?</h2>
  <p><strong>HTML не является языком программирования</strong>, это <em>язык разметки</em>, и используется, чтобы сообщать вашему браузеру, как отображать веб-страницы, которые вы посещаете. Он может быть сложным или простым, в зависимости от того, как хочет веб-дизайнер. HTML состоит из ряда <strong>элементов</strong>, которые вы используете, чтобы вкладывать или оборачивать различные части контента, чтобы заставить контент отображаться или действовать определенным образом. Ограждающие теги могут сделать слово или изображение ссылкой на что-то еще, могут сделать слова курсивом, сделать шрифт больше или меньше и так далее.</p>
  <p></p>
  <h2>Анатомия HTML</h2>
  <p>Давайте рассмотрим из чего состоит тэг <strong>&lt;p&gt;&lt;/p&gt;</strong></p>
  <figure class="m_original">
    <img src="https://teletype.in/files/15/1b/151b18a5-e136-4c3d-9149-7683464e5a77.png" width="821" />
    <figcaption>@lifeincodee</figcaption>
  </figure>
  <ol>
    <li><strong>Открывающий тег (Opening tag)</strong>: Состоит из имени элемента (в данном случае, &quot;p&quot;), заключенного в открывающие и закрывающие <strong>угловые скобки</strong>. Открывающий тег указывает, где элемент начинается или начинает действовать, в данном случае — где начинается абзац.</li>
    <li><strong>Закрывающий тег (Closing tag):</strong> Это то же самое, что и открывающий тег, за исключением того, что он включает в себя косую черту перед именем элемента. Закрывающий элемент указывает, где элемент заканчивается, в данном случае — где заканчивается абзац. Отсутствие закрывающего тега является одной из наиболее распространенных ошибок начинающих и может приводить к странным результатам.</li>
    <li><strong>Контент (Content)</strong>: Это контент элемента, который в данном случае является просто текстом.</li>
    <li><strong>Элемент(Element)</strong>: Открывающий тег, закрывающий тег и контент вместе составляют элемент.</li>
  </ol>
  <p>Элементы также могут иметь атрибуты, которые выглядят так:</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/b4/26/b4267ba8-fd00-4afb-bab6-d7388462685a.png" width="1287" />
    <figcaption>@lifeincodee</figcaption>
  </figure>
  <p>В данном случае, class это <em>имя атрибута, </em>а <code>editor-note</code>  это <em>значение атрибута</em>. Класс позволяет дать элементу идентификационное имя, которое может позже использоваться, чтобы обращаться к элементу с информацией о стиле и прочих вещах.</p>
  <p></p>
  <h2>Вложенные элементы</h2>
  <p>Вы также можете располагать элементы внутри других элементов — это называется <strong>вложением</strong>. Если мы хотим заявить, что наша кошка <strong>очень </strong>раздражена, мы можем заключить слово &quot;очень&quot; в элемент <code>&lt;strong&gt;</code>, который указывает, что слово должно быть сильно акцентированно:</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/29/8d/298d5c40-4e28-4705-b26d-79cf032001fd.png" width="1017" />
    <figcaption>@lifeincodee</figcaption>
  </figure>
  <p>Вы, однако, должны убедиться, что ваши элементы правильно вложены: в примере выше мы открыли первым элемент <code>&lt;p&gt;</code>, затем элемент <code>&lt;strong&gt;</code>, потом мы должны закрыть сначала элемент <code>&lt;strong&gt;</code>, затем <code>&lt;p&gt;</code>. Приведенное ниже неверно:</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/ac/3c/ac3cd68b-9bc6-45fe-97f4-57e21fe92599.png" width="1018" />
    <figcaption>@lifeincodee</figcaption>
  </figure>
  <p></p>
  <h2>Пустые элементы</h2>
  <p>Некоторые элементы не имеют контента, и называются <strong>пустыми элементами</strong>.</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/76/11/761106a0-f374-4773-989d-a9875773d063.png" width="1015" />
    <figcaption>@lifeincodee</figcaption>
  </figure>
  <p>Он содержит два атрибута, но не имеет закрывающего тега <code>&lt;/img&gt;</code>, и никакого внутреннего контента. Это потому, что элемент изображения не оборачивает контент для влияния на него. Его целью является вставка изображения в HTML страницу в нужном месте. <br /><br />Так же мы видим внутри тэга <code>&lt;img&gt;</code> два атрибута <code>src=&quot;images/firefox-icon.png&quot;</code> - данный атрибут показывает путь, т.е. откуда брать картинку, и <code>alt=&quot;Моё тестовое изображение&quot;</code> - в этом атрибуте, вы указываете поясняющий текст для пользователей, которые не могут увидеть изображение.</p>
  <p></p>
  <h2>Анатомия HTML документа</h2>
  <figure class="m_original">
    <img src="https://teletype.in/files/7d/15/7d154c93-576d-4daa-bd1b-d86b529cdbf4.png" width="1016" />
  </figure>
  <p>Здесь мы имеем:</p>
  <ul>
    <li><code>&lt;!DOCTYPE html&gt;</code> — доктайп. В прошлом, когда HTML был молод (около 1991/1992), доктайпы должны были выступать в качестве ссылки на набор правил, которым HTML страница должна была следовать, чтобы считаться хорошим HTML, что могло означать автоматическую проверку ошибок и другие полезные вещи. Однако в наши дни, никто не заботится об этом, и они на самом деле просто исторический артефакт, который должен быть включен для того, что бы все работало правильно. На данный момент это все, что вам нужно знать.</li>
    <li><code>&lt;html&gt;&lt;/html&gt;</code> — элемент <a href="https://developer.mozilla.org/ru/docs/Web/HTML/Element/html" target="_blank"><code>&lt;html&gt;</code></a>. Этот элемент оборачивает весь контент на всей странице, и иногда известен как корневой элемент.</li>
    <li><code>&lt;head&gt;&lt;/head&gt;</code> — элемент <a href="https://developer.mozilla.org/ru/docs/Web/HTML/Element/head" target="_blank"><code>&lt;head&gt;</code></a>. Этот элемент выступает в качестве контейнера для всего, что вы пожелаете включить на HTML страницу, но<em> не являющегося </em>контентом, который вы показываете пользователям вашей страницы. К ним относятся такие вещи, как ключевые слова и описание страницы, которые будут появляться в результатах поиска, CSS стили нашего контента, кодировка и многое другое.</li>
    <li><code>&lt;body&gt;&lt;/body&gt;</code> — элемент <a href="https://developer.mozilla.org/ru/docs/Web/HTML/Element/body" target="_blank"><code>&lt;body&gt;</code></a>. В нем содержится <em>весь</em> контент, который вы хотите показывать пользователям, когда они посещают вашу страницу, будь то текст, изображения, видео, игры, проигрываемые аудиодорожки или что-то еще.</li>
    <li><code>&lt;meta charset=&quot;utf-8&quot;&gt;</code> — этот элемент устанавливает UTF-8 кодировку вашего документа, которая включает в себя большинство символов из всех известных человечеству языков. По сути, теперь документ может обрабатывать любой текстовый контент, который вы в него вложите. Нет причин не устанавливать её, так как это может помочь избежать некоторых проблем в дальнейшем.</li>
    <li><code>&lt;title&gt;&lt;/title&gt;</code> — элемент <a href="https://developer.mozilla.org/ru/docs/Web/HTML/Element/title" target="_blank"><code>&lt;title&gt;</code></a>. Этот элемент устанавливает заголовок для вашей страницы, который является названием, появляющимся на вкладке браузера загружаемой страницы, и используется для описания страницы, когда вы добавляете ее в закладки/избранное.</li>
  </ul>
  <p></p>
  <h2>Текст в HTML</h2>
  <p>В этом разделе рассмотрим некоторые из основных HTML элементов, которые вы будете использовать для разметки текста.</p>
  <p></p>
  <h3>Заголовки</h3>
  <p>Элементы заголовка позволяют вам указывать определенные части вашего контента в качестве заголовков или подзаголовков. Точно так же, как книга имеет название, названия глав и подзаголовков, HTML документ может содержать то же самое. HTML включает шесть уровней заголовков <code>&lt;h1&gt;</code> - <code>&lt;h6&gt;</code>, хотя обычно вы будете использовать не более 3-4:</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/1a/6e/1a6e7507-6ddd-4cc1-b451-20be7545ceab.png" width="1016" />
  </figure>
  <h3>Абзацы</h3>
  <p>Как было сказано раньше, элемент <code>&lt;p&gt;</code> предназначен для абзацев текста; вы будете использовать их регулярно при разметке текстового контента:</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/53/2c/532cd861-e8f4-4753-95ef-ef62b566406f.png" width="1016" />
  </figure>
  <h3>Списки</h3>
  <p>Большая часть веб-контента является списками и HTML имеет специальные элементы для них. Разметка списка всегда состоит по меньшей мере из двух элементов. Наиболее распространенными типами списков являются нумерованные и ненумерованные списки:</p>
  <ol>
    <li><strong>Ненумерованные списки</strong> - это списки, где порядок пунктов не имеет значения, как в списке покупок. Они оборачиваются в элемент <a href="https://developer.mozilla.org/ru/docs/Web/HTML/Element/ul" target="_blank"><code>&lt;ul&gt;</code></a>.</li>
    <li><strong>Нумерованные списки -</strong> это списки, где порядок пунктов имеет значение, как в рецепте. Они оборачиваются в элемент <a href="https://developer.mozilla.org/ru/docs/Web/HTML/Element/ol" target="_blank"><code>&lt;ol&gt;</code></a>.</li>
  </ol>
  <p>Каждый пункт внутри списков располагается внутри элемента <a href="https://developer.mozilla.org/ru/docs/Web/HTML/Element/li" target="_blank"><code>&lt;li&gt;</code></a> (list item, элемент списка).</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/3d/01/3d01c0f1-5701-45bf-9459-0c50247e0263.png" width="1015" />
  </figure>
  <h3>Ссылки</h3>
  <p>Ссылки очень важны — это то, что делает Интернет Интернетом. Чтобы добавить ссылку, нам нужно использовать простой элемент — <a href="https://developer.mozilla.org/ru/docs/Web/HTML/Element/a" target="_blank"><code>&lt;a&gt;</code></a> — <em>a</em> это сокращение от &quot;anchor&quot; (&quot;якорь&quot;). Чтобы текст в вашем абзаце стал ссылкой, выполните следующие действия:</p>
  <p>1. Выберите некоторый текст. Мы выбрали текст &quot;Манифест Mozilla&quot;.</p>
  <p>2. Оберните текст в элемент <a href="https://developer.mozilla.org/ru/docs/Web/HTML/Element/a" target="_blank"><code>&lt;a&gt;</code></a>, например так:</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/f4/9c/f49c4613-7a89-408a-815d-a10542279ba0.png" width="633" />
  </figure>
  <p>3. Задайте элементу <a href="https://developer.mozilla.org/ru/docs/Web/HTML/Element/a" target="_blank"><code>&lt;a&gt;</code></a> атрибут href, например так:</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/77/b1/77b1be56-dab3-41d2-9203-2de18617cf82.png" width="634" />
  </figure>
  <p>4. Заполните значение этого атрибута веб-адресом, на который вы хотите указать ссылку:</p>
  <figure class="m_original">
    <img src="https://teletype.in/files/3c/6e/3c6eca85-0d06-476a-a4ff-fc2e9fa9e1ff.png" width="801" />
  </figure>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@webtabula/aLmqaitw0</guid><link>https://teletype.in/@webtabula/aLmqaitw0?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=webtabula</link><comments>https://teletype.in/@webtabula/aLmqaitw0?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=webtabula#comments</comments><dc:creator>webtabula</dc:creator><title>Что такое JAVA ?</title><pubDate>Sun, 10 May 2020 04:47:59 GMT</pubDate><media:content medium="image" url="https://teletype.in/files/ac/bf/acbfa189-01df-49eb-92fb-e79c68915463.png"></media:content><description><![CDATA[<img src="https://teletype.in/files/91/02/9102efea-dd3d-4b97-8bba-117a4b117953.png"></img>Даже если вы никогда не интересовались программированием, скорее всего, вы слышали название Java — и не просто так. Это один из самых популярных в мире языков программирования: он был создан в 1995 году, быстро набрал популярность и уже много лет её не теряет. В рейтинге TIOBE за ноябрь 2019 года Java заняла первое место, а по статистике GitHub — третье: второе место занял Python, а первое — JavaScript.]]></description><content:encoded><![CDATA[
  <figure class="m_original">
    <img src="https://teletype.in/files/91/02/9102efea-dd3d-4b97-8bba-117a4b117953.png" width="1280" />
    <figcaption>@lifeincodee</figcaption>
  </figure>
  <p>Даже если вы никогда не интересовались программированием, скорее всего, вы слышали название Java — и не просто так. Это один из самых популярных в мире языков программирования: он был создан в 1995 году, быстро набрал популярность и уже много лет её не теряет. В рейтинге <a href="https://www.tiobe.com/tiobe-index/" target="_blank"><u>TIOBE</u></a> за ноябрь 2019 года Java заняла первое место, а по статистике <a href="https://octoverse.github.com/" target="_blank"><u>GitHub</u></a> — третье: второе место занял Python, а первое — JavaScript.</p>
  <p>Java используют везде: вы найдёте её почти во всех больших компаниях, в том числе в Netflix, AliExpress, Google, Intel, eBay, TripAdvisor и многих других.</p>
  <p>Кстати, назвали этот язык в честь одного из сортов кофе.</p>
  <figure class="m_original">
    <img src="https://248006.selcdn.ru/main/upload/setka_images/14171019032020_db52642fc67f6c7c46657360f234a883af322464.png" width="400" />
  </figure>
  <p><br /></p>
  <h3>Java: что за зверь?</h3>
  <p>Java — мультифункциональный объектно-ориентированный язык со строгой типизацией.</p>
  <p>Что это значит?</p>
  <p>С мультифункциональностью всё достаточно просто: Java действительно почти «волшебная таблетка» — на ней можно разрабатывать десктопные приложения, приложения под Android, заниматься веб-разработкой… Подробнее об этом ниже.</p>
  <p>Строгая (сильная) типизация не позволяет смешивать в выражениях разные типы и не выполняет автоматически неявные преобразования. Это добавляет мороки: какие-то части приходится прописывать самому, а свободы у вас меньше, — зато в обмен на это вы получаете надёжность.</p>
  <p>Объектно-ориентированный язык — это язык, созданный по модели <a href="https://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BD%D0%BE-%D0%BE%D1%80%D0%B8%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5" target="_blank"><u>объектно-ориентированного программирования</u></a>. В ней существуют классы и объекты. Классы — это типы данных, а объекты — представители классов. Вы создаёте их сами, даёте названия и присваиваете им свойства и операции, которые с ними можно выполнять. Это как конструктор, который позволяет построить то, что вы хотите. Именно с помощью этой системы объектов в основном программируют на Java.</p>
  <figure class="m_original">
    <img src="https://248006.selcdn.ru/main/upload/setka_images/15014919032020_d58f50d1222620cd1cfe95da3a91221bd0d26e65.png" width="770" />
    <figcaption>Что общего у объектно-ориентированных программистов и марксистов? И те, и другие думают о классовой структуре. Источник</figcaption>
  </figure>
  <p><br /></p>
  <h3>Что можно писать на Java</h3>
  <p>Как мы отметили выше, Java используется во многих сферах. На ней пишут:</p>
  <ul>
    <li>приложения для Android — Java практически единственный язык для них;</li>
    <li>десктопные приложения;</li>
    <li>промышленные программы;</li>
    <li>банковские программы;</li>
    <li>научные программы;</li>
    <li>программы для работы с Big Data;</li>
    <li>веб-приложения, веб-сервера, сервера приложений;</li>
    <li>встроенные системы — от маленьких чипов до специальных компьютеров;</li>
    <li>корпоративный софт.</li>
  </ul>
  <p>Чаще всего вы встретите Java в веб-разработке и в приложениях для Android, но и в остальных сферах она тоже очень популярна.</p>
  <h3>Плюсы и минусы Java</h3>
  <p>У всех качеств Java, будь то строгая типизация или объектная ориентированность, есть свои плюсы и минусы, а ещё они есть у самой Java как у языка.</p>
  <h4>Плюсы</h4>
  <ul>
    <li>Независимость — ваш код будет работать на любой платформе, которая поддерживает Java.</li>
    <li>Надёжность — в немалой мере достигается благодаря строгой статической типизации.</li>
    <li>Мультифункциональность.</li>
    <li>Сравнительно простой синтаксис.</li>
    <li>Java — основной язык для Android-разработки.</li>
    <li>Объектно-ориентированное программирование (ООП) тоже приносит много выгод:</li>
  </ul>
  <ol>
    <li>параллельная разработка;</li>
    <li>гибкость;</li>
    <li>одни и те же классы можно использовать много раз;</li>
    <li>код хорошо организован, и его легче поддерживать.</li>
  </ol>
  <h4>Минусы</h4>
  <ul>
    <li>Низкая скорость (по сравнению с С и С++).</li>
    <li>Требует много памяти.</li>
    <li>Нет поддержки низкоуровневого программирования (Java — высокоуровневый язык). Например, у неё нет указателей.</li>
    <li>С <a href="https://java.com/en/download/release_notice.jsp" target="_blank"><u>2019 года</u></a> обновления для бизнеса и коммерческого использования стали платными.</li>
    <li>Для ООП нужен опыт, а планирование новой программы занимает много времени.</li>
  </ul>
  <h4>Спорный момент</h4>
  <ul>
    <li>Автоматическая сборка мусора (Garbage collection): с одной стороны это выгода, но с другой стороны, разработчик не может контролировать процесс, хотя иногда это важно.</li>
  </ul>
  <h3>Есть ли у Java альтернатива?</h3>
  <p>Может показаться, что Java — абсолютный лидер и у неё нет соперников, но на самом деле всё совсем наоборот. Её часто сравнивают с С# и Python, и это только главные «противники». Давайте посмотрим на них внимательнее.</p>
  <h3>Java против Python</h3>
  <p>Java и Python соревнуются не первый год: в рейтингах они раз за разом занимают места рядом друг с другом (вот <a href="https://octoverse.github.com/" target="_blank"><u>рейтинг 2019 года</u></a>). Сравнивают их не просто так, у них действительно есть общие черты: оба языка очень популярные, объектно-ориентированные и работают вне зависимости от платформы.</p>
  <p>Давайте посмотрим, что у них различается.</p>
  <h4>Типизация</h4>
  <p>У Java статическая типизация: вы должны прописывать тип данных, когда вводите новую переменную.</p>
  <p>У Python динамическая типизация: это значит, что типы данных не надо прописывать, они определяются автоматически. Ещё одно отличие типизации: в Python разные типы переменных можно смешивать. Но и тут есть свои границы: например, вы можете сделать массив со строками и числами, но прибавить строку к числу уже нельзя.</p>
  <p>Python даст вам больше гибкости и лёгкости в написании, зато Java предупредит ошибки.</p>
  <h4>Читаемость</h4>
  <p>Этот пункт связан с предыдущим, потому что то же указание типов влияет на конечный вид кода. Хотя у Java достаточно простой синтаксис по сравнению с другими языками, здесь Python выигрывает. Гораздо лучше слов эту разницу покажет пример.</p>
  <p>Вот так может выглядеть код в Python:</p>
  <figure class="m_original">
    <img src="https://248006.selcdn.ru/main/upload/setka_images/15014919032020_27e9aa5bdf801f94f7728fe14d1ac08405e5a691.png" width="821" />
  </figure>
  <p><br /></p>
  <p>То же самое, написанное в Java:</p>
  <figure class="m_original">
    <img src="https://248006.selcdn.ru/main/upload/setka_images/15014919032020_e3ea06ecc4efe66fd609360c227a5daace25eda6.png" width="770" />
    <figcaption>Источник</figcaption>
  </figure>
  <p><br /></p>
  <p>В целом у синтаксиса в Python простая ясная структура, он хорошо читается, его можно даже назвать интуитивным. Он хорошо подойдёт новичкам.</p>
  <p>В Java код более комплексный, со множеством слов и знаков: на английском такой синтаксис называют словом «verbose», то есть «говорливый» код, многословный. Он хуже читается и может быть сложноват для новичков, хотя многие разработчики чувствуют себя комфортнее со строгим синтаксисом.</p>
  <h4>Скорость</h4>
  <p>Здесь уже Java явный победитель. По сравнению с С и С++ она, может, и не самая быстрая, но Python явно отстаёт от Java по скорости и производительности. В обоих языках приложения переводятся в байт-код (это позволяет им быть кроссплатформенными), но разница кроется в том, когда это происходит: Java компилирует заранее, с помощью JIT-компиляции (динамической компиляции), а Python — во время выполнения программы. В итоге Java значительно быстрее.</p>
  <h3>Java против С#</h3>
  <p>Как и в случае с Python, C# сравнивают с Java не просто так: это тоже объектно-ориентированный язык со статической типизацией, и даже синтаксис у Java и C# похож.</p>
  <p>Теперь посмотрим на их различия.</p>
  <h4>Безопасность</h4>
  <p>Один из параметров языков программирования — типобезопасность (безопасность системы типов). Если язык безопасный, то после проверки согласования типов в них уже не появится ошибка во время выполнения.</p>
  <p>Несмотря на то что до твёрдого звания типобезопасного языка ни С#, ни Java не дотягивают, Java достаточно надёжная и разрабатывалась так, чтобы не допускать ошибок в этой области. В C# есть указатели, и такой доступ к памяти делает его менее безопасным.</p>
  <h4>Указатели и управление памятью</h4>
  <p>Вообще, если вам важно работать с указателями (например, вы хотите работать с памятью на более низком уровне), то лучше выбирать из совсем других языков (С, С++). Но если сравнивать эти два, C# побеждает: в отличие от Java, здесь указатели всё-таки есть, хоть и сильно ограниченные.</p>
  <h4>Поддержка платформ</h4>
  <p>C# разработан компанией Microsoft для их собственной экосистемы, поэтому на нём разрабатывается ПО специально для Windows. Java в этом смысле более универсальная — на ней можно писать приложения для почти любых платформ.</p>
  <h4>Применение</h4>
  <p>Если вы хотите писать веб-приложения, мессенджеры или приложения на Android или ещё не определились и поэтому хотите что-то универсальное — ваш выбор ясен: Java замечательно подойдёт.</p>
  <p>Если же вы хотите разрабатывать приложения для Windows, то что может быть лучше, чем язык, специально для этого созданный? Кстати, C# очень хорош для разработки игр и проектов с виртуальной реальностью.</p>
  <h3>А что с работой?</h3>
  <p>Прежде чем учить какой-то язык программирования, вы наверняка хотите знать: «А что же потом?»</p>
  <p>Поэтому мы собрали для вас небольшую статистику по вакансиям.</p>
  <p>На <a href="https://rabota.yandex.ru/moskva/vakansii/?text=%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%81%D1%82%20java&salary_from=0" target="_blank"><u>Яндекс.Работе</u></a> в Москве от 900 до 1000 вакансий для Java-разработчиков, а на <a href="https://hh.ru/search/vacancy?area=1&st=searchVacancy&text=%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%81%D1%82+java&from=suggest_post" target="_blank"><u>HeadHunter</u></a> — около 2000 (все данные приведены за декабрь 2019 года).</p>
  <p>Вакансии, в которых указана зарплата, начинаются от 70 тысяч рублей. Большинство предложений попадает в диапазон от 100 до 200 тысяч, а продвинутым разработчикам предлагают до 300 тысяч рублей.</p>
  <p>Как вы видите, Java-разработчики востребованы, и даже по московским меркам у них хорошая зарплата (по <a href="https://hh.ru/article/25494" target="_blank"><u>данным Банка заработных плат HeadHunter</u></a>, средняя зарплата по Москве в третьем квартале 2019 года составила 85 707 рублей).</p>
  <p>Ещё одна возможность — работа из дома. Её выгода в том, что вам не обязательно искать предложения в одном городе. Например, HeadHunter показывает 318 предложений удалённой работы в России, с зарплатами от 90 до 150 тысяч рублей. При желании и знании языка вы можете искать варианты даже в других страна</p>
  <h3>Легко ли новичку учить Java?</h3>
  <p>Java легче некоторых других языков, например таких как С и С++. Большую роль в этом играет то, что в Java вам не придётся разбираться с управлением памятью. С другой стороны, как мы уже говорили, синтаксис в том же Python проще, а типизация свободнее.</p>
  <p>Если вы совсем новичок, то учить Java может быть сложновато, и стоит подумать о языках с более простым синтаксисом. Но если у вас уже есть минимальный опыт программирования, то Java — хороший выбор. Вы научитесь программированию, не распыляясь на работу с памятью, а ещё освоите объектно-ориентированное программирование. ООП не стоит бояться: оно скорее упрощает работу, чем наоборот.</p>
  <p>Значит ли это, что не стоит пробовать, если у вас нет опыта? Вовсе нет. Если вы действительно хотите работать именно с Java, то всё-таки сможете разобраться в ней с нуля: это зависит от вашей мотивации и того, сколько времени готовы на это потратить.</p>
  <h3>Резюмируем</h3>
  <p>Итак, Java — популярный мультифункциональный язык.</p>
  <p>Она достаточно надёжная, быстрая, пригодится почти везде, и у неё несложный синтаксис по сравнению со многими другими языками. Да, есть языки ещё проще, но если у вас нет цели выбрать самый лёгкий, то Java — удачный средний вариант.</p>
  <p>Java — замечательный выбор для веб-разработки, разработки приложений на Android, а также если вы хотите попробовать себя в объектно-ориентированном программировании.</p>
  <p><br /></p>
  <p>____________________________________________________________________________</p>
  <p>Если вы всерьёз заинтересовались Java, то освоить этот язык вам поможет курс <a href="https://course.skillbox.ru/profession-java/?utm_term=whatisjavafornovice&media=whatisjavafornovice&advcake_params=bb36be1a36b4b1a78476ff7f4d6ea3c0&utm_source=advcake&utm_medium=cpa&utm_campaign=admitad&utm_content=1068048" target="_blank">«Профессия Java-разработчик»</a>. Там вы не только освоите теорию, но и напишете свои первые программы на Java — в команде других разработчиков и под руководством наставника.</p>

]]></content:encoded></item></channel></rss>