Переход CSS дергается при исчезновении непрозрачности

avatar
liquidRock
8 августа 2021 в 23:53
115
1
0

Я работаю над навигационным меню, в котором ссылка появляется до конца справа, как только меню становится липким, чтобы пользователи могли прокручивать страницу вверх. Навигационная цепочка <nav> имеет position:sticky, и прослушиватель событий используется для обнаружения «зависания». Затем я использую CSS для нацеливания на breadcrumb-arrow <div>, а затем перемещаю его, чтобы его непрозрачность исчезала и снова исчезала, если пользователь прокручивает назад или щелкает его.

Код работал, но анимация CSS для его затухания была дерганной. В частности, граница просто исчезла без перехода, а тег <a> начал исчезать, а затем просто исчез до окончания перехода.

HTML:

<nav class="breadcrumbs noselect">
    <div class="bread-bag">
        <ul class="l-breadcrumb">
            <li><a>Link 1</a> &gt; </li>
            <li><a>Link 2</a> &gt; </li>
            <li><a>Link 3</a></li>
        </ul>
        <!-- This is what fades in and out -->
        <div class="breadcrumb-arrow">
            <a class="toTop">&uuarr;</a>
        </div>
    </div>
</nav>

CSS:

.breadcrumbs {
    position: relative;
    position: -webkit-sticky;
    position: -moz-sticky;
    position: -ms-sticky;
    position: -o-sticky;
    position: sticky;
    width: 100%;
    min-height: 50px;
    max-height: 50px;
    height: 50px;
    border-bottom: 1px solid #252524;
    background: #101112;
    overflow: hidden;
    z-index: 20;
    top: -1px;
    padding-top: calc(0em + 1px);
}
.breadcrumb-arrow {
    position: absolute;
    top: 0;
    right: 0;
    height: 100%;
    width: 48px;
    text-align: right;
    background: #101112;
    border-left: 1px solid #101112;
    text-align: center;
    line-height: 48px;
    overflow: hidden;
    opacity: 0;
    visibility: hidden;
    transition: all 1s linear, visibility 0s;
    z-index: 30;
}
.is-pinned .breadcrumb-arrow {
    opacity: 1;
    visibility: visible;
    border-left: 1px solid #232425
}
Источник

Ответы (1)

avatar
liquidRock
8 августа 2021 в 23:53
0

Проблема заключалась в том, что я видел код, размещенный в другом месте на Stackoverflow и других веб-сайтах, где люди предлагали установить видимость для перехода 0s, а также использовать transition: all 1s linear (или другую продолжительность времени) для всего остального. Вот что сломало его.

Просто удалите visibility 0s, и анимация CSS будет работать нормально.

Я не уверен, что это нужно старым браузерам, или, может быть, это глюк только Firefox, но как только я удалил этот CSS, все элементы появлялись и исчезали без ошибок. Я тестировал только в Firefox на macOS, но, надеюсь, это поможет кому-то в будущем.

.breadcrumb-arrow {transition: all 1s linear}