Контакты

Россия 196084 , Санкт-Петербург, ул. Заозерная, дом №8, корпус 2, Литера А, офис 212

Мы работаем по будням с 10.00 до 19.00 +7 (495) 215-53-16 +7 (812) 748-20-96 info@notissimus.com
Социальные сети
Как CSS Visibility улучшает веб-дизайн с помощью скрытых драгоценных камней

У нас много свойств CSS, и освоение всех может оказаться непростой задачей. Видимость CSS – одно из важных свойств, которым вы должны овладеть, если хотите стать квалифицированным веб-разработчиком. В этой статье я дам определение CSS Visibility, объясню его важность, а также перечислю и объясню различные значения CSS visibility.

Что такое видимость CSS?

Свойство CSS visibility скрывает или показывает элемент на веб-странице. Например, вы можете разместить на веб-странице четыре поля и использовать свойство видимости, чтобы определить, как они будут отображаться. Все элементы будут отображаться на странице, если вы установите свойство видимости как visible. Однако если элемент скрыт, он будет по-прежнему занимать место, но будет скрыт от конечного браузера/экрана.

CSS Видимость важна в следующих случаях:

  • Контроль видимости: Вы можете контролировать то, что должно отображаться в зависимости от текущего пользователя. Вы можете установить видимость элемента, чтобы он был виден только тогда, когда пользователь активирует его с помощью определенного действия. Например, наведение курсора или нажатие на кнопку.
  • Сохранение макета: Хорошее приложение должно сохранять свой макет и содержимое независимо от размера экрана. Когда вы устанавливаете видимость элемента как скрытую, он по-прежнему будет занимать место, но не будет виден конечным пользователям. Такой подход позволяет поддерживать последовательную компоновку.
  • Оптимизация производительности: Браузеру не нужно постоянно пересчитывать макет, когда свойство видимости установлено как visibility:hidden. Однако при использовании свойства display:none браузеру приходится пересчитывать макет всякий раз, когда вы решаете снова показать элемент.
  • Создание динамичного и интерактивного пользовательского интерфейса: Вы можете комбинировать свойство CSS visibility с другими свойствами, такими как opacity, для создания эффектов затухания, анимации и плавных переходов.

Различные значения видимости CSS

CSS visibility имеет пять возможных значений. Я буду подробно описывать их с помощью блоков кода и скриншотов. Если вы намерены следовать за мной,

  • Создайте папку на вашей локальной машине.
  • Добавьте два файла: index.html и styles.css.
  • Откройте проект в вашем любимом редакторе кода (я использую VS Code).

Вы можете использовать эту команду:

mkdir -p CSS-visibility && cd CSS-visibility && touch index.html styles.css

Далее необходимо соединить файлы index.html и styles.css. В разделе <head> файла index.html добавьте следующее:

<link rel="stylesheet" href="styles.css">

Теперь в вашем редакторе кода должно быть что-то похожее на это:

Visible

Когда вы устанавливаете значение элемента как visibility: visible, он будет отображаться на веб-странице. Эта видимость присутствует по умолчанию. Чтобы лучше понять эту концепцию, мы можем сделать три поля в нашем HTML-документе. В разделе <body> вашего index.html добавьте следующее:

<div class="container">

      <div class="box1"> Box 1 </div>

      <div class="box2"> Box 2 </div>

      <div class="box3"> Box 3 </div>

    </div>

Теперь мы можем стилизовать наши divs (поля) с помощью следующего кода 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

  }

Когда вы повторно отобразите страницу, вы заметите, что у нас есть только два ящика, один и два.

Если вы внимательны, то заметите, что наш элемент .container уменьшился в размерах. Когда вы используете свойство display: none, вставка 3 не отображается, и ее место в браузере становится свободным для других вставных элементов.

Hidden

Когда мы применяем к элементу CSS свойство visibility: hidden, он будет скрыт от конечного пользователя. Однако он по-прежнему будет занимать место. Например, мы можем скрыть Box2 с помощью этого свойства.

Для этого измените CSS-код Box2 следующим образом:

.box2 {

    background-color: rgb(95, 234, 77);

    margin-right: 15px;

    visibility: hidden

  }

Единственное изменение, которое мы внесли, это добавление этой строки:

visibility: hidden

Конечная страница будет выглядеть так, как показано на рисунке:

Мы видим пространство между вставкой 1 и вставкой 3, поскольку элемент вставки 2 только скрыт. Мы можем видеть, что Box 2 все еще находится в DOM, если проверим нашу отрендеренную страницу.

Collapse

Collapse – это значение видимости, которое используется для вложенных элементов. HTML-таблицы – прекрасный пример того, где можно применить атрибут visibility:collapse.

Мы можем добавить следующий код для создания таблицы в нашем 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>

