Подтвердить что ты не робот

Инвертировать/изменить логотип в прокрутке

В статье на сайте askthecssguy.com показано, как изменить/инвертировать изображение на прокрутке с использованием фиксированного фона: http://askthecssguy.com/articles/mike-asks-the-css-guy-about-a-scrolling-trick-with-background-images/

Моя цель еще раз включает эту концепцию, поскольку изображение плавает над другими элементами (в данном случае изображениями).

Вы можете увидеть результат здесь: http://playground.iamkeir.com/invert-logo/v2/

Однако моя реализация использует лишние элементы, и поэтому мне было интересно, есть ли у кого-нибудь идеи/предложения другого способа достичь этого?

Javascript - это, конечно, вариант, но я волнуюсь, что он не будет худощавым/элегантным. Кто-то также предложил использовать Canvas.

Любые идеи приветствуются! Спасибо.

4b9b3361

Ответ 1

Вы можете избежать дополнительной разметки, используя: после псевдоэлемента CSS. Таким образом, ваша окончательная разметка будет выглядеть так:

<ul>
        <li class="light">
            <img src="http://farm3.static.flickr.com/2802/4253151258_7d12da9e1c_z.jpg" />
        </li>
        <li class="dark">
            <img src="http://farm1.static.flickr.com/31/66005536_d1c5afca29_z.jpg?zz=1" />
        </li>
        <li class="light">
            <img src="http://farm4.static.flickr.com/3574/3646151231_0c68f4f974_z.jpg" />
        </li>
        <li class="dark">
            <img src="http://farm4.static.flickr.com/3432/3310214210_813d13c899_z.jpg" />
        </li>
    </ul>

И измененный CSS будет:

.dark:after,
.light:after,
.dark .after,
.light .after {
    position: absolute;
    display: block;
    content: '';
    top: 0; left: 0;
    height: 100%;
    width: 76px;
    background: transparent url(logo-white.png) no-repeat fixed 0 0;
    z-index: 5;
}

.dark:after,
.dark .after {
    background-image: url(logo-black.png);
}

Обратите внимание, что там есть класс .after. Это должно заставить его работать в IE < 8, что, к сожалению, требует использования выражения:

.dark,
.light {
    behavior: expression( !this.before ? this.before = this.innerHTML = '<div class="after"></div>' + this.innerHTML : '' );
}

Хотя использование выражений обычно не рекомендуется, это не должно сильно влиять на производительность, поскольку оно полностью оценивается только один раз, и когда элемент создается, условие возвращает false.

Есть одна ловушка. Если IE8 работает в режиме IE8/IE8, псевдоэлементы будут находиться под изображениями, если вы не установите отрицательный z-index для последнего, что не всегда приемлемо.

Вы можете посмотреть рабочий пример здесь.

Ответ 2

то, что вы пытаетесь сделать, вполне возможно, используя текущий код, который вам нужен, чтобы использовать абсолютное позиционирование для перемещения содержимого. Например, используя тестовую страницу http://askthecssguy.com/examples/fixedBackgroundImages/example01.html, вы можете изменить класс .header и сделать это следующим образом.

.header {
background: url("images/cuckoo_color.jpg") no-repeat fixed 20px 20px #DBDED1;
left: -151px;
padding: 40px 40px 40px 300px;
position: absolute;

}

Это сделает текст плавающим по изображениям. Еще шаг за шагом вместо использования фонового изображения вы можете вставить прозрачный PNG в свой собственный DIV и поплавать над любой позицией на странице и фиксировать ее положение. Вы можете проверить http://www.w3schools.com/css/css_positioning.asp для некоторых примеров.

Надеюсь, что это поможет!

Вергилий