Игнорировать выравнивание с братьями и сестрами при наведении мыши

Вопрос или проблема

На моем сайте я пытаюсь создать список плиток, каждая из которых имеет приложение:

body { background-color: gray; }

.tile {
  width: 200px;
  height: 250px;
  white-space: nowrap;
  overflow: hidden;
  display: inline-block;
  border: 5px solid white;
  border-radius: 5px;
  background-color: white;
  margin: 50px;
  text-wrap: wrap;
}

.tile:hover {
  height: auto;
  /* Показать описание */
  scale: 105%;
  cursor: pointer;
}
<div class="tile">Плитка 1</div>
<div class="tile">Плитка 2</div>
<div class="tile">Плитка 3</div>
<div class="tile">Плитка 4</div>

Когда вы наводите курсор на одну из этих плиток, она увеличивается и показывает описание (что увеличивает высоту). Однако при этом каждая другая плитка в списке прыгает, чтобы соответствовать новой высоте/выравниванию. Это довольно раздражает, и я хотел бы, чтобы этого не происходило. Как я могу сделать так, чтобы «соседние» плитки игнорировали выравнивание данной плитки?

</div><div class="s-prose js-post-body" itemprop="text">

Вот что вы пытаетесь достичь

  1. Обернуть все четыре плитки в родительский div
  2. Дать родителю класс
  3. Установить родителю display как flex и настроить свойства
body { background-color: gray; }

.parent {
    display: flex;
    flex-direction: row;
    align-items: start;
}

.tile {
  width: 200px;
  height: 250px;
  white-space: nowrap;
  overflow: hidden;
  display: inline-block;
  border: 5px solid white;
  border-radius: 5px;
  background-color: white;
  margin: 50px;
  text-wrap: wrap;
}

.tile:hover {
  height: auto;
  /* Показать описание */
  scale: 105%;
  cursor: pointer;
}
<div class="parent">
<div class="tile">Lorem Ipsum - это просто фиктивный текст печатной и наборной индустрии. Lorem Ipsum был стандартным фиктивным текстом этой индустрии с 1500-х годов, когда неизвестный печатник взял набор и перемешал его, чтобы создать образец шрифта. Он выжил не только пять веков, но и переход в электронную верстку, оставаясь по сути неизменным. Он был популяризирован в 1960-х годах с выходом листов Letraset, содержащих фрагменты Lorem Ipsum, а также более недавно с программами настольной публикации, такими как Aldus PageMaker, включая версии Lorem Ipsum.</div>
<div class="tile">Lorem Ipsum - это просто фиктивный текст печатной и наборной индустрии. Lorem Ipsum был стандартным фиктивным текстом этой индустрии с 1500-х годов, когда неизвестный печатник взял набор и перемешал его, чтобы создать образец шрифта. Он выжил не только пять веков, но и переход в электронную верстку, оставаясь по сути неизменным. Он был популяризирован в 1960-х годах с выходом листов Letraset, содержащих фрагменты Lorem Ipsum, а также более недавно с программами настольной публикации, такими как Aldus PageMaker, включая версии Lorem Ipsum.</div>
<div class="tile">Lorem Ipsum - это просто фиктивный текст печатной и наборной индустрии. Lorem Ipsum был стандартным фиктивным текстом этой индустрии с 1500-х годов, когда неизвестный печатник взял набор и перемешал его, чтобы создать образец шрифта. Он выжил не только пять веков, но и переход в электронную верстку, оставаясь по сути неизменным. Он был популяризирован в 1960-х годах с выходом листов Letraset, содержащих фрагменты Lorem Ipsum, а также более недавно с программами настольной публикации, такими как Aldus PageMaker, включая версии Lorem Ipsum.</div>
<div class="tile">Lorem Ipsum - это просто фиктивный текст печатной и наборной индустрии. Lorem Ipsum был стандартным фиктивным текстом этой индустрии с 1500-х годов, когда неизвестный печатник взял набор и перемешал его, чтобы создать образец шрифта. Он выжил не только пять веков, но и переход в электронную верстку, оставаясь по сути неизменным. Он был популяризирован в 1960-х годах с выходом листов Letraset, содержащих фрагменты Lorem Ipsum, а также более недавно с программами настольной публикации, такими как Aldus PageMaker, включая версии Lorem Ipsum.</div>
</div>

