Зміст:
- 1 Розмір і прокрутка елемента
- 2 Як дізнатися движок сайту: 9 способів визначити CMS
Розмір і прокрутка елемента
Є багато властивостей JavaScript, які дозволяють нам читати інформацію про ширину, висоту елемента та інші геометричні характеристики.
Ми часто потребуємо їх під час переміщення або позиціювання елементів в JavaScript.
Приклад елемента
Як приклад елемента для демонстрації властивостей ми використаємо наведений нижче:
Він має рамки, відступи та прокручування. Повний набір функцій. Тут немає зовнішніх відступів (margins), оскільки вони не є частиною самого елемента, і для них немає спеціальних властивостей.
На малюнку вище показаний найскладніший випадок, коли елемент має смугу прокрутки. Деякі браузери (не всі) резервують місце для нього, беручи його з вмісту (позначеного вище як “content width”).
Таким чином, без смуги прокрутки ширина вмісту становила б 300px , але якщо ширина смуги прокрутки 16px (ширина може відрізнятися залежно від пристрою та браузера), то залишається лише 300 – 16 = 284px , і ми повинні це враховувати. Ось чому приклади з цього розділу надані зі смугою прокрутки. Без неї деякі розрахунки будуть простіші.
Зазвичай на наших ілюстраціях відступи відображаються порожніми, але якщо в елементі забагато тексту і він переповнюється, то браузери показують “випадаючий” текст в області padding-bottom , і це нормально.
Геометрія
Ось ілюстрація з усіма геометричними властивостями:
Значення цих властивостей технічно є числами, але ці числа є “пікселями”, тому це вимірювання у пікселях.
Почнемо досліджувати, починаючи зовні елемента.
offsetParent, offsetLeft/Top
Ці властивості рідко потрібні, але все ж це “найбільш зовнішні” геометричні властивості, тому й почнемо з них.
У властивості offsetParent знаходиться предок елементу, який браузер використовує для обчислення координат під час візуалізації.
Тобто найближчий предок, який задовольняє наступним умовам:
Властивості offsetLeft/offsetTop надають координати x/y відносно верхнього лівого кута offsetParent .
У наведеному нижче прикладі внутрішній має в якості offsetParent , а властивості offsetLeft/offsetTop є зсувами щодо верхнього лівого кута ( 180 ):
.
Існує декілька випадків, коли offsetParent дорівнює null :
- Для елементів, що не відображаються ( display:none або коли його немає у документі).
- Для елементів та .
- Для елементів з position:fixed .
offsetWidth/Height
Тепер перейдемо до самого елемента.
Ці дві властивості є найпростішими. Вони забезпечують “зовнішню” ширину/висоту елемента. Або, іншими словами, його повний розмір, включаючи рамки(border).
- offsetWidth = 390 – зовнішня ширина блоку, її можна отримати додаванням внутрішньої CSS-ширини ( 300px ), внутрішніх відступів ( 2 * 20px ) та рамок ( 2 * 25px ).
- offsetHeight = 290 – зовнішня висота блоку.
Геометричні властивості, такі як координати та розміри, обчислюються лише для відображених елементів.
Якщо елемент (або будь-який із його предків) має display:none або його немає в документі, тоді всі геометричні властивості дорівнюють нулю (або null для offsetParent ).
Наприклад, offsetParent дорівнює null , а offsetWidth , offsetHeight дорівнюють 0 , якщо ми створили елемент, але ще не вставили його в документ, або він (або його предок) має display:none .
Ми можемо використати це, щоб перевірити, чи приховано елемент, наприклад:
Зауважимо, що функція isHidden також поверне true для елементів, які в принципі показуються, але їх розміри дорівнюють нулю (наприклад, порожні ).
clientTop/Left
Підемо далі. Всередині елемента у нас є рамки (border).
Для їх вимірювання існують геометричні властивості clientTop та clientLeft .
…Але якщо бути точним – ці властивості не ширина/висота рамки, а відступи внутрішньої частини елемента від зовнішньої.
Вона виникає, коли документ написаний справа наліво (операційна система арабською або івритом). Тоді смуга прокрутки розташована не праворуч, а ліворуч, а тому clientLeft також включає ширину смуги прокрутки.
У цьому випадку clientLeft буде не 25 , бо додасться ширина смуги прокрутки: 25 + 16 = 41 .
clientWidth/Height
Ці властивості забезпечують розмір області всередині рамок елемента.
Вони включають ширину вмісту разом із внутрішніми відступами padding , але без смуги прокрутки:
На зображенні вище давайте спочатку розглянемо висоту clientHeight .
Немає горизонтальної смуги прокрутки, тому це точно сума того, що знаходиться всередині меж елемента: CSS-висота 200px плюс верхній і нижній відступи ( 2 * 20px ) загалом 240px .
Тепер clientWidth – ширина вмісту тут дорівнює не 300px , а 284px , тому що 16px займає смуга прокрутки. Таким чином, сума становить 284px плюс відступи ліворуч і праворуч, разом 324px .
Якщо немає відступів padding , то clientWidth/Height в точності рівні розміру області вмісту всередині рамок за вирахуванням смуги прокручування (якщо вона є).
Тому в тих випадках, коли ми точно знаємо, що відступів немає, можна використовувати clientWidth/clientHeight для отримання розмірів внутрішньої області вмісту.
scrollWidth/Height
Ці властивості схожі на clientWidth/clientHeight , але вони також включають прокручену (приховану) частину елемента:
- scrollHeight = 723 – повна внутрішня висота області вмісту, включаючи прокручену область.
- scrollWidth = 324 – це повна внутрішня ширина, тут у нас немає горизонтальної прокрутки, тому вона дорівнює clientWidth .
Ми можемо використовувати ці властивості, щоб розширити елемент на всю ширину/висоту.
// розгорнути елемент на всю висоту вмісту element.style.height = `$px`;
Натисніть кнопку, щоб розгорнути елемент:
текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст
scrollLeft/scrollTop
Властивості scrollLeft/scrollTop це ширина/висота прихованої, прокрученої частини елемента.
На малюнку нижче ми бачимо scrollHeight та scrollTop для блоку з вертикальною прокруткою.
Іншими словами, scrollTop означає “скільки прокручено вгору”.
Більшість геометричних властивостей тут доступні лише для читання, але scrollLeft/scrollTop можна змінювати, і браузер прокрутить елемент відповідно до змін.
Якщо клацнути на елемент нижче, буде виконано код elem.scrollTop += 10 . Це змусить вміст елемента прокрутитися на 10px вниз.
Встановлення scrollTop на 0 або навпаки велике значення, наприклад 1e9 змусить елемент прокрутитися до самого верху/низу відповідно.
Не варто брати ширину/висоту з CSS
Ми щойно розглянули геометричні властивості елементів DOM, які можна використовувати для отримання ширини, висоти та обчислення відстані.
Але, як ми знаємо з розділу Стилі та класи, ми можемо зчитати CSS висоту та ширину за допомогою getComputedStyle .
То чому б не прочитати ширину елемента за допомогою getComputedStyle , ось так?
let elem = document.body; alert( getComputedStyle(elem).width ); // показує CSS-ширину elem
Чому ми повинні замість цього використовувати геометричні властивості? Є дві причини:
- По-перше, CSS width/height залежить від іншої властивості: box-sizing яка визначає “що таке” ширина та висота CSS. Виходить, що зміна box-sizing , наприклад, для зручнішої верстки, зламає такий JavaScript.
- По-друге, CSS width/height може бути auto , наприклад для вбудованого елемента:
alert( getComputedStyle(elem).width ); // auto
І є ще одна причина: смуга прокрутки. Іноді код, який добре працює без смуги прокрутки, починає працювати з помилками, оскільки смуга прокрутки займає простір у вмісті в деяких браузерах. Отже, реальна ширина, доступна для вмісту, менша за ширину CSS. І clientWidth/clientHeight враховують це.
…Але з getComputedStyle(elem).width ситуація інша. Деякі браузери (наприклад, Chrome) повертають реальну внутрішню ширину без смуги прокрутки, а деякі з них (наприклад, Firefox) – CSS ширину (ігнорує прокрутку). Такі між браузерні відмінності є причиною не використовувати getComputedStyle , а радше покладатися на геометричні властивості.
Якщо ваш браузер резервує простір для смуги прокрутки (більшість браузерів для Windows це роблять), ви можете перевірити це нижче.
Елемент із текстом має CSS width:300px .
На комп’ютері в ОС Windows, Firefox, Chrome, Edge резервується місце для смуги прокрутки. Але Firefox показує 300px , а Chrome і Edge – менше. Це тому, що Firefox повертає ширину CSS, а інші браузери повертають “реальну” ширину.
Зверніть увагу, що описана різниця стосується лише читання getComputedStyle(. ).width з JavaScript, візуально все правильно.
Підсумки
Елементи мають наступні геометричні властивості:
- offsetParent – це найближчий CSS-позиціонований предок або найближчий td , th , table , body .
- offsetLeft/offsetTop – координати відносно лівого верхнього куту offsetParent .
- offsetWidth/offsetHeight – “зовнішня” ширина/висота елемента, включаючи рамки.
- clientLeft/clientTop – відстані від верхнього лівого зовнішнього кута до верхнього лівого внутрішнього (вміст + відступ) кута. Для ОС, орієнтованої зліва направо, це завжди ширина лівої/верхньої рамки. Для ОС, орієнтованої справа наліво, вертикальна смуга прокрутки розташована ліворуч, тому clientLeft також включає її ширину.
- clientWidth/clientHeight – ширина/висота вмісту, включаючи відступи, але без смуги прокрутки.
- scrollWidth/scrollHeight – ширина/висота вмісту, як і clientWidth/clientHeight , але також включає прокручену невидиму частину елемента.
- scrollLeft/scrollTop – ширина/висота прокрученої верхньої частини елемента, починаючи з його верхнього лівого кута.
Усі властивості доступні лише для читання, за винятком scrollLeft/scrollTop які змушують браузер прокручувати елемент у разі зміни.
Завдання
Що прокрутиться від низу?
Властивість elem.scrollTop – це розмір прокрученої частини зверху. Як отримати розмір прокрутки знизу (назвемо його scrollBottom )?
Напишіть код, який працює для довільного elem .
P.S. Будь ласка, перевірте свій код: якщо прокручування немає або елемент повністю прокручено вниз, він має повернути 0 .
let scrollBottom = elem.scrollHeight - elem.scrollTop - elem.clientHeight;
Іншими словами: (вся висота) мінус (прокручена верхня частина) мінус (видима частина) – саме це і є прокручена нижня частина.
Яка ширина смуги прокрутки?
Напишіть код, який повертає ширину стандартної смуги прокрутки.
Для Windows це зазвичай 12px або 20px . Якщо браузер не резервує для прокрутки місця (смуга прокрутки напівпрозора над текстом), тоді може бути 0px .
P.S. Код повинен працювати для будь-якого HTML-документа, незалежно від його вмісту.
Щоб отримати ширину смуги прокрутки, ми можемо створити елемент із прокруткою, але без рамок і відступів.
Тоді різниця між його повною шириною offsetWidth і шириною внутрішньої області вмісту clientWidth буде саме ширина смуги прокрутки:
// створюємо div з прокруткою let div = document.createElement('div'); div.style.overflowY = 'scroll'; div.style.width = '50px'; div.style.height = '50px'; // потрібно розмістити його в документі, інакше розміри будуть 0 document.body.append(div); let scrollWidth = div.offsetWidth - div.clientWidth; div.remove(); alert(scrollWidth);
Як дізнатися движок сайту: 9 способів визначити CMS
Кожен сайт — це тисячі рядків HTML-коду. Навіть досвідчені вебмайстри не прописують код вручну від початку до кінця, тому що в цьому нема потреби. У CMS, системі управління вмістом або програмному забезпеченні для організації вебсайтів, верстають сайти й досвідчені розробники, й ті, хто не розбирається в HTML. Як дізнатися CMS движок сайту, не маючи навичок вебпрограмування, і навіщо може бути потрібно визначити CMS — читайте далі.
Що таке CMS
CMS — Content Management System, система управління контентом або, простіше кажучи, движок сайту. Це інструмент створення та наповнення вебсторінок. Користувач формує структуру сайту, вивантажує в мережу тексти, зображення та відео. При цьому йому не обов’язково знати HTML-код. Він заповнює поля, а система сама перетворює контент на вебформат.
- Коробкові . Завантажуєте, встановлюєте та працюєте. Приклади: WordPress , OpenCart , Drupal , Joomla .
- Самописні . Це CMS сайту, зроблені на замовлення під конкретний проєкт, тому їх немає у відкритому доступі. Кожна із самописних CMS існує в єдиному екземплярі.
- CMS у конструкторах сайтів . Працюють онлайн. Реєструєтеся, створюєте вебсторінку і користуєтеся рушієм, який включений у функціонал сервісу. Приклади: Tilda , Jimdo , Google Sites , Wix , Weebly , Shopify .
- Студійні . Схожі на самописні, але ці CMS розробляють компанії для комерційного використання — створення сайтів для клієнтів або продажу движка стороннім розробникам.
Навіщо дізнаватися движок або CMS чужого сайту?
Дізнатися ЦМС сайту конкурента буде корисно тим, хто працює над створенням власного ресурсу. Перед запуском проєкту в мережу необхідно проаналізувати сторінки конкурентів, зокрема дізнатися, яку CMS вони використовують на своїх сайтах.
Як дізнатися на якому движку сайт? Введіть у пошуковий рядок запит, релевантний вашому проєкту, і дізнайтеся рушій сайтів із ТОПу видачі. Це буде зразок для наслідування, оскільки пошукові алгоритми не пропускають на вершину ранжування погано склеєні вебконструкції.
Важливо ! Не варто лякатися вставок HTML-коду, наведених у статті. Для досягнення мети — визначити CMS сайту — достатньо виконати наведені інструкції. Вам не обов’язково розуміти суть коду або розбиратися в ньому.
Які є способи визначення движка сайту ваших конкурентів
Через HTML-код сторінки
Компанії в міру сил приховують свій рушій, захищаючись від можливих кібератак. Але в HTML-коді сторінок, у тезі head, залишаються сліди, за якими можна визначити CMS сайту. Спосіб показує тільки коробкові движки. Як дізнатися CMS через HTML-код сторінки:
1. Відкрийте сайт, CMS якого потрібно дізнатися.
2. Подивіться код сторінки, натиснувши комбінацію клавіш Ctrl+U, або через контекстне меню кнопкою «Перегляд коду сторінки» (в Opera «Вихідний текст сторінки»).
3. Шукайте службовий метатег generator. Якщо він є в коді, його значення допоможе визначити ЦМС, яка використовується на ресурсі. Виглядає це так.
На скриншоті видно, що сторінка використовує движок PrestaShop.
Через шляхи до файлів
Якщо вебмайстер приховав тег generator, ви можете дізнатися рушій сайту, подивившись у HTML-коді шляхи до файлів JavaScript. Знайдіть через Ctrl+F на сторінці коду тег script type. У його тілі може бути позначена CMS. Рядок має такий вигляд:
На скриншоті нижче ресурс використовує Bitrix. Цей спосіб визначення CMS допоможе дізнатися движок сайту, тільки якщо він коробкового типу.
Через футер сайта
У кожного вебресурсу внизу сторінки є блок із додатковою інформацією: карта, зворотний зв’язок, політика конфіденційності, вакансії. Це і є футер. Якщо два перші способи, як дізнатися движок сайту, нічого не дали — перегорніть сторінку вниз і вивчіть наведену в блоці інформацію. Іноді розробники залишають там відомості про рушій. Таким чином можна визначити ЦМС сайту, навіть якщо вона студійна.
Через аналіз структури посилань
- nazvanie-saita/?p=id-znachenia — підкреслений знак /?р показує, що на сайті використовується рушій WordPress.
- nazvanie-saita/index.php?option=com_content&task=view&id=12&Itemid=345 — такий ресурс працює на CMS Joomla.
Через адмін-панель
Спробуйте зайти на адмін-панель сайту, CMS якого хочете визначити. URL входу є у відкритому доступі, достатньо ввести в рядок пошуку «Як увійти в адмінку CMS». Підбирайте адреси від різних рушіїв. Якщо ресурс працює на коробковій CMS — один із варіантів підійде, і ви потрапите у вікно входу в адмінку.
Адмінка CMS Joomla : nazvanie-saita/administrator
Адмінка CMS Drupal : nazvanie-saita/user Адмінка CMS 1С-Bitrix : nazvanie-saita/bitrix/admin/ Адмінка CMS OpenCart : nazvanie-saita/admin Адмінка CMS Modx : nazvanie-saita/manager
Через файл robots.txt
Щоб в індексації сайту не брала участі його технічна частина, веброзробники використовують файл robots.txt, який зберігається в кореневій папці сайту. Дізнатися CMS сайту можна, аналізуючи назви внутрішніх папок у цьому файлі. Відкрийте robots.txt, ввівши URL сторінки в такому вигляді: nazvanie-saita/robots.txt/. Шукайте назву рушія в тексті, що відкрився.
Через заголовки HTTP і розширення браузерів
HTTP — це порядок обміну даними між користувачами та мережею. Для визначення CMS сайту не обов’язково розуміти, що таке заголовки HTTP. Важливо, що в них можуть бути вказівки на рушій, який використовується, і що вони приховані від користувачів. Дізнатися движок сайту через заголовки HTTP допоможуть браузерні розширення Wappalyzer , HTTP Headers , Chrome Sniffer , RDS Bar , iTrack .
Через парсинг
Парсинг — це автоматизований збір та аналіз інформації з вебресурсів. Найпопулярніший парсер, здатний обробляти інформацію про движки сайту — A-parser Enterprise . Це комплексний сервіс, який об’єднує 90 парсерів і розпізнає 600 CMS. Коштує програма 199$.
Через онлайн-сервіси
- iTrack . Визначає 80 CMS, не потребує реєстрації, показує історію нещодавніх перевірок. Працює швидко, має браузерні розширення.
- Whatcms . Визначає 592 CMS, показує історію останніх пошуків, видає додаткову інформацію про сайт. Не потребує реєстрації.
- BuiltWith . Масштабний сервіс, що дає змогу визначити CMS сайту і показує детальну інформацію про ресурс: які трекери на ньому встановлені, які віджети, наявність мовних версій. Відповідь на запитання, як дізнатися движок сайту онлайн, ви теж знайдете в результатах аналізу.
Висновки
- CMS — система управління контентом, яку ще називають движком сайту. Загалом таких систем розрізняють чотири різновиди: коробкові, самописні, CMS у конструкторах і студійні.
- Визначення CMS або движка сайту — нескладний і варіативний процес. Як дізнатися CMS сайту? Введіть у пошуковий рядок запит, релевантний вашому проєкту, і визначте рушій сайтів із ТОПу видачі.
- Якщо CMS коробкова або створена за допомогою онлайн-конструктора — ви впізнаєте рушій, навіть не маючи спеціальних навичок. Визначити CMS сайту складніше, якщо вона самописна або студійна.
- Спеціалізовані сервіси дають найшвидший результат , але іноді інформації про рушій немає у звітах. Тоді варто по черзі перевірити сайт, використавши решту 8 способів із запропонованої нами вище інструкції.
Дізнайтеся легко рушій сайту ваших конкурентів і створіть найкращий ресурс!
І підписуйтеся на наш Telegram-канал про маркетинг.