#javascript #html #css
#javascript #HTML #css
Вопрос:
У меня есть центрированные элементы внутри контейнера, и я хочу, чтобы наведенный элемент оставлял отступы, сохраняя при этом его положение. Возможно ли это?
Посмотрите, вот пример:
body {
font-size: 2em;
}
.container {
text-align: center;
}
.item:hover {
padding-left: 0.5em;
}
<div class="container">
<span class="item">Hello</span>
<span class="item">my</span>
<span class="item">wonderful</span>
<span class="item">world</span>
</div>
При наведении курсора на элемент вы заметите, что он меняет свое положение по оси x, но вместо этого его нужно исправить, нажимая на другие элементы.
Комментарии:
1. Просто используйте это вместо:
padding: 0 0.5em;
2. Что вы подразумеваете под «его нужно исправить, вместо этого подталкивая другие элементы»? Вы хотите, чтобы элементы справа также были перемещены, или все должно остаться?
3. @RoboRobok, заполнение слева влияет только на элементы слева, поэтому элементы справа должны быть там, где они есть.
4. @ChrisG, сложная часть вопроса заключается в том, что мне не нужны оба отступа, только слева.
5. мой ответ не сработал для вас? Я сохраняю фиксированный элемент наведения и перемещаю все остальные. Это также универсальное решение, если вы хотите также иметь правильное движение
Ответ №1:
Вы можете попробовать, как показано ниже, чтобы иметь оба пробела
body {
font-size: 2em;
}
.container {
text-align: center;
pointer-events:none;
}
.item {
position:relative;
left:0;
transition:0.5s;
pointer-events:initial;
}
/* previous elements: move to left */
.container:hover .item{
left:-10px;
}
/* hovered element: don't move */
.container .item:hover {
left:0;
}
/* next elements: move to right
*/
.container .item:hover ~ *{
left:10px;
}
<div class="container">
<span class="item">Hello</span>
<span class="item">my</span>
<span class="item">wonderful</span>
<span class="item">world</span>
</div>
И только с оставленным пробелом:
body {
font-size: 2em;
}
.container {
text-align: center;
pointer-events:none;
}
.item {
position:relative;
left:0;
transition:0.5s;
pointer-events:initial;
}
.container:hover .item{
left:-10px;
}
.container .item:hover,
.container .item:hover ~ *{
left:0;
}
<div class="container">
<span class="item">Hello</span>
<span class="item">my</span>
<span class="item">wonderful</span>
<span class="item">world</span>
</div>
Или только правый пробел:
body {
font-size: 2em;
}
.container {
text-align: center;
pointer-events:none;
}
.item {
position:relative;
left:0;
transition:0.5s;
pointer-events:initial;
}
.container .item:hover ~ *{
left:10px;
}
<div class="container">
<span class="item">Hello</span>
<span class="item">my</span>
<span class="item">wonderful</span>
<span class="item">world</span>
</div>
Ответ №2:
Я не уверен, что правильно вас понял, но попробуйте ниже и посмотрите, дает ли это эффект, который вы ищете:
Решение
body {
font-size: 2em;
}
.container {
display: flex;
justify-content: center;
}
.item {
padding: 0 .2rem;
transition: padding .2s;
}
.item:hover {
padding: 0 .5em;
}
Объяснение
Используя flexbox, мы можем сделать все «промежутки» гибким элементом и выровнять их по центру с помощью содержимого выравнивания (используя значение «center») на родительском элементе. Единственная проблема при этом заключается в том, что мы теряем естественное пространство слева и справа от каждого текстового элемента, поэтому я добавил небольшое количество отступов в класс item .
После наведения курсора я успешно увеличил отступы влево и вправо.
Поскольку мы устанавливаем все для выравнивания по центру и увеличиваем отступы слева и справа, другой текст отталкивается от него, как эффект отталкивания. Опять же, я не уверен, что это то, что вы ищете, но я надеюсь, что это близко и помогает!
Комментарии:
1. Спасибо за ответ, но главное здесь в том, что мне нужно только левое заполнение для зависшего элемента, у вас есть как слева, так и справа. Проверьте это здесь, зависший элемент все еще перемещается, codepen.io/interlark/pen/qBNBWKZ