Анимированная ширина от авто до 100%?

0

У меня есть этот 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 пикселей.

Вот почему мне это нужно авто.

Теги:
animate.css
width

2 ответа

0

Я не думаю, что 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;
}

Demo.

ПРИМЕЧАНИЕ. При этом не будет больше устанавливаться width:auto для вашего элемента, поэтому вы не должны изменять текст этого элемента динамически (я думаю, это не ваш вариант использования). Если вам нужно изменить его динамически, и ширина должна автоматически расширяться/сворачиваться, вы можете попробовать установить width:auto на нем сначала перед установкой текста /innerHTML.

Вот еще одна версия, позволяющая изменить font-size #view_album так, чтобы ширина была соответствующим образом скорректирована.

0

Во-первых, измените идентификаторы на классы, поскольку вы повторяете одинаковый идентификатор для всех обложек альбомов.

Вы можете использовать автоматическую ширину и после загрузки сайта запустить сценарий jQuery и добавить текущую ширину в css:

$(document).ready(function(){
    $.each($('.view_album'), function(){
        $(this).css('width', $(this).width() + 'px');
    }
});
  • 0
    ты пробовал это? слишком опытный и нет необходимости сначала пытаться?
  • 0
    @KingKing Где-то я использовал эту технику, но для немного другой проблемы. Но была нужна начальная ширина.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню