Общие положения.
< > </> парный тэг должен закрываться, далее, в нужном месте. Иначе можно
получить непредсказуемо феерические эффекты.
< тэг {атрибут =””}|атрибут =””> </> многие тэги имеют атрибуты, обязательные или
же нет.
[ ] - при описании синтаксиса команд обозначают необязательный параметр,
атрибут.
{ } - фигурные скобки - при описании синтаксиса команд обозначают, что должен
быть выбран один из параметров, которые находятся внутри скобок, например,
запись {ON | OFF} обозначает, что должно быть выбрано одно из значений: “ON”
или “OFF”.
| - вертикальная черта - используется при описании синтаксиса команды как
символ обозначающий “или”, например, запись {ON | OFF} обозначает, что должно
быть выбрано одно из значений: “ON” или “OFF”.
{атрибут1}|{атрибут2} можно использовать атрибут1 или атрибут2, или не
использовать ни одного. (есть неточности, проверить)
Голубым цветом я обозначаю то, что может находится в html файле.
Этим оттенком зеленого - то, что может находится в css файле.
<!doctype html>
Оформление текста
Следует отметить, что теги <b> и <strong>, также как <i> и <em>
являются не совсем эквивалентными и заменяемыми. Первый тег <b> —
является тегом физической разметки и устанавливает жирный текст, а тег
<strong> — тегом логической разметки и определяет важность
помеченного текста. Такое разделение тегов на логическое и физическое
форматирование изначально предназначалось, чтобы сделать HTML
универсальным, в том числе не зависящим от устройства вывода
информации. Теоретически, если воспользоваться, например, речевым
браузером, то текст, оформленный с помощью тегов <b> и <strong>, будет
произнесен по-разному. Однако получилось так, что в популярных
браузерах результат использования этих тегов равнозначен.
http://endseo.ru/2013/10/11/vliyanie-tegov-strong-b-em-i-na-prodvizhenie/
Цитирую: Согласно спецификациям W3C, предписывается использовать
тег <strong> взамен устаревшему <b>, и аналогично тег <em> вместо
устаревшего <i>. Но это всего лишь рекомендации и их исполнение мало
влияет на продвижение сайта.
<s>... </s> - зачеркнутый текст. (Показать в гугл доке нет возможности.) У этого тэга
существовала другая форма записи - <strike> , но в спецификации HTML 5 его
использование было не рекомендовано, так как считается что эту функцию
желательно реализовывать через css. Более того, <s> также считается
“осуждаемым тэгом” из тех же соображений.
Underline и strike варианты написания текста рекомендуется задавать через css
стиль.
Комбинируя <b> и <i> или <b>, <u>, <i>, <s> мы ожидаемо получаем наклонный
жирный текст или совсем уж мутации в виде наклонного, жирного, подчеркнутого и
зачеркнутого текста )).
Есть еще несколько интересных, но реже используемых тэгов форматирования:
<small>...</small> уменьшает размер шрифта на единицу по сравнению с обычным
текстом. http://htmlbook.ru/html/small
<big> …</big> увеличивает размер шрифта на единицу по сравнению с
обычным текстом.
<sub>...</sub> subscript подстрочный текст (нижний индекс) и его братец
<sup>...</sup> superscript надстрочный текст (верхний индекс). http://htmlbook.ru/html/sub
http://htmlbook.ru/html/sup
<tt> … </tt> - tele type - отображает текст моноширинным текстом.
Моноширинный, или непропорциональный шрифт — это шрифт, в котором
все знаки (точнее, кегельные площадки знаков) имеют одинаковую
ширину.
Списки
<ul>
<li>Чебурашка</li>
<li>Крокодил Гена</li>
<li>Шапокляк</li>
</ul>
Эти три типа маркера (и другие не добавляются) также могут быть заданы в css
файле, причем они перекроют тип заданный в html файле.
<dl>
<dt>GIF</dt>
<dd>Формат графических файлов, широко
применяемый при создании сайтов.
GIF использует 8-битовый цвет и эффективно
сжимает сплошные цветные области,
при этом сохраняя детали изображения.</dd>
<dt>JPEG
<dd>Популярный формат графических файлов,
широко применямый при создании
сайтов и хранения изображений. JPEG
поддерживает 24-битовый цвет и сохраняет
яркость и оттенки цветов в фотографиях. Данный
формат называют сжатием с потерями,
поскольку алгоритм JPEG выборочно отвергает
данные. Метод сжатия может исказить
деталь в рисунке, особенно содержащий текст
или изображение с четкими краями.
Формат JPEG не поддерживает прозрачность,
когда вы сохраняете фотографию в формате
JPEG, прозрачные пиксели заполняются
определенным цветом.</dd>
</dl>
Таблицы
Минимальный набор тэгов формирующих таблицу выглядит так:
<table>
<tr>
<td>...</td>
</tr>
</table>
<th>...</th> -тег <th> предназначен для создания одной ячейки таблицы, которая
обозначается как заголовочная. Текст в такой ячейке отображается браузером
обычно жирным шрифтом и выравнивается по центру. Тег <th> должен
размещаться внутри контейнера <tr>, который в свою очередь располагается внутри
тега <table>.
<td> имеет полезный атрибут - colspan. Его использование объединяет ячейки по
горизонтали.
<td colspan="2"> или
<td colspan="3">
Ранее изученные тэги говорят браузеру, какой текст выводить на экран. Но при
просмотре кода разметки они ни каким образом не указывают на смысл этого
текста, на то, в какой части сайта текст виден. Естественно, смотря на код мы
видим, какая фраза, заголовок, идет после какого, но можно оформлять текст в
более удобном, нам же для дальнейшего редактирования, виде. Сейчас будет
понятно ))). Для этого придуманы семантические тэги.
<header>, <footer>, <nav>, <article>, <main>, <section>, <aside> и прочие.
При написании кода мы используем их, соответсвенно той части сайта которую
пишем, а внутри работаем с “безликими” <div>, <span> и прочими тегами деления
сайта на блоки. (Внутри которых находится само содержимое странички).
Более того, это влияет на позицию сайта в поисковой выдаче. Цитирую
“Семантический HTML5 устраняет этот недостаток, определяя точные теги для
пояснения четкой роли контента на странице. Эта дополнительная информация
помогает роботам/индексаторам, таким как Google и Bing лучше понять какой
контент важен, какой является второстепенным, какой используется для навигации
и так далее. Добавляя семантические HTML теги на ваши страницы, вы даете
дополнительную информацию, которая помогает поисковикам понимать роли и
относительную важность разных частей ваших страниц.”
<section>...</section> задаёт раздел документа, может применяться для блока
новостей, контактной информации, глав текста, вкладок в диалоговом окне и др.
Раздел обычно содержит заголовок. Допускается вкладывать один тег <section>
внутрь другого.
Формы
<form>...</form>
● accept-charset - устанавливает кодировку, в которой сервер может принимать
и обрабатывать данные.
● action - адрес программы или документа, который обрабатывает данные
формы. При верстке сайта , до включения в работу программистов,
допустимо указать “/”
● autocomplete - включает автозаполнение полей формы.
● enctype - способ кодирования данных формы.
● method - метод протокола HTTP. При верстке сайта , до включения в работу
программистов, допустимо указать “post”
● name - имя формы.
● novalidate - отменяет встроенную проверку данных формы на корректность
ввода.
● target - имя окна или фрейма, куда обработчик будет загружать
возвращаемый результат. Значения атрибута те-же, что и в случае с <a>
Также для этого тега доступны универсальные атрибуты и события.
<div class="form-group">
<label for="male">муж</label>
<input type="radio" name="chose-male" id="male">
<label for="female">жен</label>
<input type="radio" name="chose-male" id="female">
</div>
Значение - checkbox
Все просто:
<div class="form-group">
<label for="agree">прочитал правила и согласен с ними</label>
<input type="checkbox" name="agree" id="agree">
</div>
<div class="form-group">
<label for="Фото">Фото</label>
<input type="file" name="photo" id="photo">
</div>
label - метка
<label>...</label>
Этот тэг не заменяет атрибут placeholder. placeholder “живет” внутри окна ввода,
а label снаружи.
примеры:
<div class="form-group">
<label for="name">Ваше имя</label>
<input class="form-input" type="text" name="name" id="name">
</div>
<div class="form-group">
<label> <input class="form-input" type="text" >Ваше имя</label>
</div>
Для того чтобы метка отрисовалась над полем ввода, в нашем примере, надо
свойству display класса form-input назначить свойство block. Как следствие он
рисуется с новой строки, под меткой.
<div class="form-group">
<select name="country" >
<option> Рига</option>
<option> Даугавпилс</option>
</select>
</div>
button - кнопка
Атрибуты - http://htmlbook.ru/html/button
● type -
○ button обычная кнопка. Сама по себе делает то, что ничего не делает.
Полезна для программистов.
○ reset - кнопка для очистки введенных данных формы и возвращения
значений в первоначальное состояние.
○ submit - кнопка для отправки данных формы на сервер.
Пример:
<fieldset>
<legend>Личные данные</legend>
<div class="form-group">
<label for="name">Ваше имя</label>
<input class="form-input" type="text" name="name" id="name">
</div>
<div class="form-group">
<input class="form-input" type="email" name="email" placeholder="Ваш
email">
</div>
<div class="form-group">
<input class="form-input" type="tel" name="tel" placeholder="Ваш номер
телефона">
</div>
<div class="form-group">
<input class="form-input" type="password" name="name"
placeholder="Придумайте пароль">
</div>
<div>
<textarea class="textarea" name="text" placeholder="О вас"> </textarea>
</div>
</fieldset>
Ссылки и изображения
Ссылка для страницы нашего сайта или страницы в инете:
<a href="URL">текст ссылки</a> впрочем работает и без кавычек.
тэг <a>...</a> - anchor - якорь. Этот тэг имеет еще несколько интересных
атрибутов, но сейчас нас в первую очередь интересует href (hyper-reference
гипер-ссылка) и непосредственно с ним связанные target и download
атрибут - href="URL” (Universal Resource Locator, универсальный указатель
ресурса), иными словами, адрес документа, на который следует перейти.
Ссылка будет открыта в текущей вкладке броузера
Cодержимое контейнера <a> является ссылкой. Текст, расположенный между
тегами <a> и </a>, по умолчанию становится синего цвета и подчеркивается.
<a href="https://www.google.com/"> Другой сайт</a> или
<a href="https://google.com/"> Другой сайт</a> - это переход сами видите куда,
но
<a href="google.com"> Другой сайт</a
<a href="www.google.com"> Другой сайт</a>
приведут лишь на страницу с одинокой надписью - Cannot GET /google.com
или Cannot GET /www.google.com или попросту файл не найден - адрес сайта
надо писать полностью, с протоколом.
Для открытия ссылки не в текущей вкладке броузера применяется атрибут
target.
● _blank — загружает страницу в новое окно браузера;
● _self — загружает страницу в текущее окно;
● _parent — загружает страницу во фрейм-родитель;
● _top — отменяет все фреймы и загружает страницу в полном окне браузера.
Когда у target указано неизвестное значение, например, имя фрейма набрано с
ошибкой, то это приводит к тому, что ссылка открывается в новом окне.
Если на веб-странице необходимо сделать, чтобы все ссылки открывались в
новом окне, нет необходимости добавлять во все теги <a> target="_blank". Код
можно сократить, если вначале страницы, в <head> добавить строку <base
target="_blank">
Глобальные атрибуты.
Наряду с атрибутами, характерными для конкретных тегов, в HTML5 существует
и ряд атрибутов, который можно добавлять к любым тегам, поэтому входящие в эту
группу атрибуты называются глобальными или универсальными.
Несмотря на то, что глобальные атрибуты можно использовать со всеми HTML
тегами, на некоторые теги они не окажут никакого влияния. Например, если
добавить атрибут title или dir к тегу <br>, то никаких визуальных изменений на веб
странице наблюдаться не будет.
Это:
accesskey
class -
contenteditable
dir
draggable
hidden id
lang
spellcheck
style
tabindex
title - атрибут title используется для указания дополнительной информации о
содержимом элемента (отображается браузерами в виде всплывающей текстовой
подсказки при наведении курсора мыши на элемент).
Атрибут title часто используется с картинками, для добавления описания
картинки:
<img src="1.png" title="Красивый синий цветок">
Примечание: внешний вид и размер всплывающей подсказки, шрифт и цвет
текста, зависят от браузера и не могут быть изменены с помощью CSS стилей.
CSS
Идея использования CSS заключается в том, что в HTML файле находится сам
текст сайта, его семантика, таблицы, картинки, формы и прочее, а в CSS файле
находится описание того как эти элементы отображаются на странице, (за
некоторыми исключениями). Это описание и называется стилем.
!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Глобальные стили</title>
<style>
H1 {
font-size: 120%;
font-family: Verdana, Arial, Helvetica, sans-serif;
color: #333366;
}
</style>
</head>
<body>
<h1>Hello, world!</h1>
</body>
</html>
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Внутренние стили</title>
</head>
<body>
<p style="font-size: 120%; font-family: monospace; color: #cd66cc">Пример текста</p>
</body>
</html>
Внутренние стили рекомендуется применять на сайте ограниченно или вообще
отказаться от их использования. Дело в том, что добавление таких стилей
увеличивает общий объем файлов, что ведет к повышению времени их загрузки в
браузере, и усложняет редактирование документов для разработчиков.
Кроме того, в разных русскоязычных источниках есть
разночтения, внутренними стилями называют и глобальные
стили также.
Импорт CSS
В текущую стилевую таблицу можно импортировать содержимое CSS-файла с
помощью команды @import. Этот метод допускается использовать совместно с
внешней или внутренней таблицей стилей, но никак не со встроенными стилями.
Общий синтаксис следующий.
@/*style.css*/
@import url("gallery.css");
@import "mobile.css";
.image_link {
color: #5f5d5f;
}
.image {
max-width: 100%;
max-height: 150px;
}
.footer {
background-color: black;
color: white;
}
/*gallery.css*/
.gallery {
max-width: 80;
margin: 30px auto;
overflow: hidden;
}
.image_card {
float: left;
list-style-type: none;
font: 10px/1.5 Verdana, Helvetica, Sans-serif;
width: 16%;
margin: 2%;
}
/*mobile.css*/
/* Medium Devices, Desktops */
@media only screen and (max-width : 992px) {
.image_card {
width: 21%; }
}
/* Small Devices, Tablets */
@media only screen and (max-width : 768px) {
.image_card {
width: 29%; }
}
/* Extra Small Devices, Phones */
@media only screen and (max-width : 480px) {
.image_card {
width: 46%; }
}
/* Custom, iPhone Retina */
@media only screen and (max-width : 320px) {
.image_card {
width: 96%; }
}
<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8">
<!-- <link rel="stylesheet" href="css/style.css"> -->
<title>Float masonry</title>
<style media="all">
@import url(css/style.css);
</style>
</head>
Селекторы
Для того что-бы применить стиль к какому либо тэгу или группе тэгов надо к нему
обратиться, другими словами выбрать его/их. Делается это указанием селектора.
Заглавные и строчные буквы в именах классов не одно и тоже для браузера.
Селекторы бывают разных видов.
Селекторы по классу
Селекторы по идентификатору
Селекторы по атрибуту
Если нам надо выбрать все тэги по наличию, какого-либо атрибута в любом тэге
или конкретном тэге - делается так:
[attr] { Описание правил стиля }
[type] {
color:blueviolet;
}
- предположим мы описуем форму ввода. В этом примере весь текст
вводимый (не placeholder) в полях ввода input и надписи на кнопках button
будут голубо-фиолетовыми, атрибут type в тэге присутствует, а его значение
нам не важно. Но вот в случае если type=”file” фиолетовой становится только
надпись “файл не выбран”, надпись на кнопке остается черной, надо
разобраться
p[title] {
color: blue;
}
- будут выбраны все тэги абзаца имеющие атрибут title в не зависимости от
его значения. Селектором в данном случае является просто имя тэга.
еще:
/* Все span с атрибутом "lang" будут жирными */
span[lang] {font-weight:bold;}
мой пример:
[class*="articl"]{
color: red;
}
весь текст в тэгах у которых есть атрибут class он равен, в моем случае, - article,
article-title, article-date, article-text перекрашен в красный цвет.
Комбинаторы
“,”
Если необходимо применить одинаковый стиль сразу к нескольким различным
элементам веб-страницы, можно указать необходимые селекторы через запятую,
создав тем самым группу селекторов:
/* Одинаковый стиль у трёх элементов */
h1 { color: #f1cd33; }
span { color: #f1cd33; }
p { color: #f1cd33; }
/* Тоже самое, только селекторы перечислены через запятую */
h1, span, p { color: #f1cd33; }
““
Комбинатор потомков используется для выбора одного или более элементов-
потомков, независимо от их уровня вложенности, внутри элемента-предка.
“>”
Комбинатор дочерних элементов обозначается знаком "больше чем" (>) и
используется внутри селектора, между двумя простыми селекторами указывая
взаимосвязь между ними. Задача данного селектора - выбор указанных дочерних
элементов внутри родительского элемента, чтобы стало понятнее рассмотрим это
на небольшом примере.
Комбинатор дочерних элементов
“+”
Комбинатор соседних сестринских элементов используется для выбора
определенного элемента, который размещается в коде непосредственно после
другого элемента.
Комбинатор соседних сестринских элементов обозначается символом + (плюс),
который ставится между двумя селекторами, указывая взаимосвязь между ними. Из
двух соседних сестринских элементов, определяемых селекторами
расположенными по обеим сторонам от комбинатора, комбинатор применяет стиль
к тому элементу, который определяется селектором стоящим справа от
комбинатора.
Рассмотрим, как это работает на небольшом примере:
div + p { color: blue; }
Таким образом мы указали, что стиль будет применен ко всем элементам <p>,
которые расположены в коде непосредственно после элементов <div>.
Между комбинатором соседних сестринских элементов и селекторами допускается
ставить пробел, он никак не повлияет на работу комбинатора:
div+p
div+ p
div +p
div + p
Комбинатор элемент+элемент | CSS селектор
“~”
Комбинатор элемент1~элемент2 используется для выбора элемента2 следующего
за элементом1, так же заданный стиль будет применен ко всем последующим
элементам2, которые расположены далее.
Оба элемента должны иметь одного родителя.
p~ul { background-color: red; }
Все списки после абзаца будут выведены на красном фоне.
Комбинатор элемент1~элемент2 | CSS селектор
Переменные css
Изучите CSS-переменные за 5 минут | by Alexey Pyltsyn | devSchacht
Чтобы объявить переменную, вам сначала нужно решить, в какой области должна
быть переменная. Если вы хотите, чтобы она была доступна глобально, просто
определите её в псевдоклассе :root, который соответствует корневому элементу в
дереве документов (обычно это тег <html>).
Поскольку переменные наследуются, следующий ниже код делает вашу
переменную доступной во всём вашем приложении, так как все ваши DOM-
элементы являются потомками тега <html>.
:root {
--main-color: #ff6f69;
}
Как вы можете видеть, вы объявляете переменную точно так же, как вы бы
установили любое свойство CSS. Однако переменная должна начинаться с двух
дефисов (--).
Для получения доступа к переменной, вам нужно использовать функцию var() и
передать имя переменной в качестве первого параметра.
#title {
color: var(--main-color);
}
И это назначит вашему заголовку цвет #ff6f69
Функция var поддерживает второй параметр, фолбэк, то есть значение (или также
CSS-переменная), которое будет использоваться, если переменная, переданная
первым параметром, не определена, например:
#title {
color: var(--main-color, black);
}
Если переменная main-color недоступна, то будет использоваться черный цвет
(black).
Вы также можете создавать переменные с локальной областью видимости,
который будут доступны только для того элемента, в котором они были объявлены,
включая его дочерние элементы.
Свойства текста
уменьшенного размера.
inherit - наследует значение родителя
/line-height - из типографики пошла запись указывать через слэш размер шрифта
и межстрочное расстояние (интерлиньяж, он же line-height).
Осторожно! Если вы ранее определили одно из свойств шрифта и используете
впоследствии свойство font, то оно перепишет заданные ранее значения.
Свойства списков
Маркированный список
● circle - Маркер в виде кружка.
● disc - Маркер в виде точки.
● square -Маркер в виде квадрата.
Нумерованный список
● armenian - Традиционная армянская нумерация.
● decimal - Арабские числа (1, 2, 3, 4,...).
● decimal-leading-zero - Арабские числа с нулем впереди для цифр меньше
десяти (01, 02, 03,...).
● georgian - Традиционная грузинская нумерация.
● lower-alpha - Строчные латинские буквы (a, b, c, d,...).
● lower-greek - Строчные греческие буквы (α, β, γ, δ,...).
● lower-latin - Это значение аналогично lower-alpha.
● lower-roman - Римские числа в нижнем регистре (i, ii, iii, iv, v,...).
● upper-alpha - Заглавные латинские буквы (A, B, C, D,...).
● upper-latin - Это значение аналогично upper-alpha.
● upper-roman - Римские числа в верхнем регистре (I, II, III, IV, V,...).
● none - Отменяет маркеры для списка.
● inherit - Наследует значение родителя.
Универсальные свойства
● border-style -
● border-color - устанавливает цвет границы, значение может быть в любом
допустимом для CSS формате.
● inherit - наследует значение родителя.
groove, ridge - рифленая 3D граница. Лучше рассмотреть на увеличенном
рисунке. Эффект зависит от значения border-color
border на самом деле сокращенный вариант записи, он объединяет в себе
следующие:
border: 1px solid #ccc;
Можем записать раздельно -
border-width: 1px;
border-style: solid;
border-color: #ccc;
Допустимо указание значений свойства для каждой стороны отдельно:
border-top: 1px solid #000;
border-right: 2px solid #red;
border-bottom: 3px solid #aqua;
border-left: 4px solid #brown;
Учитывая основополагающий факт, что css свойства, как и текст html, браузером
обрабатываются по строкам, сверху вниз, для задания, например, границы с трех
сторон кроме верхней записываем:
border: 1px solid #000;
border-top: none;
Вторая строка просто отменит “часть” первой.
Таким же образом мы и style можем задавать для каждой стороны как отдельно
так и вместе:
border-style: solid dotted none dotted; Как и в padding-e и margine-e при указании 4
параметров мы указываем верх (12 часов), право (3 часа), низ (6 часов) и лево (9
часов).
В общем вариантов масса.
box-shadow: 0px 0px 10px 40px aqua, 0px 0px 30px 60px green;
background: url(../img/box-with-dot.jpg) 50% 50% no-repeat;
Гнутая картинка
При использовании 4-х значений это свойство представляет из себя краткую форму
записи сразу 4-х свойств - padding-bottom, padding-left, padding-right, padding-top.
margin: универсальное свойство, устанавливает величину отступа от
каждого края элемента.
Свойство margin позволяет задать величину отступа сразу для всех сторон
элемента или определить ее только для указанных сторон, как и в padding. (Что-бы
легче запомнить за что отвечает каждая цифра, если указывать 4 значения - первая
цифра - полдень, 12 часов, вторая - 3 часа, третья - 6 часов, четвертая - 9 часов).
auto - Указывает, что размер отступов будет автоматически рассчитан
браузером.
Например - margin: 10px auto; блочный элемент будет иметь отступы по 10
пикселей от соседних элементов и выровнен по ширине страницы.
Выравнивание блока по центру через значение auto работает только в сочетании
с width.
Остальные атрибуты имеют то же смысл что и в свойстве padding
Значение margin-а может быть отрицательным. Отрицательные margin-
right/bottom заставляют другие элементы думать, что блок меньше по размеру
справа-внизу, чем он на самом деле. отрицательный margin сокращает расстояние
между элементами, вплоть до того, что эти элементы будут перекрывать друг друга.
Можно записывать в виде: margin-bottom, margin--left, margin--right, margin-top.
Далее я подобрал картинки которые помогут понять разницу между padding и
margin
margin-ы могут схлопнуться, это означает не их уничтожение а замену двух
соседних на один, больший из двух.
<div class="square-fixed">
</div>
.square-fixed {
width: 50px;
height: 50px;
background-color: red;
position: fixed;
top: 50%;
left: 50%;
margin-top: -25px;
margin-left: -25px;
}
Вместо margin мы можем использовать transform
transform: translate(-25px, -25px);
transform: none|transform-functions|inherit;
transform-functions:
● none - преобразование не применяется.
● matrix(a, c, b, d, x, y) - применяет 2D преобразование с помощью матрицы из
шести значений.
Значение a изменяет масштаб по горизонтали. Значение от 0 до 1
уменьшает элемент, больше 1 — увеличивает.
Значение c деформирует (сдвигает) стороны элемента по оси Y,
положительное значение — вверх, отрицательное — вниз.
Значение b деформирует (сдвигает) стороны элемента по оси X,
положительное значение — влево, отрицательное — вправо.
Значение d изменяет масштаб по вертикали. Значение меньше 1
уменьшает элемент, больше 1 — увеличивает.
Значение x смещает элемент по оси X, положительное — вправо,
отрицательное — влево.
Значение y смещает элемент по оси Y, положительное значение —
вниз, отрицательное — вверх.
https://webref.ru/layout/advanced-html-css/transform
https://html5book.ru/css3-transform/
transform-origin: смещает центр трансформации, относительно которого
происходит изменение положения/размера/формы элемента.
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>transform-origin</title>
<style>
div {
background: #fc0;
padding: 10px;
display: inline-block;
border: 1px solid #000;
}
div:hover {
/* Точка поворота в правом верхнем углу */
-webkit-transform-origin: 100% 0;
-moz-transform-origin: 100% 0;
-o-transform-origin: 100% 0;
-ms-transform-origin: 100% 0;
transform-origin: 100% 0;
/* Поворачиваем на 20 градусов против часовой стрелки */
-webkit-transform: rotate(-20deg);
-moz-transform: rotate(-20deg);
-o-transform: rotate(-20deg);
-ms-transform: rotate(-20deg);
transform: rotate(-20deg);
}
</style>
</head>
<body>
<div>Пример</div>
</body>
</html>
В данном примере при наведении курсора на элемент он поворачивается на
20 градусов против часовой стрелки относительно правого верхнего угла.
Float
На момент написания этого справочника (конец 2020г.) эта технология считается
устаревшей. Ей на смену пришли Flex и Grid. Но знать Float необходимо, масса
старый сайтов могут нуждаться в модификации вашими руками. К тому же, если
аккуратно работать с этой технологией - результат предсказуем и красив.
Float - плавать, всплывать.
Распространенный пример :
Поскольку плавающий
элемент был удалён из потока
документа остальные блочные
элементы, расположенные в
коде после него, смещаются на
его место, будто этого
элемента там и не было.
Несмотря на то, что
плавающий элемент был
удален из нормального потока,
на строчное содержимого, тем
не менее он влияет. В отличие от блочных элементов, строчное содержимое,
расположенное в коде после плавающего элемента, учитывает его границы и
обтекает его, то есть происходит обтекание текстом плавающего блока:
Если в примере на картинке будет использован <div> вместо <p> то ничего не
изменится. За исключение отступа вокруг абзацев, естественно.
Кроме того, margin примененный к <p> не обеспечит дистанцию его текста от
текста в “amazing”. Он ведь находится “внутри” абзаца. А вот применяя margin к
“amazing” мы добьемся нужного эффекта.
В одном ряду можно размещать более одного плавающего элемента, если это
позволяет ширина родительского элемента. Если ширины родительского элемента
не хватает, то плавающие элементы, которые не помещаются в ряд с остальными
плавающими элементами, будут смещены вниз. Что бы небыло лишних проблем с
содержимым float-ов не забываем о box-sizing.
.wrapper:after {
content: " ";
display: table;
clear: both;
}
● Применить другой “хак”. Всего лишь сделать родительский элемент для float-
ов inline-block. Альтернатива для .clearfix / Хабр
● Применить свойство overflow: auto (или hidden) к контейнеру. Заставляет
браузер рассчитать высоту контейнера и изменить ее так, чтобы включать
плавающие элементы, иначе ему бы пришлось добавить полосу прокрутки
или скрыть их. Впрочем, иногда это случается, поэтому будьте осторожны.
Но учтите, если они есть, то мы потеряем абсолютно позиционированные
элементы.
Кроме того, оба этих хака и overflow (но конечно не width) выполнят ту-же
функцию, что и clear: both;
Flex
Хочу сразу сказать огромное спасибо Стасу Багретсову за его прекрасную работу
- Вёрстка на Flexbox в CSS. Полный справочник | by Stas Bagretsov
Flex - Flexible - гибкий, уступчивый.
Flex это не просто свойство, я могу назвать это технологией, столь она обширна
Flexbox разметка предоставляет возможность гибкого позиционирования и
изменения размера контейнеров внутри родителя имеющего свойство display: flex
Этот метод, набор свойств, также называют одномерным. Flex очень удобен для
размещения и манипуляций с контейнерами расположенными в строку или столбец.
Для работы с двумерной матрицей существует Grid разметка. Но. Есть
определенные хитрости для двухмерности и у flex-а.
Flexbox совершенно не зависит от направления размещения контейнеров. Это
удобно, ведь блочные элементы базируются на вертикальном расположении, а
стройные на горизонтальном.
Элементы в flexbox могут располагаться вдоль основной оси (от main-start до
main-end) или же вдоль поперечной оси (от cross-start до cross-end).
Main axis — основная ось flex контейнера, вдоль которой располагаются flex
элементы. Обратите внимание, что ей необязательно быть горизонтальной, все
зависит от свойства flex-direction, о котором вы прочитаете позже.
Main-start | main-end — Flex элементы расположены в рамках контейнера,
начиная от main-start и заканчивая main-end.
Main-size — высота или ширина flex элемента, что зависит от того, в каком
направлении идёт основная ось.
Cross axis — ось перпендикулярная главной оси, называется поперечной. Её
направление зависит от направления главной оси.
Cross-start | cross-end — flex линии, заполненные элементами и расположенные в
контейнере от cross-start до cross-end.
Cross-size — Ширина или высота flex-элемента, в зависимости от направления
главной оси.
float, clear и vertical-align не имеют эффекта для flex элементов
wrap-заворачивать.
Изначально все flex-элементы будут пытаться уместиться в одну строку. Вы
можете поменять это и дать возможность этим элементам переходить на другую
строку, при переполнении ширины контейнера.
● nowrap — это значение по-дефолту, при котором все flex элементы будут
выстраиваться в одну линию.
● wrap — flex элементы будут переноситься на несколько строк, от верха к
низу.
● wrap-reverse — flex элементы будут переноситься на несколько строк снизу
вверх.
Работает одинаково и при переполнении через указание width и через flex-basis.
flow - поток
flex-flow: <'flex-direction'> || <'flex-wrap'>
По умолчанию - flex-flow: row nowrap;
Это свойство определяет стандартное поведение того, как flex элементы будут
располагаться вдоль поперечной оси (cross axis) на заданной строке. Это
своебразная версия justify-content, но только для поперечной оси, которая
перпендикулярна главной.
● flex-start — всё размещается с начала поперечной оси
● flex-end — все элементы размещаются с конца поперечной оси
● center — элементы центрируются по поперечной оси
● baseline — элементы выравниваются по базовой линии. Базовая линия -
условная линия проходящая под первой строкой текста не учитывая
свисания и нижние выносные элементы букв вниз, проще говоря без
хвостиков вниз как - ф, р, у в этом шрифте и тому подобное…..
● stretch — это дефолтное состояние, при котором элементы заполняют
контейнер, с учетом min-width и max-width.
а вот при direction:column все немного странно, надо разобраться.Вертикальное и
горизонтальное центрирование всего и вся в CSS Flexbox
gradient:
Нулю градусов (или 360º) соответствует градиент снизу вверх, далее отсчёт
ведётся по часовой стрелке. Отсчёт угла наклона градиентной линии показан ниже.
Для значения top left и ему подобных угол наклона градиентной линии
вычисляется, исходя из размеров элемента так, чтобы соединять две диагонально
противоположные угловые точки.
Еще примеры:
Начальную точку градиента можно задавать в любом месте элемента, для этого
вначале указывается её позиция.
.circle {
height: 100px;
width: 100px;
border-radius: 50px;
background: #55ddff; /* Старые браузеры */
background: radial-gradient(#55ddff, #0081b5);
}
Если установлено одно значение, оно задает ширину фона, второе значение
принимается за auto. Пропорции картинки при этом сохраняются. Использование
двух значений через пробел задает ширину и высоту фоновой картинки.
С этими значениями удобно экспериментировать в инспекторе кода.
Здесь:
Наследование свойств
Наследованием называется возможность переноса правил форматирования от
элементов- родителей элементам-потомкам, в случае если они не определены у
них вручную.
В наследовании много ньюансов, сюда все включать не стану.
С точки зрения свойств
Наследуется меньшая часть свойств CSS. К наследуемым относятся в основном
свойства, определяющие параметры отображения текста:
font-size, font-family, font-style, font-weight, color, text-align, text-transform, text-
indent, line-height, letter-spacing, word-spacing, white-space, direction и другие.
Также к наследуемым свойствам относятся list-style, cursor, visibility, border-
collapse и некоторые другие. Но они используются значительно реже.
Вот интересная статья: Наследование, каскадность и специфичность в CSS | Info-
line.net
Наследуемые свойства можно и нужно задавать через предков, следуя структуре
документа.
Механизм наследования — многоуровневый, то есть его эффект не только
распространяется на прямых потомков (дочерние элементы), но и переносится на
все вложенные элементы. Если, например, <em> и <strong> расположены внутри
<p>, то они также наследуют атрибуты любого стиля, применяемого к <body>.
Например, параметры текста зачастую не меняются в пределах крупных блоков
страницы: меню, основного содержания, информационных панелей. Поэтому общие
параметры текста (цвет, размер, гарнитура) обычно указывают в стилях этих
крупных блоков.
Как правило, свойства, которые затрагивают размещение элементов на странице
(отступы (поля), границы (рамки) элементов), не наследуются.
Весь список наследуемых свойств вы можете найти в стандарте CSS.
Ну а не наследуемые можно заставить наследовать ))))
Рамка у <body> не наследуется. И это очень хорошо ), иначе представьте весь
сайт с десятками рамок, вокруг каждого абзаца, раздела в котором эти абзацы
находяться и т.п.
С помощью inherit можно указать, чтобы элемент принудительно наследовал
значение свойства у своего предка.
Например - чтобы заставить теги <p> таки унаследовать рамку border от своего
предка <body>, необходимо записать:
p{
border: inherit;
}
Родителем некоторых свойств является не <body> и даже не <html> а сам
броузер, например синее подчеркивание ссылок или размер текста в h1-h6.
Свойства, у которых имеется уточнение обстоятельств (при наведении мыши;
если один тег вложен в другой, и тд.) имеют приоритет над свойствами, указанными
для всех остальных случаев. Ещё один важный момент: если после значения CSS
свойства поставить пробел и написать !important, то это свойство всегда и везде
будет иметь наивысший приоритет.
Свойства, указанные для класса (class) или уникального идентификатора (id),
имеют высший приоритет, причем приоритет у id, выше чем у class.
(доразобраться)
* {padding: 0; margin: 0}
еще пример:
blockquote:before {
content: open-quote;
}
blockquote:after {
content: close-quote;
}
psevdo-title {
margin: 0px;
font-size: 30px;
}
psevdo-title:before {
content: "1.";
font-size: 15;
color: green;
}
.psevdo-title:after {
content: ".1";
}
1.Псевдоэлементы.1
.psevdo-title:before {
content: "";
margin: 50px 0;
display: block;
width: 50px;
height: 3px;
background-color: #274fbc
}
Что характерно курсором выделяется только часть прописанная в html, точки с
единичками в буфер не отправишь.
position для псевдоэлементов работает так же как для элементов.
Центрируем полоски и надпись по горизонтальной оси
.psevdo-title {
margin: 0px;
font-size: 30px;
text-align: center;
position: relative;
}
.psevdo-title:before {
content: "";
margin: 5px auto;
display: block;
width: 50px;
height: 3px;
background-color: aquamarine;
position: absolute;
left: 50%;
margin-left: -25px;
bottom: 5px;
}
.psevdo-title:after {
content: "";
margin: 5px auto;
display: block;
width: 50px;
height: 3px;
background-color: #274fbc
}
:first-letter - стилизация первой буквы абзаца.
<div class="psevdo-text">
<p> Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Quisque ut lorem sit amet velit condimentum dignissim.
Nullam pellentesque tristique orci a laoreet. Ut venenatis
ullamcorper metus iaculis malesuada. Quisque ullamcorper
placerat malesuada. D</p>
</div>
.psevdo-text p:first-letter {
color: red;
font-size: 50px;
}
Получаем:
Динамические псевдоклассы
.btn:hover, .btn:focus {
background-color: #3a9112;
cursor: pointer;
}
.btn:active {
background-color: #2c760a;
}
Теперь кнопка темнеет при наведении на нее курсора или выборе ее
“tab”-ом, а при нажатии становится еще темнее.
Структурные псевдоклассы
https://css-tricks.com/almanac/selectors/p/placeholder-shown/
Когда пользователь начинает вводить текст, это оформление меняется на
стандартное или описанное в стилях для данной страницы/сайта.
С поддержкой его старыми броузерами дело еще хуже -http://html-
plus.in.ua/pseudoclasses-and-pseudoelements-for-form-elements/
Все допустимые css свойства не проверял, но фоновый рисунок, до начала ввода
текста в поле, появился.
Тем не менее, между :root и html есть небольшое отличие — у :root приоритет
выше, чем у селектора html. Если задать одинаковые стилевые правила для этих
селекторов, то стиль :root переопределит стиль html.
<!DOCTYPE html>
<html>
<head>
<style type="text/css">
p:empty {
background-color: aqua;
width: 100px;
height: 20px;
}
</style>
</head>
<body>
<p>Первый абзац.</p>
<p></p>
<p>Третий абзац.</p>
</body>
</html>
Результат:
Пример: (https://webref.ru/css/first-child)
<article>
<h1>Роль цитокинов при дорсалгии</h1>
<p>Автор: Гордон Фримен, канд. физ.-мат. наук</p>
<p>Содержание статьи</p>
<address>Почта: freemen@blackmesa.com</address>
<p>Опубликовано: <time datetime="2018-11-27">27 ноября 2018</time></p>
</article>
article :first-child { color: red; } читаем так - выбрать все первые дочерние элементы
у родителя <article>, первые дочерние у дочерних элементов от <article>, и далее
первые дочерние у дочерних от дочерних и так.далее...
Псевдокласс :first-child без указания селектора выберет все первые элементы
внутри <article> и установит для них красный цвет текста. Здесь первыми
дочерними идут <h1> и <time>, они и будут выбраны. <h1> -первый дочерний для
<article>, а <time> первый дочерний для <p>
Кстати, не забываем <time> потомок <article>, но он не дочерний для него
элемент, ))), внучерний. child в имени псевдокласса обозначает именно дочерний, а
не ребенок/потомок.
article h1:first-child { color: red; } - выбрать все первые дочерние элементы типа
<h1>
При добавлении селектора к :first-child в начале берётся первый дочерний
элемент тэга <article>, затем смотрится какого он типа. Если элемент совпадает с
указанным селектором, то он будет выбран. Таким образом, выбирается элемент,
если он удовлетворяет двум условиям одновременно: это первый элемент и это
элемент указанного типа. Здесь красным цветом будет выделен заголовок,
поскольку первым идёт именно <h1>.
article p:first-child { color: red; }
Ничего выбрано не будет, поскольку первые дочерние элементы <h1> и <time> а
не <p>.
article :last-child { color: red; }
Результат - Опубликовано: 27 ноября 2018 третий <p> - последний дочерний
элемент от <article>, а <time> в свою очередь первый и последний дочерний от <p>,
наследует цвет текста от него.
Еще пример:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Пример</title>
<style>
p:first-child { color: red; }
</style>
</head>
<body>
<div>
<p>Этот абзац является первым дочерним элементом своего родителя(div).</p>
<p>Этот абзац является вторым дочерним элементом своего родителя(div).</p>
</div>
</body>
</html>
- первый <p> является и первым дочерним элементом для <body>, а третий
будет первым дочерним элементом уже относительно <div>.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>first-child</title>
<style>
B:first-child {
color: red; /* Красный цвет текста */
}
</style>
</head>
<body>
<p><b>Lorem ipsum</b> dolor sit amet, <b>consectetuer</b>
adipiscing <b>elit</b>, sed diem nonummy nibh euismod tincidunt ut lacreet
dolore magna aliguam erat volutpat.</p>
<p><b>Ut wisis enim</b> ad minim veniam, <b>quis nostrud</b>
exerci tution ullamcorper suscipit lobortis nisl ut aliquip ex ea <b>commodo
consequat</b>.</p>
</body>
</html>
Выбраны первый <b> первого абзаца, понятно почему, и первый <b> второго
абзаца, так как он первый дочерний <b>для второго (другого) тега <p>.
<article>
<h1>Роль цитокинов при дорсалгии</h1>
<p>Автор: Гордон Фримен, канд. физ.-мат. наук</p>
<p>Содержание статьи</p>
<address>Почта: freemen@blackmesa.com</address>
<p>Опубликовано: <time datetime="2018-11-27">27 ноября 2018</time></p>
</article>
article :first-of-type { color: red; } - выбираем первые встреченные элементы любого
типа
Будут выбраны первые элементы каждого типа (<h1>, <p>, <address>, <time>) и
установлен для них красный цвет текста.
article p:first-of-type { color: red; } - выбираем первый <p> - Автор: Гордон Фримен,
канд. физ.-мат. наук
article :last-of-type { color: red; } -
:last-of-type без указания селектора выберет последние или единственные
элементы каждого типа (<h1>, <p>, <address>, <time>) и установит для них красный
цвет текста.
И поиграем с таблицей:
<!DOCTYPE html>
<head>
<meta charset="utf-8">
<title>first-of-type</title>
<style>
table {
border-collapse: collapse; /* Убираем двойные границы */
width: 100%; /* Ширина таблицы */
border-spacing: 0; /* Расстояние между ячеек */ }
td {
border: 1px solid #6A3E14; /* Параметры рамки */
padding: 4px; /* Поля в ячейках */ }
tr:first-of-type {
background: #808990; /* Цвет фона */
color: #fff; /* Цвет текст */ }
td:first-of-type { background: #CFD6D3; /* Цвет фона */ }
</style>
</head>
<body>
<table>
<tr>
<td> </td><td>1998</td><td>1999</td><td>2000</td><td>2001</td>
<td>2002</td><td>2003</td>
</tr>
<tr>
<td>Нефть</td>
<td>3</td><td>22</td><td>34</td><td>62</td><td>74</td><td>57</td>
</tr>
<tr>
<td>Золото</td>
<td>4</td><td>13</td><td>69</td><td>72</td><td>56</td><td>47</td>
</tr>
<tr>
<td>Дерево</td>
<td>4</td><td>7</td><td>73</td><td>79</td><td>34</td><td>86</td>
</tr>
</table>
</body>
</html>
tr:first-of-type {
background: #808990; /* Цвет фона */
color: #fff; /* Цвет текст */
выберет первую из 4 строк сформированных <tr></tr>
td:first-of-type {
background: #CFD6D3; /* Цвет фона */
}
а этот псевдокласс “найдет” свой <td></td> на уровень ниже, и стилизует первую
ячейку в каждой строке. Попутно переопределит предыдущий цвет первой ячейки
первой строки который был назначен tr:first-of-type.
Правомерна и такая конструкция - применение псевдоэлемента к псевдоклассу.
p:last-of-type::after {
content: ' ◄'; /* Добавляем символ в конце текста */
color: #c00000; /* Цвет символа */
}
пример этого - https://webref.ru/css/last-of-type
<article>
<h1 class="header">Роль цитокинов при дорсалгии</h1>
<p class="paragraf">Автор: Гордон Фримен, канд. физ.-мат. наук</p>
<p class="paragraf">Содержание статьи</p>
<address class="adress" >Почта: freemen@blackmesa.com</address>
<p class="paragraf">Опубликовано: <time class="time" datetime="2018-11-
27">27 ноября 2018</time></p>
</article>
<html>
<head>
<meta charset="utf-8">
<title>:only-child</title>
<style>
</style>
</head>
<body>
<section>
<div>единственный</div>
</section>
<section>
<div>один из двух дочерних div</div>
<p>один из двух дочерних</p>
</section>
</body>
</html>
section :only-child {
color: green; /* Зелёный цвет текста */
} - выбираем элемент любого типа внутри <section> в случае если он
единственный дочерний элемент. Есть ли у него свои дочерние элементы - не
важно. Они также будут проверены на единственность.
В первом <section> один элемент, во втором - два, результат очевиден -
единственный
<style>
section div:only-of-type {
color: green; /* Зелёный цвет текста */
} - выбираем элемент типа <div> внутри <section> в случае если этот <div>
единственный, наличие других дочерних элементов не важно.
Внутри каждого из <section> <div> встречается только единожды, и значит
зеленым цветом будет закрашено - единственный и один из двух дочерних div
:nth-child()
Псевдокласс :nth-child() позволяет выбрать элементы на основе их положения в
группе братских (соседских) элементов.
● odd - описывает элементы среди группы соседних с нечётными номерами
1, 3, 5, и т. д. Эквивалентно (2n+1)
● even - описывает элементы среди группы соседних с чётными номерами 2, 4,
6, и т. д. Эквивалентно (2n)
В общем же виде этот псевдокласс записывается следующим образом.
:nth-child(an ± b) { … }
Вместо a и b подставляются конкретные целые числа, а n является счётчиком и
остаётся в исходном виде. Числа a и b целые числа могут быть отрицательными
или нулём, в таком случае их можно не записывать — 2n+0 идентично 2n.
Отрицательный результат выражения не имеет смысла, так как позиции
элементов отсчитываются от 1-цы.
Счётчик n начинается с 0. Это количество дочерних элементов, 3,5,18, например.
Понятное дело что их положительное количество, но если задавать - “-n” при
вычислении nth-позиции n будет отрицательным числом.
Несложно привыкнуть и без калькулятора считать эту формулку:
Запись (an ± b) следует понимать так: выбираем с интервалом a элементы,
начиная с позиции b (включая ее) и до последнего соседского элемента. Стартовая
позиция может находиться слева от нуля. Эти минусовые значения можно
победить.
Если вам попадется такая неприятная, например, формула - (4n-7), это будет то-
же самое что - (4n+1), формулу такого вида можно привести к виду (an+b).
Вычитаем из a b, до тех пор, пока b не будет положительным. Как этот поток
сознания понимать ? А именно:
берем (4n-7), 4-7=-3, получаем (4n-3), что ровно то же самое
берем (4n-3), 4-3=1, получаем (4n+1), каждый 4-й элемент отсчитывая от первой
позиции, последовательность которую легко представить и покрутить в голове.
Почему так ? Если нарисовать вручную становится ясно. Математик смог бы
объяснить по научному)))
Запись (-an+b) выбираем элементы с позиции b, (включая ее) двигаемся к
первому элементу с интервалом a.
Запись (n + b ) выбираем каждый элемент начиная с позиции b и до последнего
элемента.
Запись (-n + b ) выбираем каждый элемент начиная с позиции b, двигаемся к
первому элементу.
Запись (-an - b) не имеет смысла
Сразу может быть трудно понять, но если расписать вручную :
http://css.yoksel.ru/nth-child/
http://www.topdesignagencies.com/nth-test/ -калькулятор
На эту казалось бы мелочь стоит потратить немного времени - потом пригодится
при работе с массивами в программировании.
Но это не все, мы можем применить комбинацию двух и более модификаторов.
В результате будет выбрано пересечение обоих множеств, или, для не учивших
вышку, только значения (позиции) выбранные обоими селекторами.
Предположим у нас 12 соседских элементов:
:nth-of-type(n+4) :nth-of-type(-n+6)
:nth-last-child() и :nth-last-of-type()
Псевдоклассы :nth-child() и :nth-of-type() выбирают заданные элементы из группы
братских элементов, начиная с первого. В противоположность им, псевдоклассы
:nth-last-child() и :nth-last-of-type() выбирают элементы, считая от последнего.
соответственно: если у нас 8 элементов
https://codepen.io/SitePoint/pen/LroIp
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Пример</title>
<style>
p { color:aqua; }
:not(p) { color: green; }
</style>
</head>
<body>
<h1>Заголовок</h1>
<p>Абзац.</p>
<div>Текст внутри элемента div.</div>
<p>Абзац.</p>
</body>
</html>
Результат:
Evan Wallace on Twitter: "This is wild: using const/let instead of var at the top level can
make JavaScript code run literally 10x slower in @webkit. https://t.co/x73Cwux54r"
Встроенный скрипт:
Внешний скрипт: если наш скрипт состоит из более чем двух, трех строк кода,
дабы не загромождать верстку, его стоит разместить снаружи, в своей папке, и
элементарно подключить его к странице.
Максимально близко к </ body> мы пишем - <script src="myscript.js"></script>
Браузер загружает и отображает HTML постепенно.
Особенно это заметно при медленном интернет-соединении:
браузер не ждёт, пока страница загрузится целиком, а
показывает ту часть, которую успел загрузить.
Если браузер видит тег <script>, то он по стандарту обязан
сначала выполнить его, а потом показать оставшуюся часть
страницы.
Такое поведение называют «синхронным». Как правило,
оно вполне нормально, но, как следствие, пока браузер не
выполнит внешний скрипт, он не покажет часть страницы
под ним.
То есть, в таком документе, пока не загрузится и не
выполнится нащ_сценарий.js, содержимое <body> будет
скрыто.
Будьте внимательны, так как мы указали с помощью тега <meta> кодировку utf-8
в HTML-документе, кодировка самих файлов (test.html, myscript.js и myscript2.js)
также должна быть utf-8.
Еще про виды подключения - https://puzzleweb.ru/javascript/1_whereto.php
https://learn.javascript.ru/external-script