Вы можете избежать дополнительной разметки, используя: после 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, что, к сожалению, требует использования выражения: </p>
.dark,
.light {
behavior: expression( !this.before ? this.before = this.innerHTML = '<div class="after"></div>' + this.innerHTML : '' );
}
Хотя использование выражений обычно не рекомендуется, это не должно слишком сильно влиять на производительность, так какполностью оценивается только один раз, и когда элемент создается, условие возвращает false.
Однако есть одна ловушка.Если IE8 работает в режиме IE8 / IE8, псевдоэлементы будут при изображениях, если только вы не установите негатив z-index
для последнего, что не всегда приемлемо.
Вы можете посмотреть рабочий пример здесь .