Я основываю свою реализацию вкладки на следующем:
https://codepen.io/oknoblich/pen/tfjFl
Внутри этой ручки мы имеем следующую структуру:
<input id="tab1" type="radio" name="tabs" checked>
<label for="tab1">Codepen</label>
<input id="tab2" type="radio" name="tabs">
<label for="tab2">Dribbble</label>
<input id="tab3" type="radio" name="tabs">
<label for="tab3">Dropbox</label>
<input id="tab4" type="radio" name="tabs">
<label for="tab4">Drupal</label>
<section id="content1">
content1
</section>
<section id="content2">
content2
</section>
<section id="content3">
content3
</section>
<section id="content4">
content4
</section>
С помощью табуляции стало возможным благодаря селекторам одного уровня:
section {
display: none;
padding: 20px 0 0;
border-top: 1px solid #ddd;
}
input {
display: none;
}
label {
display: inline-block;
margin: 0 0 -1px;
padding: 15px 25px;
font-weight: 600;
text-align: center;
color: #bbb;
border: 1px solid transparent;
}
#tab1:checked ~ #content1,
#tab2:checked ~ #content2,
#tab3:checked ~ #content3,
#tab4:checked ~ #content4 {
display: block;
}
Однако у меня есть несколько «панелей», каждая из которых требует своих вкладок, поэтому атрибуты name
и id
являются динамическими.
В цикле foreach
, который отображает HTML, у меня есть это:
<div class="tabs-container">
<input data-bind="attr:{id: 'tab1-' + factorPaneId, name: 'tabs1-' + factorPaneId}" type="radio" checked>
<label data-bind="attr:{for: 'tab1-' + factorPaneId">Description</label>
<input data-bind="attr:{id: 'tab2-' + factorPaneId, name: 'tabs2-' + factorPaneId}" type="radio" checked>
<label data-bind="attr:{for: 'tab2-' + factorPaneId">Description</label>
<section data-bind="attr:{id: 'content1-' + factorPaneId">
<p data-bind="text: factor.factorDescription"></p>
</section>
<section data-bind="attr:{id: 'content2-' + factorPaneId">
<p data-bind="text: factor.factorDescription"></p>
</section>
</div>
Но я не уверен, как изменить CSS для поддержки этой потребности в динамических id
с. Конкретно этот бит:
#tab1:checked ~ #content1,
#tab2:checked ~ #content2,
#tab3:checked ~ #content3,
#tab4:checked ~ #content4 {
display: block;
}
Мне нужен какой-то способ сказать:
#tab1-*:checked ~ #content1-*{
display: block;
}
Где *
равны. Есть ли CSS / HTML-решение для этого?