Скрытие элементов (display: none, visibility: hidden)

Тренажер по CSS для пользователей с начальным уровнем подготовки.

Тренажер CSS

В этом разделе вы попрактикуетесь в использовании CSS свойств `display` со значением `none` и `visibility` со значением `hidden` для управления видимостью элементов на веб-странице. Эти свойства позволяют скрывать контент, но делают это по-разному. `display: none` полностью удаляет элемент из потока документа, как будто его и не было, освобождая занимаемое им пространство. `visibility: hidden` делает элемент невидимым, но он продолжает занимать свое место в макете. Выполняя задания, вы научитесь выбирать подходящее свойство в зависимости от задачи и увидите разницу в их поведении на практике. Задания построены от простого к сложному, помогая закрепить материал.

Список тем

Полное скрытие элемента

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

CSS
.box-to-hide {
  width: 100px;
  height: 100px;
  background-color: red;
  margin-bottom: 10px;
  /* Допишите свойство для скрытия */
  input1: input2;
}

.next-box {
  width: 100px;
  height: 100px;
  background-color: blue;
}
HTML
<div class="box-to-hide"></div>
<div class="next-box"></div>
Чтобы полностью убрать элемент из потока документа и сделать его невидимым, используйте свойство `display` со значением `none`.
Заполнить ответами все поля
Результат
Сообщения
Выполнить
Отметить решенным
Показать подсказку

Скрытие с сохранением места

Сделайте зеленый квадрат невидимым, но так, чтобы он продолжал занимать свое место на странице, не позволяя синему квадрату подняться вверх. Используйте подходящее CSS свойство.

CSS
.invisible-box {
  width: 100px;
  height: 100px;
  background-color: green;
  margin-bottom: 10px;
  /* Допишите свойство и значение для скрытия с сохранением места */
  input1: input2;
}

.sibling-box {
  width: 100px;
  height: 100px;
  background-color: blue;
}
HTML
<div class="invisible-box"></div>
<div class="sibling-box"></div>
Для того чтобы сделать элемент невидимым, но сохранить занимаемое им пространство в макете, используйте свойство `visibility` со значением `hidden`.
Заполнить ответами все поля
Результат
Сообщения
Выполнить
Отметить решенным
Показать подсказку

Разница между display: none и visibility: hidden

На странице два блока с текстом. Скройте первый блок (с классом `remove-me`) так, чтобы он полностью исчез и второй блок занял его место. Скройте третий блок (с классом `hide-me`) так, чтобы он стал невидимым, но пространство под ним осталось.

CSS
.block {
  padding: 15px;
  margin-bottom: 10px;
  border: 1px solid #ccc;
}

.remove-me {
  background-color: #ffdddd;
  /* Скрыть полностью */
  input1: input2;
}

.keep-space {
  background-color: #ddffdd;
}

.hide-me {
  background-color: #ddddff;
  /* Скрыть, но оставить место */
  input3: input4;
}
HTML
<div class="block remove-me">Этот блок должен исчезнуть полностью.</div>
<div class="block keep-space">Этот блок должен подняться.</div>
<div class="block hide-me">Этот блок должен стать невидимым, но остаться на месте.</div>
<div class="block">Этот блок останется под скрытым.</div>
Для полного удаления элемента используйте `display: none`. Для скрытия с сохранением места используйте `visibility: hidden`. Примените соответствующие стили к классам `remove-me` и `hide-me`.
Заполнить ответами все поля
Результат
Сообщения
Выполнить
Отметить решенным
Показать подсказку

Скрытие элемента при наведении

Сделайте так, чтобы изображение исчезало полностью (освобождая место), когда пользователь наводит курсор на контейнер с классом `image-container`.

CSS
.image-container {
  border: 2px dashed blue;
  padding: 10px;
  display: inline-block; /* Чтобы контейнер облегал картинку */
  margin-bottom: 10px;
}

.image-containerinput1 img {
  /* Свойство для скрытия при наведении */
  input2: input3;
}

.below-image {
  background-color: lightgreen;
  padding: 10px;
}
HTML
<div class="image-container">
  <img src="https://naytikurs.ru/img/1.png" alt="Логотип 1" width="150">
</div>
<div class="below-image">Этот текст поднимется, когда картинка исчезнет.</div>
Используйте псевдокласс `:hover` для контейнера `.image-container`. Внутри этого правила примените стиль `display: none` к изображению (`img`).
Заполнить ответами все поля
Результат
Сообщения
Выполнить
Отметить решенным
Показать подсказку

Скрытие элемента при наведении с сохранением места

Сделайте так, чтобы изображение становилось невидимым, но продолжало занимать место, когда пользователь наводит курсор на контейнер с классом `image-wrapper`. Текст под изображением не должен смещаться.

