html - 我怎样才能使这个仅 CSS 的轮播默认显示第一张幻灯片?

标签 html css carousel

我有一个纯 CSS 轮播(非常好!),唯一的问题是默认情况下未选中第一张幻灯片。

如果不使用 JavaScript,我如何实现这一点?

<div class="carousel">
    <div class="item red slide-in" id="item1"><h1>Item 1</h1></div>
    <div class="item green slide-in" id="item2"><h1>Item 2</h1></div>
    <div class="item yellow slide-in" id="item3"><h1>Item 3</h1></div>
    <div class="item red slide-in" id="item4"><h1>Item 4</h1></div>
    <div class="controls">
        <a href="#item1" class="btn">•</a>
        <a href="#item2" class="btn">•</a>
        <a href="#item3" class="btn">•</a>
        <a href="#item4" class="btn">•</a>
    </div>
</div>

核心CSS:

.carousel {
    position: relative;
    width: 100%;
    height: 100%;
    overflow: hidden;
}

.carousel .item {
    position: absolute;
    width: 100%;
    height: 100%;
    text-align: center;
}

/* animations */

.carousel .slide-in {
    -webkit-transform: translate3d(-90%, 0px, 0px);
    -moz-transform: translate3d(-90%, 0px, 0px);
    -ms-transform: translate3d(-90%, 0px, 0px);
    -o-transform: translate(-90%, 0px, 0px);
    transform: translate3d(-90%, 0px, 0px);
    -webkit-transition: -webkit-transform 0.5s ease-out;
    -moz-transition: -moz-transform 0.5s ease-out;
    -ms-transition: -ms-transform 0.5s ease-out;
    -o-transition: -o-transform 0.5s ease-out;
    transition: transform 0.5s ease-out;
    z-index: 1;
}

.carousel .slide-in:target ~ .slide-in {
    -webkit-transform: translate3d(90%, 0px, 0px);
    -moz-transform: translate3d(90%, 0px, 0px);
    -ms-transform: translate3d(90%, 0px, 0px);
    -o-transform: translate(90%, 0px, 0px);
    transform: translate3d(90%, 0px, 0px);
}

.carousel .slide-in:target,
.carousel .slide-in:focus {
    -webkit-transform: translate3d(0px, 0px, 0px);
    -moz-transform: translate3d(0px, 0px, 0px);
    -ms-transform: translate3d(0px, 0px, 0px);
    -o-transform: translate(0px, 0px, 0px);
    transform: translate3d(0px, 0px, 0px);
    z-index: 3;
}

.carousel .slide-in:target + .slide-in {
    z-index: 2;
}

这是轮播工作的 fiddle :

http://jsfiddle.net/kmturley/fs6wge3f/6/

最佳答案

一种部分有效的方法是选择第一个元素(如果它不是目标)。

要选择不是目标的元素,请使用 :not(:target) 将其取反。

要选择第一个元素,只需将其与 :first-of-type 组合即可:

Updated Example

.carousel .slide-in:first-of-type:not(:target) {
    -webkit-transform: translate3d(0px, 0px, 0px);
    -moz-transform: translate3d(0px, 0px, 0px);
    -ms-transform: translate3d(0px, 0px, 0px);
    -o-transform: translate(0px, 0px, 0px);
    transform: translate3d(0px, 0px, 0px);
    z-index: 3;
}

这种方法的警告是第一个元素似乎不再滑动。


或者,我唯一能想到的另一件事是拥有一个具有属性 autofocus="autofocus" 的输入元素。由于该元素最初将处于焦点状态,因此通过使用选择器 .carousel input[type="checkbox"]:focus + .slide-in:

设置第一个元素的样式来利用它

Updated Example

.carousel input[type="checkbox"]:focus + .slide-in,
.carousel .slide-in:target,
.carousel .slide-in:focus {
    -webkit-transform: translate3d(0px, 0px, 0px);
    -moz-transform: translate3d(0px, 0px, 0px);
    -ms-transform: translate3d(0px, 0px, 0px);
    -o-transform: translate(0px, 0px, 0px);
    transform: translate3d(0px, 0px, 0px);
    z-index: 3;
}

这种方法的注意事项是,一旦隐藏的输入元素失去焦点,第一张幻灯片就会移动。

关于html - 我怎样才能使这个仅 CSS 的轮播默认显示第一张幻灯片?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28160940/

相关文章:

javascript - 使用 flexbox 将盒子动态地放入容器中

jquery - 如何自定义布局 h :selectOneRadio

javascript - 如何检查选择选项中的重复值

Css 不适用于自定义 fxml 组件

css - Bootstrap 3 轮播过渡速度

javascript - 使用 Dragula 在 Canvas 上移动对象

html - 具有 Bootstrap 的等高列和 child 的高度百分比

javascript - 如何将倒数计时器添加到我的页面

css - 使中间元素在物化轮播中处于事件状态

internet-explorer - Twitter Bootstrap 2.0轮播和IE过渡问题