html - 添加类开始于动态创建的单选按钮

标签 html css flexbox

我有几个单选按钮和几个标签,就像这样

<div class="col-md-12"> 
     <input type="radio" name="slider" class="slide-radio1" id="slider_1">
     <input type="radio" name="slider" class="slide-radio2" checked id="slider_2">
     <input type="radio" name="slider" class="slide-radio3" id="slider_3">

   <!-- Slider Pagination -->
  <div class="slider-pagination">
     <label for="slider_1" class="page1"></label>
     <label for="slider_2" class="page2"></label>
     <label for="slider_3" class="page3"></label>
  </div>

    <!-----slider Navigator----->
   <div class="navigator left">
     <i class="fa fa-chevron-left" aria-hidden="true"></i>
   </div>
   <div class="navigator right">
     <i class="fa fa-chevron-right" aria-hidden="true"></i>
   </div>


   <!-- Slider #1 -->
   <div class="slider slide-1 inner-container">

   </div>
   <!-- Slider #2 -->
   <div class="slider slide-2 inner-container">

   </div>
   <!-- Slider #2 -->
   <div class="slider slide-3 inner-container">

   </div> 
</div>

它们的样式是这样的,让标签在点击时检查单选按钮:

  .slide-radio1:checked ~ .slider-pagination .page1,
  .slide-radio2:checked ~ .slider-pagination .page2,
  .slide-radio3:checked ~ .slider-pagination .page3,
  .slide-radio4:checked ~ .slider-pagination .page4 {
    width: 14px;
    height: 14px;
    border: 2px solid #ea2e49;
    background: transparent;
  } 

您一定已经注意到,每次点击每个标签时,他们都会检查相应的单选按钮并设置样式,但现在我正在动态创建这些元素,并且有更多的标签和单选按钮,

var arrElement=[{"id": 1,
"imageLink": "https://images.gr-assets.com/authors/1193930952p8/61105.jpg",
"name": "TwichTV app",
"desc": "App that detects if station is online/offline",
"Info": "....."},
           {
             "..":"....."
           }]

     window.arrElement.forEach(function (val) {
        var keys = Object.keys(val);
        keys.forEach(function (key) {
          //here is where i append them to the DOM
          //for each item a radiobutton and label is created and added to DOM
        });
    });

我怎样才能将这种风格应用于所有这些而不仅仅是 3。我想出了使用 class starts with 的想法

 [class*="slide-radio2"]:checked ~ .slider-pagination [class*="page"]{
   width: 14px;
    height: 14px;
   border: 2px solid #ea2e49;
   background: transparent;
 } 

它起作用了,但所有元素的样式都已选中,而不是与该标签等效的元素。我怎么解决这个问题。任何建议表示赞赏。

最佳答案

一种可能的方法是将 Flexbox 与相邻的兄弟选择器和标记更改结合使用。

这里的一般技巧是将每个 slider inputlabeldiv 放在标记中,这样兄弟选择器就可以发挥作用了.

使用 Flexbox 属性 order 然后可以重新定位元素并以与原始布局相同的方式对输入、标签和 div 进行分组。

.col-md-12 {
  display: flex;
  flex-wrap: wrap;
}

.col-md-12 input:checked + label {
  color: red;
}
.col-md-12 input:checked + label + div {
  color: red;
}

.col-md-12 input {
  flex-basis: 3%;
  margin-right: 27%;
  order: 1;
}
.col-md-12 label {
  flex-basis: 30%;
  margin-top: 10px;
  order: 2;
}
.col-md-12 .navigator {
  flex-basis: 50%;
  margin-top: 10px;
  order: 3;
}
.col-md-12 .slider {
  flex-basis: 100%;
  margin-top: 10px;
  order: 4;
}
<div class="col-md-12">
  <input type="radio" name="slider" class="slide-radio1" id="slider_1">
  <label for="slider_1" class="page1">label 1</label>
  <div class="slider slide-1 inner-container">
  container 1
  </div>

  <input type="radio" name="slider" class="slide-radio2" checked id="slider_2">
  <label for="slider_2" class="page2">label 2</label>
  <div class="slider slide-2 inner-container">
  container 2
  </div>

  <input type="radio" name="slider" class="slide-radio3" id="slider_3">
  <label for="slider_3" class="page3">label 3</label>
  <div class="slider slide-3 inner-container">
  container 3
  </div>  

  <!-----slider Navigator----->
  <div class="navigator left">
    <i class="fa fa-chevron-left" aria-hidden="true">nav left</i>
  </div>
  <div class="navigator right">
    <i class="fa fa-chevron-right" aria-hidden="true">nav right</i>
  </div>

</div>

关于html - 添加类开始于动态创建的单选按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44087808/

相关文章:

css - react , flex 盒子 : I want my div to transitionally rise from the bottom of a flex container

javascript - Chrome 和 Firefox 之间的 flexbox/位置滚动差异

html - Bootstrap Css 避免列堆叠

css - 重叠文字

html - 使用 CSS 修改选择元素

高度自动CSS问题

html - 元素在包装器内的 CSS flexbox

html - 如何定位两个 <div>?一个来自 Bootstrap 模式的左侧,一个来自右侧?

html - 如何在html页面中画圆圈?

css - 将预格式化的段落靠得更近?