diff --git a/2-ui/1-document/09-size-and-scroll/2-scrollbar-width/task.md b/2-ui/1-document/09-size-and-scroll/2-scrollbar-width/task.md
index 67787894a..b39004cbf 100644
--- a/2-ui/1-document/09-size-and-scroll/2-scrollbar-width/task.md
+++ b/2-ui/1-document/09-size-and-scroll/2-scrollbar-width/task.md
@@ -6,6 +6,6 @@ importance: 3
Write the code that returns the width of a standard scrollbar.
-For Windows it usually varies between `12px` and `20px`. If the browser doesn't reserves any space for it, then it may be `0px`.
+For Windows it usually varies between `12px` and `20px`. If the browser doesn't reserve any space for it (the scrollbar is half-translucent over the text, also happens), then it may be `0px`.
P.S. The code should work for any HTML document, do not depend on its content.
diff --git a/2-ui/1-document/09-size-and-scroll/4-put-ball-in-center/field.svg b/2-ui/1-document/09-size-and-scroll/4-put-ball-in-center/field.svg
index 4ae90b1c7..f5bd9f4f9 100644
--- a/2-ui/1-document/09-size-and-scroll/4-put-ball-in-center/field.svg
+++ b/2-ui/1-document/09-size-and-scroll/4-put-ball-in-center/field.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/2-ui/1-document/09-size-and-scroll/article.md b/2-ui/1-document/09-size-and-scroll/article.md
index ee3c1a968..66f28115f 100644
--- a/2-ui/1-document/09-size-and-scroll/article.md
+++ b/2-ui/1-document/09-size-and-scroll/article.md
@@ -2,8 +2,7 @@
There are many JavaScript properties that allow us to read information about element width, height and other geometry features.
-We often need them when moving or positioning elements in JavaScript, to correctly calculate coordinates.
-
+We often need them when moving or positioning elements in JavaScript.
## Sample element
@@ -18,8 +17,8 @@ As a sample element to demonstrate properties we'll use the one given below:
width: 300px;
height: 200px;
border: 25px solid #E8C48F;
- padding: 20px;
- overflow: auto;
+ padding: 20px;
+ overflow: auto;
}
```
@@ -33,26 +32,24 @@ The element looks like this:
You can [open the document in the sandbox](sandbox:metric).
```smart header="Mind the scrollbar"
-The picture above demonstrates the most complex case when the element has a scrollbar. Some browsers (not all) reserve the space for it by taking it from the content.
+The picture above demonstrates the most complex case when the element has a scrollbar. Some browsers (not all) reserve the space for it by taking it from the content (labeled as "content width" above).
-So, without scrollbar the content width would be `300px`, but if the scrollbar is `16px` wide (the width may vary between devices and browsers) then only `300 - 16 = 284px` remains, and we should take it into account. That's why examples from this chapter assume that there's a scrollbar. If there's no scrollbar, then things are just a bit simpler.
+So, without scrollbar the content width would be `300px`, but if the scrollbar is `16px` wide (the width may vary between devices and browsers) then only `300 - 16 = 284px` remains, and we should take it into account. That's why examples from this chapter assume that there's a scrollbar. Without it, some calculations are simpler.
```
-```smart header="The `padding-bottom` may be filled with text"
-Usually paddings are shown empty on illustrations, but if there's a lot of text in the element and it overflows, then browsers show the "overflowing" text at `padding-bottom`, so you can see that in examples. But the padding is still there, unless specified otherwise.
+```smart header="The `padding-bottom` area may be filled with text"
+Usually paddings are shown empty on our illustrations, but if there's a lot of text in the element and it overflows, then browsers show the "overflowing" text at `padding-bottom`, that's normal.
```
## Geometry
-Element properties that provide width, height and other geometry are always numbers. They are assumed to be in pixels.
-
-Here's the overall picture:
+Here's the overall picture with geometry properties:

