在juizy幻灯片样式表代码中无法理解CSS选择器

时间:2015-04-22 19:08:59

标签: css css3 css-selectors

我' M尝试添加juizy slideshow我的网站页面,但我需要完全了解它'为了所做出它的动画(次滑动),用我自己的海关动画同步我会想要添加到页面中。

除了第一个链接中的简短技术说明,here还有更多详细信息(但是法语和来自* 1的可撤销代码与作者所做的讨论略有不同可下载版本的一些改进。)

<body>

    <span id="sl_play" class="sl_command">&nbsp;</span>
    <span id="sl_pause" class="sl_command">&nbsp;</span>
    <span id="sl_i1" class="sl_command sl_i">&nbsp;</span>
    <span id="sl_i2" class="sl_command sl_i">&nbsp;</span>
    <span id="sl_i3" class="sl_command sl_i">&nbsp;</span>
    <span id="sl_i4" class="sl_command sl_i">&nbsp;</span>

    <section id="slideshow">

        <a class="commands prev commands1" href="#sl_i4" title="Go to last slide">&lt;</a>
        <a class="commands next commands1" href="#sl_i2" title="Go to 2nd slide">&gt;</a>
        <a class="commands prev commands2" href="#sl_i1" title="Go to 1rst slide">&lt;</a>
        <a class="commands next commands2" href="#sl_i3" title="Go to 3rd slide">&gt;</a>
        <a class="commands prev commands3" href="#sl_i2" title="Go to 2nd slide">&lt;</a>
        <a class="commands next commands3" href="#sl_i4" title="Go to 4th slide">&gt;</a>
        <a class="commands prev commands4" href="#sl_i3" title="Go to 3rd slide">&lt;</a>
        <a class="commands next commands4" href="#sl_i1" title="Go to first slide">&gt;</a>

        <a class="play_commands pause" href="#sl_pause" title="Maintain paused">Pause</a>
        <a class="play_commands play" href="#sl_play" title="Play the animation">Play</a>

        <div class="container">
            <div class="c_slider"></div>
            <div class="slider">
                <figure>
                    <img src="img/dummy-640x310-1.jpg" alt="" width="640" height="310" />
                    <figcaption>The mirror of soul</figcaption>
                </figure><!--
                --><figure>
                    <img src="img/dummy-640x310-2.jpg" alt="" width="640" height="310" />
                    <figcaption>Let's cross that bridge when we come to it</figcaption>
                </figure><!--
                --><figure>
                    <img src="img/dummy-640x310-3.jpg" alt="" width="640" height="310" />
                    <figcaption>Sushi<em>(do)</em> time</figcaption>
                </figure><!--
                --><figure>
                    <img src="img/dummy-640x310-4.jpg" alt="" width="640" height="310" />
                    <figcaption>Waking Life</figcaption>
                </figure>
            </div>
        </div>

        <span id="timeline"></span>

        <ul class="dots_commands"><!--
            --><li><a title="Show slide 1" href="#sl_i1">Slide 1</a></li><!--
            --><li><a title="Show slide 2" href="#sl_i2">Slide 2</a></li><!--
            --><li><a title="Show slide 3" href="#sl_i3">Slide 3</a></li><!--
            --><li><a title="Show slide 4" href="#sl_i4">Slide 4</a></li>
        </ul>

    </section>

</body>

这是它的样式表代码:

#slideshow {
    position: relative;
    width: 640px;
    height: 310px;
    padding: 15px;
    border: 1px solid #ddd;
    margin: 0 auto 2em;
    background: #FFF;
    background: -webkit-linear-gradient(#FFF, #FFF 20%, #EEE 80%, #DDD);
    background: -moz-linear-gradient(#FFF, #FFF 20%, #EEE 80%, #DDD);
    background: -ms-linear-gradient(#FFF, #FFF 20%, #EEE 80%, #DDD);
    background: -o-linear-gradient(#FFF, #FFF 20%, #EEE 80%, #DDD);
    background: linear-gradient(#FFF, #FFF 20%, #EEE 80%, #DDD);

    -webkit-border-radius: 2px 2px 2px 2px;
    -moz-border-radius: 2px 2px 2px 2px;
    border-radius: 2px 2px 2px 2px;

    -webkit-box-shadow: 0 0 3px rgba(0,0,0, 0.2);
    -moz-box-shadow: 0 0 3px rgba(0,0,0, 0.2);
    box-shadow: 0 0 3px rgba(0,0,0, 0.2);
}

/* Here are some other rules for the #timeline and .dots_commands that i removed to make shorter this code */

/* play/pause commands */
.play_commands {
    position: absolute;
    width: 22px; height: 22px;
    top: 25px; right: 25px;
    z-index: 10;
    text-indent: -9999px;
    border:0 none;
    opacity: 0;

    -webkit-transition: opacity 1s, right 1s;
    -moz-transition: opacity 1s, right 1s;
    transition: opacity 1s, right 1s;
}
.play { right: 55px; cursor: default; }

.pause:hover { border:0 none; }
.play_commands:focus { outline:0; }

#slideshow:hover .pause,
#sl_play:target ~ #slideshow:hover .pause,
.play_commands:focus {
    opacity: 1;
}
.sl_command:target ~ #slideshow:hover .pause,
#sl_pause:target ~ #slideshow:hover .pause {
    opacity: 0;
}
.pause:after,
.pause:before {
    position: absolute;
    display: block;
    content: " ";
    top:0;
    width:38%;
    height: 22px;
    background: #fff;
    background: rgba(255,255,255,0.5);
}
.pause:after {
    right:0;
}
.pause:before {
    left:0;
}
.play {
    width: 1px; 
    height: 1px; 
    border-top: 10px solid transparent; 
    border-left: 20px solid #fff; 
    border-left: 20px solid rgba(255,255,255,0.5); 
    border-bottom: 10px solid transparent;
    opacity: 0;
}
.play:hover,
.play:focus {
    border-bottom: 10px solid transparent;
}

#slideshow .container {
    position:relative;
    width: 640px;
    height: 310px;
    overflow: hidden;
}
/* timeline base */
#slideshow .container:after {
    position:absolute;
    bottom: 0; left:0;
    content: " ";
    background: #999;
    width: 100%;
    height: 1px;
}

@-webkit-keyframes slider {
    0%, 20%, 100%   { left: 0 }
    25%, 45%        { left: -100% }
    50%, 70%        { left: -200% }
    75%, 95%        { left: -300% }
}
@-moz-keyframes slider {
    0%, 20%, 100%   { left: 0 }
    25%, 45%        { left: -100% }
    50%, 70%        { left: -200% }
    75%, 95%        { left: -300% }
}
@keyframes slider {
    0%, 20%, 100%   { left: 0 }
    25%, 45%        { left: -100% }
    50%, 70%        { left: -200% }
    75%, 95%        { left: -300% }
}

#slideshow .slider {
    position: absolute;
    left:0; top:0;
    width: 400%;
    height: 310px;

    -webkit-animation: slider 32s infinite;
    -moz-animation: slider 32s infinite;
    animation: slider 32s infinite;
}
.sl_i:target ~ #slideshow .slider {
    -webkit-transition: left 1s;
    -moz-transition: left 1s;
    transition: left 1s;
}
.sl_command:target ~ #slideshow .slider {
    -webkit-transition: opacity 1s;
    -moz-transition: opacity 1s;
    transition: opacity 1s;
}
#slideshow .c_slider {
    position: absolute;
    left:0; top:0;
    width: 400%;
    height: 310px;
    background: url(img/dummy-640x310-1.jpg) 0 0 no-repeat, url(img/dummy-640x310-2.jpg) 640px 0 no-repeat, url(img/dummy-640x310-3.jpg) 1280px 0 no-repeat, url(img/dummy-640x310-4.jpg) 1920px 0 no-repeat;
}
.sl_i:target ~ #slideshow .c_slider {
    -webkit-transition: background 1s;
    -moz-transition: background 1s;
    transition: background 1s;
}


/* need a stop ! */

/* actions when target ! */
.sl_command { display: none; }

.sl_command:target ~ #slideshow .slider,
.sl_command:target ~ #slideshow figure:after,
.sl_command:target ~ #slideshow figcaption,
.sl_command:target ~ #slideshow #timeline,
.sl_command:target ~ #slideshow .dots_commands li:first-child a:after {
    -webkit-animation-play-state: paused;
    -moz-animation-play-state: paused;
    animation-play-state: paused;
}

#sl_play:target ~ #slideshow .slider,
#sl_play:target ~ #slideshow figure:after,
#sl_play:target ~ #slideshow figcaption,
#sl_play:target ~ #slideshow #timeline,
#sl_play:target ~ #slideshow .dots_commands li:first-child a:after {
    -webkit-animation-play-state: running;
    -moz-animation-play-state: running;
    animation-play-state: running;
}

