Устаревшие методы вставки/удаления
Есть несколько других, более старых, методов вставки и удаления, которые существуют по историческим причинам.
Сейчас уже нет причин их использовать, так как современные методы
Мы упоминаем о них только потому, что их можно найти во многих старых скриптах:
#браузер #документ #изменение
Есть несколько других, более старых, методов вставки и удаления, которые существуют по историческим причинам.
Сейчас уже нет причин их использовать, так как современные методы
append
, prepend
, before
, after
, remove
, replaceWith
более гибкие и удобные.Мы упоминаем о них только потому, что их можно найти во многих старых скриптах:
parentElem.appendChild(node)
parentElem.insertBefore(node, nextSibling)
parentElem.replaceChild(node, oldChild)
parentElem.removeChild(node)
#браузер #документ #изменение
👍8🔥1
Несколько слов о «document.write»
Есть ещё один, очень древний метод добавления содержимого на веб-страницу:
Вызов
Этот метод пришёл к нам со времён, когда ещё не было ни DOM, ни стандартов… Действительно старые времена. Он всё ещё живёт, потому что есть скрипты, которые используют его.
В современных скриптах он редко встречается из-за следующего важного ограничения:
Вызов
#браузер #документ #изменение
Есть ещё один, очень древний метод добавления содержимого на веб-страницу:
document.write
.Вызов
document.write(html)
записывает html
на страницу «прямо здесь и сейчас». Строка html
может быть динамически сгенерирована, поэтому метод достаточно гибкий. Мы можем использовать JavaScript, чтобы создать полноценную веб-страницу и записать её в документ.Этот метод пришёл к нам со времён, когда ещё не было ни DOM, ни стандартов… Действительно старые времена. Он всё ещё живёт, потому что есть скрипты, которые используют его.
В современных скриптах он редко встречается из-за следующего важного ограничения:
Вызов
document.write
работает только во время загрузки страницы.#браузер #документ #изменение
👍11🔥4
Стили и классы
Как правило, существует два способа задания стилей для элемента:
1) Создать класс в CSS и использовать его:
2) Писать стили непосредственно в атрибуте
JavaScript может менять и классы, и свойство
Классы – всегда предпочтительный вариант по сравнению со
Например, использование
В других случаях, например, чтобы сделать текст красным, добавить значок фона – описываем это в CSS и добавляем класс (JavaScript может это сделать). Это более гибкое и лёгкое в поддержке решение.
#браузер #документ #стили_классы
Как правило, существует два способа задания стилей для элемента:
1) Создать класс в CSS и использовать его:
<div class="...">
2) Писать стили непосредственно в атрибуте
style
: <div style="...">
.JavaScript может менять и классы, и свойство
style
.Классы – всегда предпочтительный вариант по сравнению со
style
. Мы должны манипулировать свойством style
только в том случае, если классы «не могут справиться».Например, использование
style
является приемлемым, если мы вычисляем координаты элемента динамически и хотим установить их из JavaScript.В других случаях, например, чтобы сделать текст красным, добавить значок фона – описываем это в CSS и добавляем класс (JavaScript может это сделать). Это более гибкое и лёгкое в поддержке решение.
#браузер #документ #стили_классы
👍5🔥1
className
Изменение класса является одним из наиболее часто используемых действий в скриптах.
Когда-то давно в JavaScript существовало ограничение: зарезервированное слово типа
Поэтому для классов было введено схожее свойство
#браузер #документ #стили_классы
Изменение класса является одним из наиболее часто используемых действий в скриптах.
Когда-то давно в JavaScript существовало ограничение: зарезервированное слово типа
"class"
не могло быть свойством объекта. Это ограничение сейчас отсутствует, но в то время было невозможно иметь свойство elem.class
.Поэтому для классов было введено схожее свойство
"className"
: elem.className
соответствует атрибуту "class"
.#браузер #документ #стили_классы
👍15🔥4❤2
classList
Так что мы можем работать как со строкой полного класса, используя
Методы
#браузер #документ #стили_классы
elem.classList
– это специальный объект с методами для добавления/удаления одного класса.Так что мы можем работать как со строкой полного класса, используя
className
, так и с отдельными классами, используя classList
. Выбираем тот вариант, который нам удобнее.Методы
classList
:elem.classList.add/remove("class")
– добавить/удалить класс.elem.classList.toggle("class")
– добавить класс, если его нет, иначе удалить.elem.classList.contains("class")
– проверка наличия класса, возвращает true/false
.#браузер #документ #стили_классы
👍12🔥2
Element style
Свойство
Для свойства из нескольких слов используется camelCase.
#браузер #документ #стили_классы
Свойство
elem.style
– это объект, который соответствует тому, что написано в атрибуте "style"
. Установка стиля elem.style.width="100px"
работает так же, как наличие в атрибуте style
строки width:100px
.Для свойства из нескольких слов используется camelCase.
#браузер #документ #стили_классы
👍9🔥3❤1
Сброс стилей
Иногда нам нужно добавить свойство стиля, а потом, позже, убрать его.
Например, чтобы скрыть элемент, мы можем задать
Затем мы можем удалить свойство
Если мы установим в
#браузер #документ #стили_классы
Иногда нам нужно добавить свойство стиля, а потом, позже, убрать его.
Например, чтобы скрыть элемент, мы можем задать
elem.style.display = "none"
.Затем мы можем удалить свойство
style.display
, чтобы вернуться к первоначальному состоянию. Вместо delete elem.style.display
мы должны присвоить ему пустую строку: elem.style.display = ""
.Если мы установим в
style.display
пустую строку, то браузер применит CSS-классы и встроенные стили, как если бы такого свойства style.display
вообще не было.#браузер #документ #стили_классы
👍17🔥3
Полная перезапись
Обычно мы используем
Для задания нескольких стилей в одной строке используется специальное свойство
Это свойство редко используется, потому что такое присваивание удаляет все существующие стили: оно не добавляет, а заменяет их. Можно ненароком удалить что-то нужное. Но его можно использовать, к примеру, для новых элементов, когда мы точно знаем, что не удалим существующий стиль.
То же самое можно сделать установкой атрибута:
#браузер #документ #стили_классы
style.cssText
Обычно мы используем
style.*
для присвоения индивидуальных свойств стиля. Нельзя установить список стилей как, например, div.style="color: red; width: 100px"
, потому что div.style
– это объект, и он доступен только для чтения.Для задания нескольких стилей в одной строке используется специальное свойство
style.cssText
Это свойство редко используется, потому что такое присваивание удаляет все существующие стили: оно не добавляет, а заменяет их. Можно ненароком удалить что-то нужное. Но его можно использовать, к примеру, для новых элементов, когда мы точно знаем, что не удалим существующий стиль.
То же самое можно сделать установкой атрибута:
div.setAttribute('style', 'color: red...')
.#браузер #документ #стили_классы
👍21🔥4
Следите за единицами измерения
Не забудьте добавить к значениям единицы измерения.
Например, мы должны устанавливать
Пожалуйста, обратите внимание, браузер «распаковывает» свойство
#браузер #документ #стили_классы
Не забудьте добавить к значениям единицы измерения.
Например, мы должны устанавливать
10px
, а не просто 10
в свойство elem.style.top
. Иначе это не сработает.Пожалуйста, обратите внимание, браузер «распаковывает» свойство
style.margin
в последних строках и выводит style.marginLeft
и style.marginTop
из него.#браузер #документ #стили_классы
👍7🔥2
Вычисленные стили: метод в лоб
Итак, изменить стиль очень просто. Но как его прочитать?
Например, мы хотим знать размер, отступы, цвет элемента. Как это сделать?
Свойство
Поэтому, используя
Например, здесь
#браузер #документ #стили_классы
Итак, изменить стиль очень просто. Но как его прочитать?
Например, мы хотим знать размер, отступы, цвет элемента. Как это сделать?
Свойство
style
оперирует только значением атрибута "style"
, без учёта CSS-каскада.Поэтому, используя
elem.style
, мы не можем прочитать ничего, что приходит из классов CSS.Например, здесь
style
не может видеть отступы.#браузер #документ #стили_классы
👍7🔥3
Вычисленные стили: getComputedStyle
Что, если нам нужно, скажем, увеличить отступ на
Для этого есть метод:
Результат вызова – объект со стилями, похожий на
#браузер #документ #стили_классы
Что, если нам нужно, скажем, увеличить отступ на
20px
? Для начала нужно его текущее значение получить.Для этого есть метод:
getComputedStyle(element, [pseudo])
.Результат вызова – объект со стилями, похожий на
elem.style
, но с учётом всех CSS-классов.#браузер #документ #стили_классы
👍10🔥4
Вычисленное (computed) и окончательное (resolved) значения
Есть две концепции в CSS:
- Вычисленное (computed) значение – это то, которое получено после применения всех CSS-правил и CSS-наследования. Например,
- Окончательное (resolved) значение – непосредственно применяемое к элементу. Значения
Давным-давно
Так что, в настоящее время
#браузер #документ #стили_классы
Есть две концепции в CSS:
- Вычисленное (computed) значение – это то, которое получено после применения всех CSS-правил и CSS-наследования. Например,
height:1em
или font-size:125%
.- Окончательное (resolved) значение – непосредственно применяемое к элементу. Значения
1em
или 125%
являются относительными. Браузер берёт вычисленное значение и делает все единицы измерения фиксированными и абсолютными, например, height:20px
или font-size:16px
. Для геометрических свойств разрешённые значения могут иметь плавающую точку, например, width:50.5px
.Давным-давно
getComputedStyle
был создан для получения вычисленных значений, но оказалось, что окончательные значения гораздо удобнее, и стандарт изменился.Так что, в настоящее время
getComputedStyle
фактически возвращает окончательное значение свойства, для геометрии оно обычно в пикселях.#браузер #документ #стили_классы
👍10❤1🔥1
getComputedStyle требует полное свойство!
Для правильного получения значения нужно указать точное свойство. Например:
Например, если есть свойства
Есть и другие несоответствия. Например, некоторые браузеры (Chrome) отображают
#браузер #документ #стили_классы
Для правильного получения значения нужно указать точное свойство. Например:
paddingLeft
, marginTop
, borderTopWidth
. При обращении к сокращённому: padding
, margin
, border
– правильный результат не гарантируется.Например, если есть свойства
paddingLeft/paddingTop
, то что мы получим вызывая getComputedStyle(elem).padding
? Ничего, или, может быть, «сгенерированное» значение из известных внутренних отступов? Стандарта для этого нет.Есть и другие несоответствия. Например, некоторые браузеры (Chrome) отображают
10px
в документе выше (см. картинку), а некоторые (Firefox) – нет.#браузер #документ #стили_классы
👍5🔥3
Стили, применяемые к посещённым :visited ссылкам, скрываются!
Посещённые ссылки могут быть окрашены с помощью псевдокласса
Но
JavaScript не видит стили, применяемые с помощью
#браузер #документ #стили_классы
Посещённые ссылки могут быть окрашены с помощью псевдокласса
:visited
.Но
getComputedStyle
не даёт доступ к этой информации, чтобы произвольная страница не могла определить, посещал ли пользователь ту или иную ссылку, проверив стили.JavaScript не видит стили, применяемые с помощью
:visited
. Кроме того, в CSS есть ограничение, которое запрещает в целях безопасности применять к :visited
CSS-стили, изменяющие геометрию элемента. Это гарантирует, что нет обходного пути для «злой» страницы проверить, была ли ссылка посещена и, следовательно, нарушить конфиденциальность.#браузер #документ #стили_классы
👍8🔥4
Итого по стилям и классам
Для управления классами существуют два DOM-свойства:
-
-
Чтобы изменить стили:
- Свойство
- Свойство
Для чтения окончательных стилей (с учётом всех классов, после применения CSS и вычисления окончательных значений) используется:
- Метод
#браузер #документ #стили_классы
Для управления классами существуют два DOM-свойства:
-
className
– строковое значение, удобно для управления всем набором классов.-
classList
– объект с методами add/remove/toggle/contains
, удобно для управления отдельными классами.Чтобы изменить стили:
- Свойство
style
является объектом со стилями в формате camelCase. Чтение и запись в него работают так же, как изменение соответствующих свойств в атрибуте "style"
. Чтобы узнать, как добавить в него important
и делать некоторые другие редкие вещи – смотрите документацию.- Свойство
style.cssText
соответствует всему атрибуту "style"
, полной строке стилей.Для чтения окончательных стилей (с учётом всех классов, после применения CSS и вычисления окончательных значений) используется:
- Метод
getComputedStyle(elem, [pseudo])
возвращает объект, похожий по формату на style
. Только для чтения.#браузер #документ #стили_классы
👍8🔥2
Размеры и прокрутка элементов
Существует множество JavaScript-свойств, которые позволяют считывать информацию об элементе: ширину, высоту и другие геометрические характеристики. В этой главе мы будем называть их «метрики».
Они часто требуются, когда нам нужно передвигать или позиционировать элементы с помощью JavaScript.
#браузер #документ #размеры
Существует множество JavaScript-свойств, которые позволяют считывать информацию об элементе: ширину, высоту и другие геометрические характеристики. В этой главе мы будем называть их «метрики».
Они часто требуются, когда нам нужно передвигать или позиционировать элементы с помощью JavaScript.
#браузер #документ #размеры
👍7🔥1
Размеры и полоса прокрутки: общий вид
У элемента есть рамка
#браузер #документ #размеры
У элемента есть рамка
border
, внутренний отступ padding
и прокрутка. Полный набор характеристик. Обратите внимание, тут нет внешних отступов margin
, потому что они не являются частью элемента, для них нет особых JavaScript-свойств.#браузер #документ #размеры
👍5🔥1
Внимание, полоса прокрутки
В иллюстрации выше намеренно продемонстрирован самый сложный и полный случай, когда у элемента есть ещё и полоса прокрутки. Некоторые браузеры (не все) отбирают место для неё, забирая его у области, отведённой для содержимого (помечена как «
Таким образом, без учёта полосы прокрутки ширина области содержимого (content width) будет
#браузер #документ #размеры
В иллюстрации выше намеренно продемонстрирован самый сложный и полный случай, когда у элемента есть ещё и полоса прокрутки. Некоторые браузеры (не все) отбирают место для неё, забирая его у области, отведённой для содержимого (помечена как «
content width
» выше).Таким образом, без учёта полосы прокрутки ширина области содержимого (content width) будет
300px
, но если предположить, что ширина полосы прокрутки равна 16px
(её точное значение зависит от устройства и браузера), тогда остаётся только 300 - 16 = 284px
, и мы должны это учитывать. Вот почему примеры в этой главе даны с полосой прокрутки. Без неё некоторые вычисления будут проще.#браузер #документ #размеры
👍4🔥2
Всем привет, ребята!
Наверное, у вас, как и у меня, часто бывает такое, что приходится очень долго искать реально годный видос по JavaScript, чтобы посмотреть его во время завтрака и заодно прокачаться немного.
Не знаю как у вас, но у меня эта проблема возникает практически каждый день. В поисках решения я нашёл канал @sign_in_it. Там каждый день выходят реально полезные и интересные ролики по Frontend-разработке и не только.
Загляните, посмотрите пару постов, возможно и вам зайдет.
P.S. Накидайте огоньков, если канал вам оказался по душе 🔥
#полезное
Наверное, у вас, как и у меня, часто бывает такое, что приходится очень долго искать реально годный видос по JavaScript, чтобы посмотреть его во время завтрака и заодно прокачаться немного.
Не знаю как у вас, но у меня эта проблема возникает практически каждый день. В поисках решения я нашёл канал @sign_in_it. Там каждый день выходят реально полезные и интересные ролики по Frontend-разработке и не только.
Загляните, посмотрите пару постов, возможно и вам зайдет.
P.S. Накидайте огоньков, если канал вам оказался по душе 🔥
#полезное
🔥12👍1
Метрики
Вот общая картина с геометрическими свойствами. Значениями свойств являются числа, подразумевается, что они в пикселях.
К ней мы часто будем возвращаться в следующих постах и описывать отдельные составляющие. А пока просто изучите, что за что примерно отвечает.
#браузер #документ #размеры
Вот общая картина с геометрическими свойствами. Значениями свойств являются числа, подразумевается, что они в пикселях.
К ней мы часто будем возвращаться в следующих постах и описывать отдельные составляющие. А пока просто изучите, что за что примерно отвечает.
#браузер #документ #размеры
👍4🔥4
offsetParent, offsetLeft/Top
Эти свойства редко используются, но так как они являются «самыми внешними» метриками, мы начнём с них.
В свойстве
То есть, ближайший предок, который удовлетворяет следующим условиям:
- Является CSS-позиционированным (CSS-свойство
- или
- или
Свойства
В примере выше внутренний
#браузер #документ #размеры
Эти свойства редко используются, но так как они являются «самыми внешними» метриками, мы начнём с них.
В свойстве
offsetParent
находится предок элемента, который используется внутри браузера для вычисления координат при рендеринге.То есть, ближайший предок, который удовлетворяет следующим условиям:
- Является CSS-позиционированным (CSS-свойство
position
равно absolute
, relative
, fixed
или sticky
),- или
<td>
, <th>
, <table>
,- или
<body>
.Свойства
offsetLeft/offsetTop
содержат координаты x/y относительно верхнего левого угла offsetParent
.В примере выше внутренний
<div>
имеет элемент <main>
в качестве offsetParent
, а свойства offsetLeft/offsetTop
являются сдвигами относительно верхнего левого угла (180
).#браузер #документ #размеры
👍5🔥2