简体   繁体   English

使用单选按钮(内容切换器)并排定位div

[英]Positioning div side by side with radio buttons (content switchers)

I've created some radio buttons which work in my example as content switchers - https://jsfiddle.net/026tbk13/29/ 我创建了一些单选按钮,在我的示例中作为内容切换器工作 - https://jsfiddle.net/026tbk13/29/

<input type="radio" name="switch" id="card1switch" checked />
<label for="card1switch">Option 01</label>
<br/>
<input type="radio" name="switch" id="card2switch" />
<label for="card2switch">Option 02</label>
<br/>
<input type="radio" name="switch" id="card3switch" />
<label for="card3switch">Option 03</label>
<br/>
<input type="radio" name="switch" id="card4switch" />
<label for="card4switch">Option 04</label>

<div class="card" id="card1">
    <p>Text_01 Text_01 Text_01 Text_01 Text_01 Text_01 Text_01</p>
    <p>Text_01 Text_01 Text_01 Text_01 Text_01 Text_01 Text_01</p>
    <p>Text_01 Text_01 Text_01 Text_01 Text_01 Text_01 Text_01</p>
</div>

<div class="card" id="card2">
    <p>Text_02 Text_02 Text_02 Text_02 Text_02 Text_02 Text_02 </p>
    <p>Text_02 Text_02 Text_02 Text_02 Text_02 Text_02 Text_02 </p>
    <p>Text_02 Text_02 Text_02 Text_02 Text_02 Text_02 Text_02 </p>
</div>

<div class="card" id="card3">
    <p>Text_03 Text_03 Text_03 Text_03 Text_03 Text_03 Text_03 </p>
    <p>Text_03 Text_03 Text_03 Text_03 Text_03 Text_03 Text_03 </p>
    <p>Text_03 Text_03 Text_03 Text_03 Text_03 Text_03 Text_03 </p>
</div>

<div class="card" id="card4">
    <p>Text_04 Text_04 Text_04 Text_04 Text_04 Text_04 Text_04 </p>
    <p>Text_04 Text_04 Text_04 Text_04 Text_04 Text_04 Text_04 </p>
    <p>Text_04 Text_04 Text_04 Text_04 Text_04 Text_04 Text_04 </p>
</div>

And CSS: 和CSS:

 .card{
   display: block;
   padding: 20px 0;
   display: none;
   margin: 20px 0 0;
   border-radius: 6px;
 }

 #card1switch:checked ~ #card1,
 #card2switch:checked ~ #card2,
 #card3switch:checked ~ #card3,
 #card4switch:checked ~ #card4{
   display: block;
 }

For now text is visible below radio buttons and what I'd like to achieve is to have it on the right (side by side with buttons). 现在,文本在单选按钮下方可见,我想要实现的是将其放在右侧(与按钮并排)。

Thanks a lot in advance for you help! 非常感谢您的帮助!

Regards, Roso 此致,Roso

To get all cards to appear on the same row with the 1st option you can use wrap everything in a flexbox ( .container ) with direction of column and wrap behavior. 要使所有卡与第一个选项显示在同一行上,您可以使用包含column方向和包装行为的Flexbox( .container )中的所有内容。 Limit the height of the .container to make the cards appear on the 2nd column. 限制.container的高度以使卡片显示在第二列上。

