css伪类选择器问题

Vagor
  • 716

问题修正

我最后还是通过改变dom元素的结构解决了这个问题,如果有哪位大神可以通过css定位到我那个元素,请告诉我!

我的问题

我的问题是如何使用css嵌套使用伪类选择器

.cards input:nth-child(1):checked:root {
    background: #fff;
}

我的想法的当我第一个单选框被选择时,页面发生变化。完全用css实现怎么实现?我这样写是不行的。

完整demo

我是想做一个纯css实现的选项卡

html

<div class="input-container">
    <input class="input-box" type="text" placeholder="点我就变大了">
</div>
<div class="display-box">
    <div class="slider-container">
        <div class="item"></div>
        <div class="item"></div>
        <div class="item"></div>
    </div>
</div>
<div class="num">
    <span>1</span>
    <span>2</span>
    <span>3</span>
</div>
<div class="cards">
    <input type="radio" name="slider" value="1" />
    <input type="radio" name="slider" value="2" />
    <input type="radio" name="slider" value="3" />
</div>

css

.display-box {
    width: 219px;
    overflow: hidden;
}

.slider-container {
    font-size: 0;
    width: 657px;
    height: 80px;
}

.item {
    width: 219px;
    height: 80px;
    display: inline-block;
    margin: 0;
    padding: 0;
}

.item:nth-child(1) {
    background: #f00;
}

.item:nth-child(2) {
    background: #0f0;
}

.item:nth-child(3) {
    background: #00f;
}

.num {
    position: absolute;
    margin-top: -20px;
    margin-left: 145px;
}

.num span {
    z-index: -1;
    display: inline-block;
    width: 20px;
    height: 20px;
    margin: 0 1px;
    padding: 0;
    line-height: 20px;
    text-align: center;
    color: #fff;
    background-color: rgba(255, 255, 255, 0.7);
}

.cards {
    position: absolute;
    margin-top: -20px;
    margin-left: 145px;
}

.cards input {
    width: 20px;
    height: 20px;
    margin: 0 1px;
    padding: 0;
    opacity: 0.5;
}

.cards input:nth-child(1):checked:root {
    background: #fff;
}
回复
阅读 2.6k
1 个回答

仔细看了一下,你这一段

<input type="radio" name="slider" value="1" />
.cards input:nth-child(1):checked {
    background: #fff;
}

控制的是第一个input它被选择时的样式改变,而你是想改变每一个card的背景色吧
我举个方案:可以这样将每个card作为每个input的兄弟节点

    <div class="cards">
        <input type="radio" name="slider" value="1" class="radio" />
        <div class="cont"></div>
        <input type="radio" name="slider" value="2" class="radio" />
        <div class="cont"></div>
        <input type="radio" name="slider" value="3" class="radio" />
        <div class="cont"></div>
    </div>
    .radio:checked + .cont {
        background: #fff;
    }
    .cont{
        height: 50px;
        width: 50px;
        background-color: #eee;
    }

然后通过调整position属性去调整位置,这里我就不详写了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