-They are many properties, it's difficult to fit them all in the single picture, but their values are simple and easy to understand.
+Values of these properties are technically numbers, but these numbers are "of pixels", so these are pixel measurements.
-Let's start exploring them from the outside of the element.
+Let's start exploring the properties starting from the outside of the element.
## offsetParent, offsetLeft/Top
@@ -66,7 +63,7 @@ That's the nearest ancestor that is one of the following:
2. `
`, `
`, or `
`, or
3. ``.
-In most practical cases we can use `offsetParent` to get the nearest CSS-positioned ancestor. And `offsetLeft/offsetTop` provide x/y coordinates relative to its upper-left corner.
+Properties `offsetLeft/offsetTop` provide x/y coordinates relative to `offsetParent` upper-left corner.
In the example below the inner `
` has `` as `offsetParent` and `offsetLeft/offsetTop` shifts from its upper-left corner (`180`):
@@ -85,7 +82,6 @@ In the example below the inner `
` has `` as `offsetParent` and `offse

-
There are several occasions when `offsetParent` is `null`:
1. For not shown elements (`display:none` or not in the document).
@@ -105,12 +101,12 @@ For our sample element:
- `offsetWidth = 390` -- the outer width, can be calculated as inner CSS-width (`300px`) plus paddings (`2 * 20px`) and borders (`2 * 25px`).
- `offsetHeight = 290` -- the outer height.
-````smart header="Geometry properties for not shown elements are zero/null"
-Geometry properties are calculated only for shown elements.
+````smart header="Geometry properties are zero/null for elements that are not displayed"
+Geometry properties are calculated only for displayed elements.
If an element (or any of its ancestors) has `display:none` or is not in the document, then all geometry properties are zero (or `null` for `offsetParent`).
-For example, `offsetParent` is `null`, and `offsetWidth`, `offsetHeight` are `0`.
+For example, `offsetParent` is `null`, and `offsetWidth`, `offsetHeight` are `0` when we created an element, but haven't inserted it into the document yet, or it (or its ancestor) has `display:none`.
We can use this to check if an element is hidden, like this:
@@ -136,13 +132,15 @@ In our example:

-...But to be precise -- they are not borders, but relative coordinates of the inner side from the outer side.
+...But to be precise -- these properties are not border width/height, but rather relative coordinates of the inner side from the outer side.
What's the difference?
It becomes visible when the document is right-to-left (the operating system is in Arabic or Hebrew languages). The scrollbar is then not on the right, but on the left, and then `clientLeft` also includes the scrollbar width.
-In that case, `clientLeft` would be not `25`, but with the scrollbar width `25 + 16 = 41`:
+In that case, `clientLeft` would be not `25`, but with the scrollbar width `25 + 16 = 41`.
+
+Here's the example in hebrew:

@@ -154,7 +152,9 @@ They include the content width together with paddings, but without the scrollbar

-On the picture above let's first consider `clientHeight`: it's easier to evaluate. There's no horizontal scrollbar, so it's exactly the sum of what's inside the borders: CSS-height `200px` plus top and bottom paddings (`2 * 20px`) total `240px`.
+On the picture above let's first consider `clientHeight`.
+
+There's no horizontal scrollbar, so it's exactly the sum of what's inside the borders: CSS-height `200px` plus top and bottom paddings (`2 * 20px`) total `240px`.
Now `clientWidth` -- here the content width is not `300px`, but `284px`, because `16px` are occupied by the scrollbar. So the sum is `284px` plus left and right paddings, total `324px`.
@@ -166,8 +166,7 @@ So when there's no padding we can use `clientWidth/clientHeight` to get the cont
## scrollWidth/Height
-- Properties `clientWidth/clientHeight` only account for the visible part of the element.
-- Properties `scrollWidth/scrollHeight` also include the scrolled out (hidden) parts:
+These properties are like `clientWidth/clientHeight`, but they also include the scrolled out (hidden) parts:

@@ -217,11 +216,11 @@ Setting `scrollTop` to `0` or a big value, such as `1e9` will make the element s
## Don't take width/height from CSS
-We've just covered geometry properties of DOM elements. They are normally used to get widths, heights and calculate distances.
+We've just covered geometry properties of DOM elements, that can be used to get widths, heights and calculate distances.
But as we know from the chapter , we can read CSS-height and width using `getComputedStyle`.
-So why not to read the width of an element like this?
+So why not to read the width of an element with `getComputedStyle`, like this?
```js run
let elem = document.body;
@@ -231,7 +230,7 @@ alert( getComputedStyle(elem).width ); // show CSS width for elem
Why should we use geometry properties instead? There are two reasons:
-1. First, CSS width/height depend on another property: `box-sizing` that defines "what is" CSS width and height. A change in `box-sizing` for CSS purposes may break such JavaScript.
+1. First, CSS `width/height` depend on another property: `box-sizing` that defines "what is" CSS width and height. A change in `box-sizing` for CSS purposes may break such JavaScript.
2. Second, CSS `width/height` may be `auto`, for instance for an inline element:
```html run
@@ -271,7 +270,7 @@ Elements have the following geometry properties:
- `offsetWidth/offsetHeight` -- "outer" width/height of an element including borders.
- `clientLeft/clientTop` -- the distances from the upper-left outer corner to the upper-left inner (content + padding) corner. For left-to-right OS they are always the widths of left/top borders. For right-to-left OS the vertical scrollbar is on the left so `clientLeft` includes its width too.
- `clientWidth/clientHeight` -- the width/height of the content including paddings, but without the scrollbar.
-- `scrollWidth/scrollHeight` -- the width/height of the content including the scrolled out parts. Also includes paddings, but not the scrollbar.
-- `scrollLeft/scrollTop` -- width/height of the scrolled out part of the element, starting from its upper-left corner.
+- `scrollWidth/scrollHeight` -- the width/height of the content, just like `clientWidth/clientHeight`, but also include scrolled-out, invisible part of the element.
+- `scrollLeft/scrollTop` -- width/height of the scrolled out upper part of the element, starting from its upper-left corner.
-All properties are read-only except `scrollLeft/scrollTop`. They make the browser scroll the element if changed.
+All properties are read-only except `scrollLeft/scrollTop` that make the browser scroll the element if changed.
diff --git a/2-ui/1-document/09-size-and-scroll/metric-all.svg b/2-ui/1-document/09-size-and-scroll/metric-all.svg
index a5dadb47f..20a59e18d 100644
--- a/2-ui/1-document/09-size-and-scroll/metric-all.svg
+++ b/2-ui/1-document/09-size-and-scroll/metric-all.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/2-ui/1-document/09-size-and-scroll/metric-client-left-top-rtl.svg b/2-ui/1-document/09-size-and-scroll/metric-client-left-top-rtl.svg
index dd9e17cf8..e8dd3d60a 100644
--- a/2-ui/1-document/09-size-and-scroll/metric-client-left-top-rtl.svg
+++ b/2-ui/1-document/09-size-and-scroll/metric-client-left-top-rtl.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/2-ui/1-document/09-size-and-scroll/metric-client-left-top.svg b/2-ui/1-document/09-size-and-scroll/metric-client-left-top.svg
index 968590466..8097afa78 100644
--- a/2-ui/1-document/09-size-and-scroll/metric-client-left-top.svg
+++ b/2-ui/1-document/09-size-and-scroll/metric-client-left-top.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/2-ui/1-document/09-size-and-scroll/metric-client-width-height.svg b/2-ui/1-document/09-size-and-scroll/metric-client-width-height.svg
index 83864b4c5..2603b05fb 100644
--- a/2-ui/1-document/09-size-and-scroll/metric-client-width-height.svg
+++ b/2-ui/1-document/09-size-and-scroll/metric-client-width-height.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/2-ui/1-document/09-size-and-scroll/metric-css.svg b/2-ui/1-document/09-size-and-scroll/metric-css.svg
index 13aa62afd..1f2e5f780 100644
--- a/2-ui/1-document/09-size-and-scroll/metric-css.svg
+++ b/2-ui/1-document/09-size-and-scroll/metric-css.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/2-ui/1-document/09-size-and-scroll/metric-offset-parent.svg b/2-ui/1-document/09-size-and-scroll/metric-offset-parent.svg
index 9e247639b..2d108473e 100644
--- a/2-ui/1-document/09-size-and-scroll/metric-offset-parent.svg
+++ b/2-ui/1-document/09-size-and-scroll/metric-offset-parent.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/2-ui/1-document/09-size-and-scroll/metric-offset-width-height.svg b/2-ui/1-document/09-size-and-scroll/metric-offset-width-height.svg
index 49bdccda7..4d30d90cc 100644
--- a/2-ui/1-document/09-size-and-scroll/metric-offset-width-height.svg
+++ b/2-ui/1-document/09-size-and-scroll/metric-offset-width-height.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/2-ui/1-document/09-size-and-scroll/metric-scroll-top.svg b/2-ui/1-document/09-size-and-scroll/metric-scroll-top.svg
index c6d14d0f3..7f72de422 100644
--- a/2-ui/1-document/09-size-and-scroll/metric-scroll-top.svg
+++ b/2-ui/1-document/09-size-and-scroll/metric-scroll-top.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/2-ui/1-document/09-size-and-scroll/metric-scroll-width-height.svg b/2-ui/1-document/09-size-and-scroll/metric-scroll-width-height.svg
index 0c3d29952..75a24e3bc 100644
--- a/2-ui/1-document/09-size-and-scroll/metric-scroll-width-height.svg
+++ b/2-ui/1-document/09-size-and-scroll/metric-scroll-width-height.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file