The column makes the radio button and the label appear on different rows. 该列使单选按钮和标签显示在不同的行上。 To prevent that, we'll hide the radio buttons, and create a custom radio button on the label using radial gradients. 为了防止这种情况,我们将隐藏单选按钮,并使用径向渐变在标签上创建自定义单选按钮。

 .containter { display: flex; flex-direction: column; height: 100px; flex-wrap: wrap; } .containter>input { position: absolute; left: -1000px; } .containter>input:checked + label { background: radial-gradient(circle at center, #666666 0, #666666 4px, #dedede 4px, #dedede 5px, #a6a6a6 5px, #a6a6a6 6px, transparent 6px) no-repeat; background-size: 12px 12px; background-position: 2px center; } .containter>label { padding: 0 0 0 20px; background: radial-gradient(circle at center, #dedede 0, #dedede 5px, #a6a6a6 5px, #a6a6a6 6px, transparent 6px) no-repeat; background-size: 12px 12px; background-position: 2px center; } .card { display: block; display: none; margin: 0 0 0 10px; border-radius: 6px; } .card>p { margin-top: 0; } #card1switch:checked~#card1, #card2switch:checked~#card2, #card3switch:checked~#card3, #card4switch:checked~#card4 { display: block; } 
 <div class="containter"> <input type="radio" name="switch" id="card1switch" checked /> <label for="card1switch">Option 01</label> <input type="radio" name="switch" id="card2switch" /> <label for="card2switch">Option 02</label> <input type="radio" name="switch" id="card3switch" /> <label for="card3switch">Option 03</label> <input type="radio" name="switch" id="card4switch" /> <label for="card4switch">Option 04</label> <div class="card" id="card1"> <p>Text_01 Text_01 Text_01 Text_01 Text_01 Text_01 Text_01</p> <p>Text_01 Text_01 Text_01 Text_01 Text_01 Text_01 Text_01</p> <p>Text_01 Text_01 Text_01 Text_01 Text_01 Text_01 Text_01</p> </div> <div class="card" id="card2"> <p>Text_02 Text_02 Text_02 Text_02 Text_02 Text_02 Text_02 </p> <p>Text_02 Text_02 Text_02 Text_02 Text_02 Text_02 Text_02 </p> <p>Text_02 Text_02 Text_02 Text_02 Text_02 Text_02 Text_02 </p> </div> <div class="card" id="card3"> <p>Text_03 Text_03 Text_03 Text_03 Text_03 Text_03 Text_03 </p> <p>Text_03 Text_03 Text_03 Text_03 Text_03 Text_03 Text_03 </p> <p>Text_03 Text_03 Text_03 Text_03 Text_03 Text_03 Text_03 </p> </div> <div class="card" id="card4"> <p>Text_04 Text_04 Text_04 Text_04 Text_04 Text_04 Text_04 </p> <p>Text_04 Text_04 Text_04 Text_04 Text_04 Text_04 Text_04 </p> <p>Text_04 Text_04 Text_04 Text_04 Text_04 Text_04 Text_04 </p> </div> </div> 

Old answer : 老答案

To make each card appear to on the same row of the corresponding radio button, you can wrap each combination of input , label , and div in a flexbox (the .container element): 要使每张卡看起来位于相应单选按钮的同一行,您可以在flexbox( .container元素)中包装inputlabeldiv每个组合:

 .containter { display: flex; align-items: flex-start; margin: 0 0 10px; } .containter>input { margin: 1px 5px 0 0; } .card { display: block; display: none; margin: 0 0 0 10px; border-radius: 6px; } .card>p { margin: 0; } #card1switch:checked~#card1, #card2switch:checked~#card2, #card3switch:checked~#card3, #card4switch:checked~#card4 { display: block; } 
 <div class="containter"> <input type="radio" name="switch" id="card1switch" checked /> <label for="card1switch">Option 01</label> <div class="card" id="card1"> <p>Text_01 Text_01 Text_01 Text_01 Text_01 Text_01 Text_01</p> <p>Text_01 Text_01 Text_01 Text_01 Text_01 Text_01 Text_01</p> <p>Text_01 Text_01 Text_01 Text_01 Text_01 Text_01 Text_01</p> </div> </div> <div class="containter"> <input type="radio" name="switch" id="card2switch" /> <label for="card2switch">Option 02</label> <div class="card" id="card2"> <p>Text_02 Text_02 Text_02 Text_02 Text_02 Text_02 Text_02 </p> <p>Text_02 Text_02 Text_02 Text_02 Text_02 Text_02 Text_02 </p> <p>Text_02 Text_02 Text_02 Text_02 Text_02 Text_02 Text_02 </p> </div> </div> <div class="containter"> <input type="radio" name="switch" id="card3switch" /> <label for="card3switch">Option 03</label> <div class="card" id="card3"> <p>Text_03 Text_03 Text_03 Text_03 Text_03 Text_03 Text_03 </p> <p>Text_03 Text_03 Text_03 Text_03 Text_03 Text_03 Text_03 </p> <p>Text_03 Text_03 Text_03 Text_03 Text_03 Text_03 Text_03 </p> </div> </div> <div class="containter"> <input type="radio" name="switch" id="card4switch" /> <label for="card4switch">Option 04</label> <div class="card" id="card4"> <p>Text_04 Text_04 Text_04 Text_04 Text_04 Text_04 Text_04 </p> <p>Text_04 Text_04 Text_04 Text_04 Text_04 Text_04 Text_04 </p> <p>Text_04 Text_04 Text_04 Text_04 Text_04 Text_04 Text_04 </p> </div> </div> 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM