У світі CSS існує безліч властивостей, опанування яких може стати справжнім викликом. Однією з важливих, і, можливо, недооцінених, є властивість видимості. Ця властивість є ключовою для створення динамічних та інтерактивних веб-сторінок. Розберемося, що саме вона собою являє, навіщо вона потрібна, і які значення може приймати.
У цій статті ми детально розглянемо поняття видимості CSS, обговоримо її важливість та перелічимо всі можливі значення цієї властивості з докладними поясненнями.
Що таке видимість в CSS?
Властивість `visibility` в CSS дозволяє керувати відображенням елемента на веб-сторінці. Використовуючи її, можна приховувати або показувати елементи. Наприклад, уявіть, що на вашій сторінці є декілька блоків. За допомогою `visibility` ви можете вирішити, чи будуть вони усі видимі, чи деякі з них сховаються. Якщо встановити для елемента видимість як `visible`, він буде звичайним чином відображатися на сторінці.
Важливо розуміти, що коли елемент приховано, він все одно займає свій простір на сторінці. Просто він стає невидимим для кінцевого користувача.
Видимість CSS є важливим інструментом з наступних причин:
- Контроль відображення: Ви можете динамічно керувати тим, які елементи відображаються на сторінці залежно від дій користувача. Наприклад, показувати елемент лише тоді, коли користувач наведе на нього курсор або натисне кнопку.
- Збереження макету: Веб-сайт повинен зберігати свій макет незалежно від розміру екрана. Коли ви ховаєте елемент за допомогою `visibility: hidden`, він продовжує займати своє місце, але невидимий, забезпечуючи таким чином стабільність макету.
- Оптимізація продуктивності: Браузер не перераховує макет сторінки щоразу, коли елемент стає прихованим через `visibility: hidden`. Натомість, при використанні `display: none`, браузеру доводиться перераховувати макет щоразу, коли елемент знову стає видимим.
- Створення інтерактивних інтерфейсів: Ви можете комбінувати властивість видимості з іншими властивостями, такими як `opacity`, для створення плавних анімацій, ефектів згасання та переходів.
Різні значення видимості CSS
Властивість `visibility` може приймати п’ять різних значень. Для того, щоб краще зрозуміти, як вони працюють, пропонуємо вам створити невеличкий проект:
- Створіть папку на вашому комп’ютері.
- Створіть два файли: `index.html` і `styles.css`.
- Відкрийте проект у вашому улюбленому редакторі коду.
Ви можете скористатися цією командою для швидкого створення файлів:
mkdir -p CSS-visibility && cd CSS-visibility && touch index.html styles.css
Далі, підключіть файл `styles.css` до `index.html`. Для цього, в секцію `
<link rel="stylesheet" href="styles.css">
Після цього, ваш редактор коду повинен виглядати приблизно так:
`visible`
Значення `visibility: visible` робить елемент видимим на веб-сторінці. Це значення є стандартним для всіх елементів. Для кращого розуміння цієї концепції, створимо три блоки в нашому HTML-документі. В секції “ файлу `index.html` додайте наступний код:
<div class="container"> <div class="box1"> Box 1 </div> <div class="box2"> Box 2 </div> <div class="box3"> Box 3 </div> </div>
Тепер стилізуємо наші блоки за допомогою наступного CSS-коду:
.container { padding: 15px; width: max-content; display: flex; border: 1px solid black; } .box1, .box2, .box3 { height: 30px; width: 100px; } .box1 { background-color: rgb(224, 49, 209); margin-right: 15px; } .box2 { background-color: rgb(95, 234, 77); margin-right: 15px; } .box3 { background-color: rgb(154, 43, 12); }
На виході ви отримаєте щось схоже на:
Якщо ви встановите `visibility: visible` для цих блоків, нічого не зміниться, оскільки за замовчуванням вони вже є видимими. Але ми можемо продемонструвати, як працює властивість `visible`, використовуючи `display: none` для одного з блоків. Наприклад, для `box3`: змініть CSS-код класу `.box3` таким чином:
.box3 { background-color: rgb(154, 43, 12); display: none }
Після перезавантаження сторінки, ви побачите лише два блоки: `box1` і `box2`.
Зверніть увагу, що розмір елемента `.container` зменшився. Коли використовується `display: none`, `box3` зникає зі сторінки і звільняє місце для інших блоків.
`hidden`
Коли ми встановлюємо для елемента властивість `visibility: hidden`, він стає невидимим для користувача, але при цьому продовжує займати свій простір. Наприклад, спробуємо приховати `box2`:
Змініть CSS-код для `.box2` наступним чином:
.box2 { background-color: rgb(95, 234, 77); margin-right: 15px; visibility: hidden }
Додали лише один рядок:
visibility: hidden
Результат буде таким:
Ви бачите проміжок між `box1` та `box3`? Це тому, що `box2` лише приховано, але все ще займає простір.
Перевіривши код елементів на сторінці, ми побачимо, що `box2` все ще присутній в DOM:
`collapse`
Значення `visibility: collapse` найчастіше використовується для елементів таблиці, таких як рядки чи стовпці. Давайте створимо HTML-таблицю, додавши наступний код у ваш файл `index.html`:
<table> <tr> <th>Programming Language</th> <th>Framework</th> </tr> <tr> <td>JavaScript </td> <td>Angular </td> </tr> <tr class="hidden-row"> <td>Ruby </td> <td>Ruby on Rails</td> </tr> <tr> <td>Python </td> <td>Django </td> </tr> </table>
Тепер додамо стилі для таблиці у ваш CSS файл:
table { border-collapse: collapse; width: 50%; } th, td { border: 1px solid black; padding: 8px; }
Після рендеру сторінки, ви побачите таблицю, схожу на цю:
Тепер приховаємо другий рядок, застосувавши значення `visibility: collapse`. Додайте наступний код у ваш CSS файл:
.hidden-row { visibility: collapse; }
Після оновлення сторінки, ви побачите, що рядок з Ruby і Ruby on Rails буде приховано:
`initial`
Значення `visibility: initial` повертає елемент до початкового значення. Наприклад:
- Спочатку всі рядки таблиці відображалися.
- Потім ми згорнули другий рядок, зробивши його невидимим.
- Тепер ми можемо повернутися до початкового стану – знову зробити його видимим.
Для демонстрації цього, додамо кнопку, яка буде перемикати видимість другого рядка. Додайте наступний код у ваш HTML:
<button onclick="toggleVisibility()">Click Me!!</button>
Тепер додамо JavaScript-функцію, яка буде перемикати клас `.visible-row` у елемента з класом `.hidden-row`, коли кнопка натискається:
<script> function toggleVisibility() { const hiddenRow = document.querySelector('.hidden-row'); hiddenRow.classList.toggle('visible-row'); } </script>
Додайте цей код у ваш CSS файл:
.visible-row { visibility: initial; }
Тепер, коли ви натискаєте на кнопку, видимість другого рядка буде змінюватися.
`inherit`
Значення `visibility: inherit` дозволяє дочірньому елементу успадкувати властивість `visibility` від свого батьківського елемента. Для демонстрації, додамо такий код у HTML:
<h2>Inherit Demo</h2> <div style="visibility: hidden"> <h3 style="visibility: inherit"> Hidden</h3> </div> <p>Visible (not inside a hidden element) </p>
Якщо ви відобразите сторінку, ви побачите лише заголовок `h2` та абзац. Між ними буде простір, який представляє собою приховані елементи.
У нас є елемент `div`, видимість якого встановлена як `hidden`. Всередині нього знаходиться `h3`, видимість якого встановлена як `inherit`, тобто він успадковує видимість від `div`.
Якщо ми змінимо властивість `div` на `visibility: visible`, `h3` (його дочірній елемент) також успадкує це.
<h2>Inherit Demo</h2> <div style="visibility: visible"> <h3 style="visibility: inherit"> Hidden</h3> </div> <p>Visible (not inside a hidden element) </p>
`visibility: hidden` vs `display: none`
Основна відмінність між `display: none` та `visibility: hidden` полягає в тому, що перший повністю видаляє елемент з макета сторінки, в той час як другий приховує елемент, але він все ще займає місце.
Розглянемо приклад для ілюстрації:
<style> .box { display: inline-block; width: 100px; height: 100px; background-color: lightgray; margin-right: 20px; } .box1 { background-color: lightblue; } .box2 { background-color: black; } .container { padding: 10px; border :2px solid black; padding-left: 20px; width: 250px; } </style> <div class="container"> <div class="box box1"></div> <div class="box box2"></div> </div>
Якщо ви відобразите цю сторінку, ви побачите два блоки поруч:
Демонстрація `display: none`
Додайте до класу `.box1` наступний код:
display: none;
Після оновлення, ви побачите, що `.box1` зник. Другий блок (чорний) переміститься ліворуч, щоб зайняти місце, яке раніше займав блакитний блок.
Демонстрація `visibility: hidden`
Замість `display: none`, додайте до класу `.box1` наступний код:
visibility: hidden
Ця властивість залишить простір для `.box1`, але не буде його відображати. З іншого боку, `.box2` залишається на своєму місці.
display:none |
visibility:hidden |
Повністю видаляє елемент зі сторінки | Приховує елемент, але він залишається у макеті |
Недоступно для програм зчитування з екрана | Доступно для програм зчитування з екрана |
Покращення доступності за допомогою `visibility`
Використовуйте `visibility` для приховування елементів, які не є важливими для всіх користувачів. Наприклад, показувати певну інформацію лише для неавторизованих користувачів. Або розміщувати допоміжну інформацію, яка не повинна бути завжди видимою.
Давайте створимо приклад:
<style> .login-form { display: none; } .login-text:hover + .login-form { display: block; } .login-form label { display: block; margin-bottom: 5px; } .login-form input { width: 30%; margin-bottom: 10px; } </style> <p class="login-text">Login</p> <form class="login-form"> <label for="username">Username:</label> <input type="text" id="username" name="username" required /> <label for="password">Password:</label> <input type="password" id="password" name="password" required /> <button type="submit">Submit</button> </form>
У цьому прикладі форма входу з’являється тільки при наведенні курсора на текст “Login”.
Висновок
Сподіваємось, тепер ви розумієте, як використовувати властивість видимості CSS у ваших проектах для створення динамічних переходів та покращення доступності. Важливо знати, де застосовувати кожне з її значень для створення візуально привабливих веб-сторінок. Пам’ятайте, що неправильне використання цієї властивості може призвести до приховування важливих даних для користувачів.
Перегляньте наші інші статті про CSS, щоб дізнатися більше про властивості, які можна комбінувати з `visibility`.