CSS
.image-wrapper {
  border: 2px dashed red;
  padding: 10px;
  display: inline-block;
  margin-bottom: 10px;
}

.image-wrapper:hover input1 {
  /* Свойство и значение для скрытия при наведении с сохранением места */
  input2: input3;
}

.text-below {
  background-color: lightblue;
  padding: 10px;
}
HTML
<div class="image-wrapper">
  <img src="https://naytikurs.ru/img/2.png" alt="Логотип 2" width="150">
</div>
<div class="text-below">Этот текст не должен смещаться.</div>
Используйте псевдокласс `:hover` для контейнера `.image-wrapper`. Внутри этого правила примените стиль `visibility: hidden` к изображению (`img`).
Заполнить ответами все поля
Результат
Сообщения
Выполнить
Отметить решенным
Показать подсказку

Скрытие всех элементов с определенным классом

В списке есть несколько элементов с классом `confidential`. Скройте все эти элементы полностью, чтобы они не отображались в списке и не занимали место.

CSS
ul {
  list-style: none;
  padding: 0;
}

li {
  padding: 5px;
  border-bottom: 1px solid #eee;
}

input1 {
  /* Свойство и значение для полного скрытия */
  input2: input3;
  color: red; /* Этот стиль не будет виден */
}
HTML
<ul>
  <li>Обычный пункт 1</li>
  <li class="confidential">Секретный пункт A</li>
  <li>Обычный пункт 2</li>
  <li class="confidential">Секретный пункт B</li>
  <li>Обычный пункт 3</li>
</ul>
Создайте CSS правило для селектора класса `.confidential` и примените к нему свойство `display` со значением `none`.
Заполнить ответами все поля
Результат
Сообщения
Выполнить
Отметить решенным
Показать подсказку

Скрытие дочернего элемента

Внутри блока с классом `parent-div` есть дочерний элемент `span` с классом `details`. Сделайте этот `span` невидимым, но так, чтобы он продолжал занимать место внутри родительского блока.

CSS
.parent-div {
  padding: 20px;
  background-color: #f0f0f0;
  border: 1px solid #ccc;
}

.parent-div input1 {
  background-color: yellow; /* Фон будет скрыт */
  padding: 5px;
  /* Свойство и значение для скрытия с сохранением места */
  input2: input3;
}
HTML
<div class="parent-div">
  Это видимый текст.
  <span class="details">Этот текст нужно скрыть, но оставить место.</span>
  Это тоже видимый текст.
</div>
Используйте селектор потомка (`.parent-div .details` или `.parent-div > .details`, если `span` прямой потомок) и примените свойство `visibility` со значением `hidden`.
Заполнить ответами все поля
Результат
Сообщения
Выполнить
Отметить решенным
Показать подсказку

Скрытие элемента с атрибутом hidden

На странице есть элемент `div` с HTML-атрибутом `hidden`. Хотя браузеры обычно скрывают такие элементы по умолчанию, добавьте CSS правило, которое гарантированно скроет (полностью, без сохранения места) любой элемент с атрибутом `hidden`.

CSS
/* Правило для скрытия элементов с атрибутом hidden */
input1 {
  input2: input3;
}

.visible-block {
  padding: 10px;
  background-color: lightblue;
  margin-top: 10px;
}
HTML
<div hidden>Этот блок должен быть скрыт с помощью CSS.</div>
<div class="visible-block">Этот блок должен быть виден.</div>
Используйте селектор атрибута `[hidden]` и примените к нему свойство `display` со значением `none`.
Заполнить ответами все поля
Результат
Сообщения
Выполнить
Отметить решенным
Показать подсказку

Показать скрытый элемент при наведении на другой

Изначально изображение с классом `tooltip-image` скрыто (полностью). Сделайте так, чтобы оно появлялось (становилось `block`), когда пользователь наводит курсор на текст с классом `trigger-text`.

CSS
.trigger-text {
  cursor: pointer;
  text-decoration: underline;
  color: blue;
  margin-bottom: 5px;
}

.tooltip-image {
  /* Изначально скрыто */
  input1: input2;
  border: 1px solid black;
}

/* Правило для показа при наведении */
.trigger-text:hover + input3 {
  display: block;
}
HTML
<span class="trigger-text">Наведи на меня</span>
<img class="tooltip-image" src="https://naytikurs.ru/img/4.png" alt="Подсказка" width="100">
Используйте селектор соседнего элемента (`+`) или селектор общего соседа (`~`). Задайте начальное состояние `display: none` для `.tooltip-image`. Затем создайте правило с `:hover` для `.trigger-text`, которое изменяет `display` у `.tooltip-image` на `block`. Например: `.trigger-text:hover + .tooltip-image`.
Заполнить ответами все поля
Результат
Сообщения
Выполнить
Отметить решенным
Показать подсказку