.sl_command:target ~ #slideshow .pause  { opacity:0; }
.sl_command:target ~ #slideshow .play   { opacity:1; right: 25px; cursor: pointer; }
#sl_play:target ~ #slideshow .pause     { opacity:0; }
#sl_play:target ~ #slideshow .play      { opacity:0; right: 55px; cursor: default;}

.sl_i:target ~ #slideshow .slider                                   { visibility: hidden }
.sl_i:target ~ #slideshow .slider figcaption                        { visibility: hidden }
.sl_i:target ~ #slideshow .dots_commands li:first-child a:after     { display:none; }
.sl_i:target ~ #slideshow .dots_commands li:first-child a:before    { display:block; }}

#sl_i1:target ~ #slideshow .commands                                { display: none; }
#sl_i1:target ~ #slideshow .commands1                               { display: block; }
#sl_i1:target ~ #slideshow .c_slider                                { background-position: 0 0, 640px 0, 1280px 0, 1920px 0; }
#sl_i1:target ~ #slideshow .dots_commands li:first-child a:before   { left:0; }

#sl_i2:target ~ #slideshow .commands                                { display: none; }
#sl_i2:target ~ #slideshow .commands2                               { display: block; }
#sl_i2:target ~ #slideshow .c_slider                                { background-position: -640px 0, 0 0, 640px 0, 1280px 0; }
#sl_i2:target ~ #slideshow .dots_commands li:first-child a:before   { left:18px; }

#sl_i3:target ~ #slideshow .commands                                { display: none; }
#sl_i3:target ~ #slideshow .commands3                               { display: block; }
#sl_i3:target ~ #slideshow .c_slider                                { background-position: -1280px 0, -640px 0, 0 0, 640px 0; }
#sl_i3:target ~ #slideshow .dots_commands li:first-child a:before   { left:36px; }

#sl_i4:target ~ #slideshow .commands                                { display: none; }
#sl_i4:target ~ #slideshow .commands4                               { display: block; }
#sl_i4:target ~ #slideshow .c_slider                                { background-position: -1920px 0, -1280px 0, -640px 0, 0 0; }
#sl_i4:target ~ #slideshow .dots_commands li:first-child a:before   { left:54px; }

我无法从之前的样式表中理解的选择器组合取决于此规则:

#slideshow:hover .pause,
#sl_play:target ~ #slideshow:hover .pause,
.play_commands:focus {
    opacity: 1;
}
  1. 是否第一组合#slideshow:hover .pause转换为&#34;选择与类名暂停能与幻灯片&#34的ID的元素的后代的所有元素;?

  2. #sl_play:target ~ #slideshow:hover .pause表示什么?

  3. ------------------编辑后Brian Stephens answer ------------------- ---

    对于问题2 )我仍然无法理解悬停状态必须前面带有:target伪类的ID的含义,一般来说, CSS的优先级有关的代码元素的配置,但在这种情况下它看起来&#39; S约事件,而:是否表示的超级链接靶向#sl_play必须被激活,然后再应该发生上悬停#slideshow规则可能有效吗?如果优先级是关于事件的,那么代码中的优先级就不再重要了吗?

1 个答案:

答案 0 :(得分:4)

<强>问题#1 :是否<github.yaa110.widget.LinearLayoutButtonsHolder android:id="@+id/adapter" android:layout_width="wrap_content" android:orientation="vertical" android:layout_centerInParent="true" android:layout_height="wrap_content"> <Button android:text="Long text for test" android:layout_width="wrap_content" android:layout_height="48dp" android:id="@+id/opt1"/> <Button android:text="2" android:layout_width="wrap_content" android:layout_height="48dp" android:id="@+id/opt2" /> <Button android:text="3" android:layout_width="wrap_content" android:layout_height="48dp" android:id="@+id/opt3" /> <Button android:text="4" android:layout_width="wrap_content" android:layout_height="48dp" android:id="@+id/opt4" /> <Button android:text="5" android:layout_width="wrap_content" android:layout_height="48dp" android:id="@+id/opt5" /> </github.yaa110.widget.LinearLayoutButtonsHolder> 的第一组合翻译到&#34;选择与类名暂停能与幻灯片&#34的ID的元素的后代的所有元素;

答案:是的,它是一个后代选择器,它没有指定它必须是一个孩子;它可能会进一步下降。请记住,它还指定了悬停状态。

问题#2 #slideshow:hover .pause表示什么?

答案:这使用了一般的兄弟连接器。 #sl_play:target ~ #slideshow:hover .pause必须以#slideshow:hover开头,但不一定是立即。它一定是后来的兄弟姐妹。

这是一篇很好的文章,解释了儿童和兄弟选择器的所有变体:CSS Tricks