У меня есть этот div
<div id="view_album">
View Photo
</div>
И css
#view_album {
text-align: right;
width: auto;
display: inline-block;
background: #005cb9;
color: white;
box-sizing: border-box;
padding: 10px;
-webkit-transition: all .5s ease-in-out;
-moz-transition: all .5s ease-in-out;
-o-transition: all .5s ease-in-out;
-ms-transition: all .5s ease-in-out;
transition: all .5s ease-in-out;
}
#view_album:hover {
width: 100%;
}
Можно ли анимировать ширину от авто до чего-то? Конечная ширина 100% не работает, но если я устанавливаю начальную ширину на определенное значение, равное 100 пикселей, и поэтому он работает. Но мне нужно это автоматически, так как текст внутри div, "Просмотр фото", может быть другим текстом, тоже как-то дольше.
На этом сайте я работаю над:
Как вы можете видеть, этот div с "View Album" имеет определенную ширину 115px
. Затем оживите до 100%. Но если я изменил текст внутри, например, "Abc", который, очевидно, короче, чем "Просмотр альбома", и ему не нужна ширина 115 пикселей.
Вот почему мне это нужно авто.
Я не думаю, что CSS может оживить/сделать переход так, как вы хотите. Вы должны использовать скрипт для явной установки начальной ширины. Однако мы должны знать ширину, которая рассчитывается браузером (из width:auto
стиля width:auto
после визуализации элемента), это можно сделать легко с помощью getComputedStyle
или просто методом css
в jQuery. Здесь важно изменить стиль с помощью CSSRule, а не через свойство style элемента. Я не уверен, почему это так, но выглядит так, как работает CSS. Вот скрипт, чтобы найти правило #view_album
и задать width
для определенного значения, чтобы зависание могло сделать переход хорошо:
var ss = document.styleSheets;
for(var i = 0; i < ss.length; i++){
var rules = ss[i].cssRules || ss[i].rules;
var br = false;
for(var j = 0; j < rules.length; j++) {
if(rules[j].selectorText == '#view_album'){
rules[j].style.width = $('#view_album').css('width');
br = true;
break;
}
}
if(br) break;
}
ПРИМЕЧАНИЕ. При этом не будет больше устанавливаться width:auto
для вашего элемента, поэтому вы не должны изменять текст этого элемента динамически (я думаю, это не ваш вариант использования). Если вам нужно изменить его динамически, и ширина должна автоматически расширяться/сворачиваться, вы можете попробовать установить width:auto
на нем сначала перед установкой текста /innerHTML.
Вот еще одна версия, позволяющая изменить font-size
#view_album
так, чтобы ширина была соответствующим образом скорректирована.
Во-первых, измените идентификаторы на классы, поскольку вы повторяете одинаковый идентификатор для всех обложек альбомов.
Вы можете использовать автоматическую ширину и после загрузки сайта запустить сценарий jQuery и добавить текущую ширину в css:
$(document).ready(function(){
$.each($('.view_album'), function(){
$(this).css('width', $(this).width() + 'px');
}
});