Скрытие нечетных элементов списка

Используя псевдокласс, скройте все нечетные элементы (`<li>`) в списке `ul` с id `item-list`. Скрытие должно быть полным, без сохранения места.

CSS
#item-list li {
  padding: 8px;
  background-color: #eee;
  margin-bottom: 4px;
}

/* Выберите нечетные li и скройте их */
#item-list li:input1 {
  input2: input3;
}
HTML
<ul id="item-list">
  <li>Пункт 1</li>
  <li>Пункт 2</li>
  <li>Пункт 3</li>
  <li>Пункт 4</li>
  <li>Пункт 5</li>
</ul>
Используйте псевдокласс `:nth-child(odd)` для выбора нечетных элементов `li` внутри `#item-list`. Примените к ним `display: none`.
Заполнить ответами все поля
Результат
Сообщения
Выполнить
Отметить решенным
Показать подсказку

Скрытие 'старых' сообщений

Представьте, что сообщения с классом `message` и дополнительным классом `old` являются устаревшими. Скройте все такие 'старые' сообщения, используя `visibility: hidden`, чтобы сохранить общую структуру чата.

CSS
.message {
  padding: 10px;
  margin-bottom: 5px;
  border-radius: 5px;
}

.new {
  background-color: lightgreen;
}

.old {
  background-color: lightgray;
}

/* Скройте старые сообщения с сохранением места */
input1 {
  input2: input3;
}
HTML
<div class="message new">Новое сообщение 1</div>
<div class="message old">Старое сообщение 1</div>
<div class="message new">Новое сообщение 2</div>
<div class="message old">Старое сообщение 2</div>
<div class="message old">Старое сообщение 3</div>
<div class="message new">Новое сообщение 3</div>
Используйте селектор, который выбирает элементы, имеющие оба класса: `message` и `old`. Это можно сделать, написав селекторы классов слитно, без пробела: `.message.old`. Примените к ним `visibility: hidden`.
Заполнить ответами все поля
Результат
Сообщения
Выполнить
Отметить решенным
Показать подсказку

Скрытие элемента при фокусе на поле ввода

Сделайте так, чтобы подсказка (`label` с классом `input-hint`) полностью исчезала, когда пользователь устанавливает фокус в поле ввода (`input` с id `username`).

CSS
.form-group {
  margin-bottom: 15px;
}

#username {
  padding: 8px;
  border: 1px solid #ccc;
}

.input-hint {
  display: block; /* Изначально видима */
  font-size: 12px;
  color: gray;
  margin-top: 4px;
}

/* Скрыть подсказку при фокусе на поле ввода */
#username:input1 + input2 {
  input3: input4;
}
HTML
<div class="form-group">
  <input type="text" id="username" placeholder="Введите имя">
  <label for="username" class="input-hint">Подсказка: имя пользователя</label>
</div>
<div>Другой контент</div>
Используйте псевдокласс `:focus` для поля ввода и селектор соседнего элемента (`+` или `~`) для выбора подсказки. Примените `display: none` к подсказке в состоянии фокуса поля ввода. Например: `#username:focus + .input-hint`.
Заполнить ответами все поля
Результат
Сообщения
Выполнить
Отметить решенным
Показать подсказку

Показать детали при наведении на родителя

В карточке товара есть блок с основными данными и скрытый блок с деталями (`.details`). Сделайте так, чтобы блок `.details` становился видимым (не `display: none`, а `visibility: visible`), когда пользователь наводит курсор на всю карточку (`.product-card`). Изначально детали должны быть скрыты с сохранением места.

CSS
.product-card {
  border: 1px solid #ddd;
  padding: 15px;
  width: 200px;
}

.product-card .details {
  margin-top: 10px;
  padding-top: 10px;
  border-top: 1px dashed #eee;
  /* Изначально скрыто с сохранением места */
  input1: input2;
}

/* Показать детали при наведении на карточку */
.product-card:hover input3 {
  visibility: visible;
}
HTML
<div class="product-card">
  <strong>Товар X</strong>
  <p>Цена: 1000 руб.</p>
  <div class="details">
    <p>Дополнительная информация о товаре X.</p>
    <small>Артикул: 12345</small>
  </div>
</div>
Задайте блоку `.details` начальное состояние `visibility: hidden`. Затем используйте псевдокласс `:hover` для родительского элемента `.product-card` и селектор потомка для выбора `.details`. В этом правиле установите `visibility: visible`.
Заполнить ответами все поля
Результат
Сообщения
Выполнить
Отметить решенным
Показать подсказку
НайтиКурс.Ру