Увеличить элемент при наведении, но сохранить исходную область наведения

#css #hover

#css #наведите

Вопрос:

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

У меня нет возможности изменять html или использовать javascript, поскольку я изменяю css страницы.

Это элементы, с которыми я работаю.

 <tbody class="list-item" style="">
    <tr class="list-table-data">
        <td class="data number"/>
        <td class="data image">
            <a class="link sort">
                <!--What I want to enlarge-->
                <img class="hover-info image">
            </a>
        </td>
    </tr>
</tbody>
  

Я перепробовал множество комбинаций ::before и селекторов, чтобы заставить его работать. Часто результат просто оставляет мерцание.

Возможно ли это сделать с помощью чистого css?

Ответ №1:

Возможный путь для продолжения — использовать position: relative; и z-index: -1; .image и сохранить :hover псевдокласс включенным .link . Я настроил демонстрацию здесь: http://codepen.io/anon/pen/BLwPEY

Я беру на себя некоторые вольности со стилями, но просто в демонстрационных целях.

Я не уверен, каким вы хотите, чтобы результат был (например, изображение остается центрированным или точно, как изменяется размер изображения), но это может быть началом. Обратите внимание, что эффект кажется сбивчивым (по крайней мере, для меня) при наведении курсора мыши выше или ниже — если вы быстро выводите курсор, но затем останавливаетесь на краю изображения, состояние наведения, похоже, сохраняется. Не уверен, почему, и я пробовал несколько разных способов устранения неполадок, но безуспешно.

В любом случае, это может быть началом.

Комментарии:

1. Это отлично работает, но, к сожалению, z-index — одна из вещей, которые я хочу увеличить при наведении, так что это бесполезно. :

2. Это было бы полезной информацией заранее. Возможно, вы можете дать нам лучшее представление о том, что вам действительно нужно, чтобы произошло. В любом случае, вы можете увеличить z-индекс .link и .image при наведении, если это необходимо. Но если вам нужно .image иметь z-индекс выше, чем у .link , вам может не повезти с этим.

3. Спасибо, по какой-то причине мой мыслительный процесс был z-индекс -1 был особенным. Теперь это работает отлично! Так всегда ли установка z-индекса меньше родительского всегда отключает наведение?

4. Да. Обычно дочерний элемент всегда отображается выше родительского, но применение z-index выводит этот элемент из обычного порядка наложения. Поэтому, когда дочерний элемент имеет более низкий z-индекс, он отображается «ниже» родительского элемента, и взаимодействие блокируется родительским элементом — даже если у родительского элемента нет содержимого.

Ответ №2:

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

Комментарии:

1. Я попробовал это со следующим CSS, но это не дало никакого эффекта. Я неправильно настраиваю переполнение? .data.image .link.sort { переполнение: видимое; ширина: 50 пикселей! важно; высота: 70 пикселей! важно; } .data.image .link.sort .image { ширина: 48 пикселей; высота: 68 пикселей; } .data.image .link.sort: наведение .image { ширина: 96 пикселей; высота: 136 пикселей; }

Ответ №3:

Редактировать: Извините, я неправильно прочитал ваш пост и пропустил тот факт, что вы можете использовать только CSS для выполнения. Я скорректировал свое решение, чтобы оно работало в рамках вашего существующего ограничения. Техника аналогична, родительский a элемент использует z-index «поверх» img . Я добавил границу a , чтобы вы могли видеть, что она остается того же размера даже при увеличении дочернего img элемента при наведении курсора a .

Будет ли это работать для вас?

 a.link > img.hover-info {
  width: 135px;
  height: 155px;
  transition: 500ms;
  position: absolute;
  top: 0;
  left: 0;
  z-index: -999;
}

a.link {
  display: block;
  width: 135px;
  height: 155px;
  border: 1px solid #000000;
  z-index: 999;
}

a.link:hover > img.hover-info {
  width: 270px;
  height: 310px;
}  
 <table>
  <tbody class="list-item" style="">
    <tr class="list-table-data">
        <td class="data number"/>
        <td class="data image">
            <a class="link sort">
                <!--What I want to enlarge-->
                <img src="https://en.wikipedia.org/static/images/project-logos/enwiki.png" class="hover-info image">
            </a>
        </td>
    </tr>
  </tbody>
</table>  

Комментарии:

1. Но разве OP не сказал: «У меня нет роскоши изменять html»?

2. Это сработало бы, но я не могу вставить какие-либо новые элементы в html. Я пробовал делать это с помощью ::before on .link.sort и after on .data.number, но безрезультатно. Кажется, что оператор не работает с ::before и ::after .

3. Извините @trigger_death, я пропустил ограничение, что вы не можете изменить HTML. Я обновил свое решение, чтобы оно работало в рамках вашего ограничения. Пожалуйста, взгляните еще раз и посмотрите, поможет ли это сейчас.

4. Ваш ответ и ответ Даниэля оказались одинаковыми, и с некоторым объяснением z-индекса он работает отлично. Спасибо.