Теперь мы можем стилизовать нашу таблицу с границей в 1px для всех ее ячеек. Добавьте это в ваш файл 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-элемент к его начальному значению. Например:

  • Мы начали с отображения всех строк нашей таблицы.
  • Мы свернули значение строки 2, тем самым скрыв ее.
  • Теперь мы можем вернуться к исходному значению (отобразить его).

Чтобы продемонстрировать это, мы добавим кнопку, которая переключается между отображением и сворачиванием значений.

Добавьте эту кликабельную кнопку в HTML-код:

<button onclick="toggleVisibility()">Click Me!!</button>

Затем мы можем добавить функцию JavaScript, которая ищет класс .hidden-row и переключает на него класс .visible-row при нажатии на кнопку.

<script>

    function toggleVisibility() {

      const hiddenRow = document.querySelector('.hidden-row');

      hiddenRow.classList.toggle('visible-row');

    }

  </script>

Add this code to your CSS file;

.visible-row {

    visibility: initial;

  }

Значение видимости будет переключаться туда и обратно по мере нажатия на отображаемую кнопку.

Inherit

Свойство visibility : inherit позволяет дочернему элементу наследовать свойство display от родительского.

Для демонстрации работы этого свойства мы можем воспользоваться следующим простым кодом:

<h1>Inherit Demo</h1>

   <div style="visibility: hidden">

     <h2 style="visibility: inherit"> Hidden</h2>

   </div>

   <p>Visible (not inside a hidden element) </p>

 </p>

При рендеринге страницы будет отображаться только содержимое внутри тегов h1 и paragraph. Однако между тегами <h1> и <p> останется пространство, представляющее скрытые элементы. У нас есть один div, видимость которого мы установили как скрытую. Внутри div находится тег <h2>. Мы установили видимость <h2> как inherit, что означает, что он наследуется от своего родителя, div.

Однако если мы установим свойство div как visible, то <h2> (его дочерний элемент) также унаследует это свойство.

<h>Inherit Demo</h>

    <div style="visibility: visible">

      <h2 style="visibility: inherit"> Hidden</h2>

    </div>

    <p>Visible (not inside a hidden element) </p>

CSS visibility: hidden в сравнении с display: none

Основное различие между display:none и visibility:hidden заключается в том, что первый полностью удаляет элемент из макета, а второй скрывает элемент, но при этом занимает место.

Мы можем использовать этот код, чтобы продемонстрировать разницу между ними:

<!DOCTYPE html>

<html>

<head>

    <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>

    </head>

    <body>

      <div class="container">

        <div class="box box1"></div>

        <div class="box box2"></div>

      </div>

</body>

</html>

Если мы отобразим нашу страницу, то получим два поля рядом друг с другом:

Демонстрация display: none

Добавьте это в класс .box1:

display: none;

Когда вы отобразите страницу, вы заметите, что .box1 больше не отображается. Второй бокс (черный) также перемещается влево и занимает место, ранее занимаемое светло-голубым боксом.

Демонстрация visibility: hidden

Вместо display: none добавьте этот класс .box1:

visibility: hidden

Это свойство оставляет место для box1, но не отображает его. С другой стороны, box2 остается на своем месте.

display:nonevisibility:hidden
Полностью удаляет элемент с веб-страницыСкрывает элемент HTML, но при этом занимает место на веб-странице
Вы можете придать стиль элементу, для которого установлено значение noneВы можете расположить и придать стиль элементу, видимость которого скрыта
Недоступно для чтения с экранаВы можете получить доступ к элементу, видимость которого установлена как скрытая, с помощью устройств чтения с экрана

Улучшение доступности с помощью видимости CSS

Вы можете использовать видимость CSS, чтобы скрыть элементы, которые не важны для всех пользователей. Например, вы можете использовать эту функцию для скрытия входа в систему, который будет доступен только тем пользователям, которые не вошли в систему. Вы также можете иметь боковую панель или нижний колонтитул, содержащий условия предоставления услуг или информацию об авторских правах.

Мы можем взять этот код, чтобы проиллюстрировать, как можно улучшить видимость:

<!DOCTYPE html>

<html>

  <head>

    <title>Homepage</title>

    <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>

  </head>

  <body>

    <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>

  </body>

</html>

Форма входа в систему становится видимой только при наведении курсора на первый элемент.

Заключение

Мы уверены, что теперь вы можете комфортно использовать свойство CSS visibility в своем коде для создания плавных переходов и улучшения доступности ваших веб-страниц. Однако вы должны знать, где использовать каждое значение видимости, чтобы не получить в итоге нескладные страницы. Вы также можете скрыть важные данные от конечных пользователей, если неправильно используете свойство CSS visibility.