Если вы используете flexbox и устанавливаете align-items: start, другие плитки в том же ряду не будут смещаться, когда вы наводите курсор на плитку. Однако плитки в последующих рядах все равно будут смещаться вниз. Это тот эффект, который вы ищете?

body {
  margin: 50px;
  background-color: gray;
  display: flex;
  flex-wrap: wrap;
  gap: 50px;
  align-items: start;
}

.tile {
  width: 200px;
  border: 5px solid white;
  border-radius: 5px;
  background-color: white;
  transition: 250ms;
  padding: 1em;
  box-sizing: border-box;
}

.tile > h4 {
  margin: 0;
}

.tile > p {
  display: none;
  margin-bottom: 0;
}

.tile:hover {
  cursor: pointer;
}

.tile:hover > p {
  display: block;
}
<div class="tile">
  <h4>Плитка 1</h4>
  <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas tempor nunc mauris, sit amet placerat tortor lobortis dapibus.</p>
</div>
<div class="tile">
  <h4>Плитка 2</h4>
  <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas tempor nunc mauris, sit amet placerat tortor lobortis dapibus.</p>
</div>
<div class="tile">
  <h4>Плитка 3</h4>
  <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas tempor nunc mauris, sit amet placerat tortor lobortis dapibus.</p>
</div>
<div class="tile">
  <h4>Плитка 4</h4>
  <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas tempor nunc mauris, sit amet placerat tortor lobortis dapibus.</p>
</div>

.

Ответ или решение

Как избежать изменения выравнивания соседних элементов при наведении на элемент на веб-сайте

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

Решение

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

Шаги по реализации
  1. Обертка для плиток: Всегда начинайте с оборачивания всех ваших плиток в родительский контейнер. Это позволит применить к ним свойства flexbox.

  2. Настройка стилей родительского контейнера: Примените к родительскому контейнеру CSS-свойства flexbox.

  3. Изменение стилей плиток: Настройте стили плиток, чтобы они не смещались друг относительно друга.

Пример реализации

Вот код, который решает вашу проблему:

<div class="parent">
  <div class="tile">
    <h4>Плитка 1</h4>
    <p>Описание для плитки 1.</p>
  </div>
  <div class="tile">
    <h4>Плитка 2</h4>
    <p>Описание для плитки 2.</p>
  </div>
  <div class="tile">
    <h4>Плитка 3</h4>
    <p>Описание для плитки 3.</p>
  </div>
  <div class="tile">
    <h4>Плитка 4</h4>
    <p>Описание для плитки 4.</p>
  </div>
</div>
body {
  background-color: gray; 
  display: flex;
  flex-wrap: wrap; 
  gap: 50px; 
  margin: 50px;
}

.parent {
    display: flex; 
    flex-direction: row; 
    align-items: flex-start; 
}

.tile {
  width: 200px; 
  border: 5px solid white; 
  border-radius: 5px; 
  background-color: white; 
  transition: height 0.25s ease; 
  padding: 1em; 
  box-sizing: border-box;
}

.tile > h4 {
  margin: 0;
}

.tile > p {
  display: none; 
  margin-bottom: 0;
}

.tile:hover {
  cursor: pointer;
}

.tile:hover > p {
  display: block; 
}

Объяснение кода

  1. display: flex; — Применяя это к родительскому контейнеру, мы превращаем его в flex-контейнер, что позволяет удобно управлять расположением дочерних плиток.

  2. align-items: flex-start; — Устанавливает выравнивание дочерних элементов по верхнему краю. Это предотвратит их смещение при наведении на один из них.

  3. transition: height 0.25s ease; — Добавляет плавный переход для изменения высоты плитки, что улучшает пользовательский интерфейс.

  4. Скрытие и отображение описания — Используя свойство display, мы скрываем описание по умолчанию и показываем его при наведении.

Заключение

Использование flexbox — это эффективный способ предотвратить смещение соседних элементов при наведении на один из них. Это не только улучшает восприятие вашего веб-сайта, но и делает его более профессиональным и удобным для пользователя.

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

Оцените материал
Добавить комментарий

Капча загружается...