You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: 2-ui/1-document/08-styles-and-classes/article.md
+33-33Lines changed: 33 additions & 33 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -7,26 +7,27 @@
7
7
1. Создать класс в CSS и использовать его: `<div class="...">`
8
8
2. Писать стили непосредственно в атрибуте `style`: `<div style="...">`.
9
9
10
-
Использование CSS -- это всегда предпочтительный вариант и не только для HTML, но и для JavaScript.
10
+
JavaScript может менять и классы и свойство `style`.
11
11
12
-
Мы должны манипулировать свойством `style` только в том случае, если классы "не могут справиться".
12
+
Классы - всегда предпочтительный вариант по сравнению со `style`. Мы должны манипулировать свойством `style` только в том случае, если классы "не могут справиться".
13
13
14
-
Например, использование `style` является приемлемым, если мы вычисляем координаты элемента динамически и хотим установить их из JavaScript, подобно этому:
14
+
Например, использование `style` является приемлемым, если мы вычисляем координаты элемента динамически и хотим установить их из JavaScript:
15
15
16
16
```js
17
17
let top =/* сложные расчёты */;
18
18
let left =/* сложные расчёты */;
19
-
elem.style.left= left; // например, '123px'
19
+
20
+
elem.style.left= left; // например, '123px', значение вычисляется во время работы скрипта
20
21
elem.style.top= top; // например, '456px'
21
22
```
22
23
23
-
В других случаях, например, чтобы сделать текст красным, добавить значок фона -- опишите это в CSS и примените класс. Это более гибкое и легкое в поддержке решение.
24
+
В других случаях, например, чтобы сделать текст красным, добавить значок фона -- описываем это в CSS и добавляем класс (JavaScript может это сделать). Это более гибкое и легкое в поддержке решение.
24
25
25
26
## className и classList
26
27
27
28
Изменение класса является одним из наиболее часто используемых действий в скриптах.
28
29
29
-
Раньше в JavaScript существовало ограничение: зарезервированное слово типа `"class"` не могло быть свойством объекта. Это ограничение сейчас не существует, но в то время было невозможно иметь свойство `elem.class`.
30
+
Когда-то давно в JavaScript существовало ограничение: зарезервированное слово типа `"class"` не могло быть свойством объекта. Это ограничение сейчас отсутствует, но в то время было невозможно иметь свойство `elem.class`.
30
31
31
32
Поэтому для классов было введено схожее свойство `"className"`: `elem.className` соответствует атрибуту `"class"`.
32
33
@@ -44,7 +45,7 @@ elem.style.top = top; // например, '456px'
44
45
45
46
Для этого есть другое свойство: `elem.classList`.
46
47
47
-
`elem.classList` -- это специальный объект с методами для добавления/удаления классов.
48
+
`elem.classList` -- это специальный объект с методами для добавления/удаления одного класса.
48
49
49
50
Например:
50
51
@@ -65,9 +66,9 @@ elem.style.top = top; // например, '456px'
Кроме того, `classList` является перебираемым, поэтому можно перечислить все классы при помощи `for..of`:
73
74
@@ -83,7 +84,7 @@ elem.style.top = top; // например, '456px'
83
84
84
85
## Element style
85
86
86
-
Свойство `elem.style` - это объект, который соответствует тому, что написано в атрибуте `"style"`. Установка стиля `elem.style.width="100px"` работает так же, как добавление в атрибут`style="width:100px"`.
87
+
Свойство `elem.style` - это объект, который соответствует тому, что написано в атрибуте `"style"`. Установка стиля `elem.style.width="100px"` работает так же, как наличие в атрибуте`style` строки `width:100px`.
87
88
88
89
Для свойства из нескольких слов используется camelCase:
Стили с браузерным префиксом, например, `-moz-border-radius`, `-webkit-border-radius` также работают по тому же принципу:
103
+
````smart header="Свойства с префиксом"
104
+
Стили с браузерным префиксом, например, `-moz-border-radius`, `-webkit-border-radius` преобразуются по тому же принципу: дефис означает прописную букву.
Затем мы можем удалить свойство `style.display`, чтобы вернуться к первоначальному состоянию. Вместо `delete elem.style.display` мы должны присвоить ему пустую строку: `elem.style.display = ""`.
120
121
121
122
```js run
122
-
// если мы запустим этот код, <body> "будет мигать"
123
+
// если мы запустим этот код, <body> "мигнёт"
123
124
document.body.style.display="none"; // скрыть
124
125
125
126
setTimeout(() =>document.body.style.display="", 1000); // возврат к нормальному состоянию
126
127
```
127
128
128
-
Если мы установим в `display` пустую строку, то браузер применит CSS-классы и встроенные стили, как если бы такого свойства `display` вообще не было.
129
+
Если мы установим в `style.display` пустую строку, то браузер применит CSS-классы и встроенные стили, как если бы такого свойства `style.display` вообще не было.
Обычно мы используем `style.*` для присвоения индивидуальных свойств стиля. Нельзя установить список стилей как, например, `div.style="color: red; width: 100px"`, потому что `div.style` -- это объект, и он доступен только для чтения.
Это свойство редко используется, потому что такое присваивание удаляет все существующие стили: оно не добавляет, а заменяет их. Можно ненароком удалить что-то нужное. Но его можно использовать, к примеру, для новых элементов, когда мы точно знаем, что не удалим существующий стиль.
151
152
152
-
То же самое можно сделать, если установить атрибут: `div.setAttribute('style', 'color: red...')`.
153
+
То же самое можно сделать установкой атрибута: `div.setAttribute('style', 'color: red...')`.
153
154
````
154
155
155
156
## Следите за единицами измерения
156
157
157
-
Единицы измерения в CSS должны быть представлены в стилевых значениях.
158
+
Не забудьте добавить к значениям единицы измерения.
158
159
159
160
Например, мы должны устанавливать `10px`, а не просто `10` в свойство `elem.style.top`. Иначе это не сработает:
Пожалуйста, обратите внимание, как браузер "распаковывает" свойство `style.margin` в последних строках и выводит `style.marginLeft` и `style.marginTop` (и другие части внешнего отступа) из него.
181
+
Пожалуйста, обратите внимание, браузер "распаковывает" свойство `style.margin` в последних строках и выводит `style.marginLeft` и `style.marginTop` из него.
181
182
182
183
## Вычисленные стили: getComputedStyle
183
184
184
-
Изменить стиль очень просто. Но как его *прочитать*?
185
+
Итак, изменить стиль очень просто. Но как его *прочитать*?
185
186
186
187
Например, мы хотим знать размер, отступы, цвет элемента. Как это сделать?
...Но что, если нам нужно, скажем, увеличить отступ на 20px? Для начала нужно его текущее значение получить.
211
+
...Но что, если нам нужно, скажем, увеличить отступ на `20px`? Для начала нужно его текущее значение получить.
211
212
212
213
Для этого есть метод: `getComputedStyle`.
213
214
214
215
Синтаксис:
215
216
216
217
```js
217
-
getComputedStyle(element[, pseudo])
218
+
getComputedStyle(element, [pseudo])
218
219
```
219
220
220
221
element
221
222
: Элемент, значения для которого нужно получить
222
223
223
224
pseudo
224
-
: Указывается, если нужен стиль псевдоэлемента, например "::before". Пустая строка или отсутствие аргумента означают сам элемент.
225
+
: Указывается, если нужен стиль псевдоэлемента, например `::before`. Пустая строка или отсутствие аргумента означают сам элемент.
225
226
226
-
Результат вызова - объект со свойствами стилей, похожий на `elem.style`, но с учётом всех CSS-классов.
227
+
Результат вызова - объект со стилями, похожий на `elem.style`, но с учётом всех CSS-классов.
227
228
228
229
Например:
229
230
@@ -253,7 +254,7 @@ pseudo
253
254
254
255
Давным-давно `getComputedStyle` был создан для получения вычисленных значений, но оказалось, что окончательные значения гораздо удобнее, и стандарт изменился.
255
256
256
-
Так что, в настоящее время `getComputedStyle` фактически возвращает окончательное значение свойства.
257
+
Так что, в настоящее время `getComputedStyle` фактически возвращает окончательное значение свойства, для геометрии оно обычно в пискселях.
257
258
```
258
259
259
260
````warn header="`getComputedStyle` требует полное свойство!"
```smart header="Стили, примяемые к посещённым `:visited` ссылкам, скрываются!"
280
281
Посещенные ссылки могут быть окрашены с помощью псевдокласса `:visited`.
281
282
282
283
Но `getComputedStyle` не дает доступ к этой информации, чтобы произвольная страница не могла определить, посещал ли пользователь ту или иную ссылку, проверив стили.
283
284
284
-
JavaScript не видит стили, применяемые с помощью `:visited`. Кроме того, в CSS есть ограничение, которое запрещает в целях безопасности применять к `:visited` CSS-стили, изменяющие геометрию элемента. Это гарантирует, что нет обходного пути для "плохой" страницы, чтобы проверить, была ли ссылка посещена и, следовательно, нарушить конфиденциальность.
285
-
285
+
JavaScript не видит стили, применяемые с помощью `:visited`. Кроме того, в CSS есть ограничение, которое запрещает в целях безопасности применять к `:visited` CSS-стили, изменяющие геометрию элемента. Это гарантирует, что нет обходного пути для "злой" страницы проверить, была ли ссылка посещена и, следовательно, нарушить конфиденциальность.
286
286
```
287
287
288
288
## Итого
289
289
290
290
Для управления классами существуют два DOM-свойства:
291
291
292
-
-`className` -- строковое значение, удобно для управления всем набором классов
292
+
- `className` -- строковое значение, удобно для управления всем набором классов.
293
293
- `classList` - объект с методами `add/remove/toggle/contains`, удобно для управления отдельными классами.
294
294
295
295
Чтобы изменить стили:
296
296
297
-
- Свойство `style` является объектом со стилями в формате camelCase. Чтение и запись в него работают так же, как изменение соответствующих свойств в атрибуте `"style"`. Чтобы узнать, как добавить в него `important` и делать некоторые другие редкие вещи - смотрите [документацию](mdn:api/CSSStyleDeclaration].
297
+
- Свойство `style` является объектом со стилями в формате camelCase. Чтение и запись в него работают так же, как изменение соответствующих свойств в атрибуте `"style"`. Чтобы узнать, как добавить в него `important` и делать некоторые другие редкие вещи - смотрите [документацию](mdn:api/CSSStyleDeclaration).
298
298
299
299
- Свойство `style.cssText` соответствует всему атрибуту `"style"`, полной строке стилей.
300
300
301
301
Для чтения окончательных стилей (с учётом всех классов, после применения CSS и вычисления окончательных значений) используется:
302
302
303
-
- Метод `getComputedStyle(elem[, pseudo])` возвращает объект, похожий по формату на `style`. Только для чтения.
303
+
- Метод `getComputedStyle(elem, [pseudo])` возвращает объект, похожий по формату на `style`. Только для чтения.
Copy file name to clipboardExpand all lines: 2-ui/1-document/09-size-and-scroll/article.md
+2-3Lines changed: 2 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -2,8 +2,7 @@
2
2
3
3
Существует множество JavaScript-свойcтв, которые позволяют считывать информацию об элементе: ширину, высоту и другие геометрические характеристики. В этой главе мы будем называть их "метрики".
4
4
5
-
Они часто требуются, когда нам нужно передвигать или позиционировать элементы с помощью JavaScript для того, чтобы правильно вычислять координаты.
6
-
5
+
Они часто требуются, когда нам нужно передвигать или позиционировать элементы с помощью JavaScript.
7
6
8
7
## Простой пример
9
8
@@ -39,7 +38,7 @@
39
38
```
40
39
41
40
```smart header="Область `padding-bottom` (нижний внутренний отступ) может быть заполнена текстом"
42
-
Нижние внутренние отступы `padding-bottom` изображены пустыми на иллюстрациях, но если элемент содержит много текста, то браузеры отображают его перекрывающим `padding-bottom`.
41
+
Нижние внутренние отступы `padding-bottom` изображены пустыми на иллюстрациях, но если элемент содержит много текста, то браузеры отображают его перекрывающим `padding-bottom`.
43
42
44
43
Это заметка, чтобы избежать недопониманий, так как во всех стилях дальнейших примеров `padding-bottom` есть (если не указано противное).
0 commit comments