Я пытаюсь создать кнопку удаления, которая, как только вы нажмете на нее, будет расширяться, чтобы показать параметр удаления, чтобы вы ничего не удаляли ошибка. Проблема в том, что родительский контейнер сразу переходит в полный размер, пока я хочу, чтобы он постепенно увеличивался.CSS3 Переход: оживить ребенка до 100% ширины, родительский прыжок до 100% ширины моментально
Это можно преодолеть, если установить фиксированную ширину пикселя для родительского контейнера, но проблема в том, что я не всегда знаю ширину содержимого. Поэтому я использовал процент, чтобы получить его динамическим.
Я действительно не знаю, как объяснить это ясно, так что я сделал скрипку, чтобы показать вам: http://jsfiddle.net/cgHcP/
HTML:
<div class="right">
<div style="background-color: #000; display: inline-block;">
<div class="roll-button">
<div class="icon">x</div>
<div class="text">Remove</div>
</div>
</div>
<div style="background-color: #000; display: inline-block;">
<div class="roll-button">
<div class="icon">x</div>
<div class="text">Remove</div>
</div>
</div>
</div>
CSS:
/* Roll Button */
div.roll-button {
float: right;
display: inline;
position: relative;
height: 24px;
width: 24px;
-webkit-box-shadow: 0 0 0 2px #fff;
-webkit-border-radius: 12px;
text-align: center;
vertical-align: middle;
background-color: #fff;
overflow: hidden;
-webkit-transition: width .5s ease-in-out;
transition: width .5s ease-in-out;
}
div.roll-button .icon {
left: 0;
display: inline;
position: absolute;
font-size: 24px;
width: 24px;
height: 24px;
background-color: #ff3e3e;
-webkit-border-radius: 12px;
-webkit-transition: all .5s ease-in-out;
transition: all .5s ease-in-out;
text-align: center;
vertical-align: middle;
color: #fff;
line-height: .7;
}
div.roll-button .text {
float: left;
display: inline;
position: relative;
height: 24px;
overflow: hidden;
-webkit-transition: all .5s ease-in-out;
transition: all .5s ease-in-out;
vertical-align: middle;
line-height: 24px;
color: #ff3e3e;
font-weight: 700;
padding: 0 0 0 24px;
font-size: 12px;
}
div.roll-button:hover .text {
padding: 0 5px 0 29px;
}
div.roll-button:hover .icon {
-webkit-transform: rotateZ(-180deg);
}
div.roll-button:hover {
width: 100%;
}
.right {
float: right;
margin-right: 200px;
}
Когда вы смотрите на скрипку, вы заметите родительский контейнер (черный), прыгаете в полный размер при зависании. Хотя ребенок, кажется, растет постепенно. Такое поведение вызывает проблемы при добавлении нескольких элементов в строку (например, в скрипке и именно то, что я хочу сделать).
Я пытаюсь сделать эту кнопку чисто с CSS, но это то место, где я застреваю. У кого-нибудь есть предложение, как это можно сделать, используя чисто CSS?
теперь я вижу, что это только хорошо работает в хроме для меня. Safari работает неправильно. В сафари это подчеркивает анимацию для 100% -ной проблемы с шириной. Могу ли я анимировать от фиксированной ширины до 100% ширины или авто? Проблема, кажется, решена, когда я устанавливаю фиксированное значение пикселя для ширины.Для измененной версии с фиксированной шириной (которая, кажется, работает хорошо), см. Эту обновленную скрипту: http://jsfiddle.net/cgHcP/2/. Проблема в том, что я не могу использовать фиксированную ширину, потому что содержимое динамическое, поэтому ширина должна быть динамической. – mrcrazylee
Я просто собирался упомянуть об этом - проблема идет от px до% width. – dc5
Я догадался. Таким образом, нет способа заставить это работать без использования javascript? Я всегда могу использовать javascript для вычисления ширины содержимого и установки ширины родительского элемента в фиксированные пиксели. Я только надеялся, что это обойдется без использования javascript. Я попытался использовать анимацию свойства max-width, но это дает проблемы с шириной анимации. Если максимальная ширина больше ширины элемента, она начнет анимировать элемент с самого начала. Если максимальная ширина составляет 150% от ширины, переход начнется через 1/3. Спасибо за ваш ответ, хотя! – mrcrazylee