Как растягивать пункты меню (справа налево) - HTML и CSS
Я пытаюсь создать фиксированное меню. Когда я делаю наведение на элемент, все мои 3 элемента перемещаются справа налево. Я не знаю почему. Я не ожидаю, что он будет двигаться. Все, что мне нужно, это один элемент растягивается (справа налево), когда я делаю наведение на него.
HTML-код:
<div class="cs-menu">
<div class="item">one</div>
<div class="item">two</div>
<div class="item">three</div
</div>
CSS код:
.cs-menu {
position: fixed;
top: 35%;
right:10%;
}
.cs-menu .item {
border: 1px solid red;
width: 40px;
height: 40px;
background: #f9f397;
transition: width 1s;
}
.cs-menu .item:hover {
width: 150px;
}
Вот моя демонстрация:
https://jsfiddle.net/rq9vudfd/5/
Я не понимаю, как предметы движутся вместе. Надеюсь, вы мне поможете.
Большое спасибо.
4 ответов:
По умолчанию все элементы располагаются сверху вниз и слева направо в окне браузера.
Когда вы увеличиваете ширину одного
.item, это приведет к увеличению родительской ширины. И поскольку элементы рисуются слева направо, то все ваши элементы.itemтакже будут перемещены влево.Метод 1: добавить
margin: 0 0 0 auto;к.item.
.cs-menu { position: fixed; top: 35%; right:10%; } .cs-menu .item { margin: 0 0 0 auto; border: 1px solid red; width: 40px; height: 40px; background: #f9f397; transition: width 1s; } .cs-menu .item:hover { width: 150px; }<div class="cs-menu"> <div class="item">one</div> <div class="item">two</div> <div class="item">three</div> </div>Метод 2: добавьте свойства
float: rightиclear: bothcss в.item.
.cs-menu { position: fixed; top: 35%; right:10%; } .cs-menu .item { border: 1px solid red; float: right; clear: both; width: 40px; height: 40px; background: #f9f397; transition: width 1s; } .cs-menu .item:hover { width: 150px; }<div class="cs-menu"> <div class="item">one</div> <div class="item">two</div> <div class="item">three</div> </div>
Просто используйте float right. Раздвоенный здесь .
.cs-menu .item { border: 1px solid red; width: 40px; height: 40px; background: #f9f397; transition: width 1s; float: right; clear: right; }Дело в том, что div, содержащий элементы, изменяет свою ширину на самый большой дочерний элемент. Смотрите эту скрипку, чтобы понять это. Предложенное решение-всего лишь возможность. Просто отведите детей куда-нибудь направо.
Вы можете попробовать использовать следующий CSS
.cs-menu { position: fixed; top: 35%; right:10%; **width: 40px;** } .cs-menu .item { border: 1px solid red; width: 40px; height: 40px; background: #f9f397; transition: width 1s; **float:right;** } .cs-menu .item:hover { width: 150px; }
Это взорвет ваш разум. FLEXBOX!! две строки кода.
.cs-menu { display: flex; justify-content: space-between; /*Or space-around*/ }<div class="cs-menu"> <div class="item">one</div> <div class="item">two</div> <div class="item">three</div> </div>
Comments