[英]How to style the parent DIV of a radio button to look like a card?
When I select a radio button I want the wrapper parent div to style to border: 1px solid #color
to look like a card.当我选择一个单选按钮时,我希望包装父 div 将样式设置为border: 1px solid #color
看起来像一张卡片。 They way I did it with JavaScript works, but the code doesn't seem clean, ig?我用 JavaScript 实现的方式是有效的,但是代码看起来不干净,ig?
There has to be a better way to do this, since I have seen this type of card-design in many websites before.必须有更好的方法来做到这一点,因为我以前在许多网站上都看到过这种类型的卡片设计。 How would you guys do select the parent div of the particular button the user clicks?你们将如何选择用户单击的特定按钮的父 div? Would you use JavaScript?你会使用 JavaScript 吗?
const form = document.querySelector("form") const parentDivs = document.querySelectorAll(".parentDiv") form.addEventListener("change", e => { parentDivs.forEach(parent => { if(parent.getAttribute("aria-parent") == e.target.id) { parent.classList.add("selected") }else { parent.classList.remove("selected") } }) })
.parentDiv { display: flex; align-items: center; cursor: pointer; border: 1px solid #eee; margin-bottom: 2rem; } .selected { border: 1px solid green; }
<h1>Select any of the button</h1> <form> <label for="radio1"> <div class="parentDiv" aria-parent="radio1"> <input type="radio" name="radios" id="radio1"> <div> <h2>Desk Stand 1</h2> <p>Some Dummy Text</p> </div> </div> </label> <label for="radio2"> <div class="parentDiv" aria-parent="radio2"> <input type="radio" name="radios" id="radio2"> <div> <h2>Desk Stand 2</h2> <p>Some Dummy Text</p> </div> </div> </label> <label for="radio3"> <div class="parentDiv" aria-parent="radio3"> <input type="radio" name="radios" id="radio3"> <div> <h2>Desk Stand 3</h2> <p>Some Dummy Text</p> </div> </div> </label> </form>
I think that this would help you:我认为这会帮助你:
Codepen preview代码笔预览
HTML HTML
<form class='form'>
<label for="radio1">
<div class="parentDiv" aria-parent="radio1">
<input type="radio" name="radios" id="radio1">
<div class ='flex'>
<h2>Desk Stand 1</h2>
<p>Some Dummy Text</p>
</div>
</div>
</label>
<label for="radio2">
<div class="parentDiv" aria-parent="radio2">
<input type="radio" name="radios" id="radio2">
<div>
<h2>Desk Stand 2</h2>
<p>Some Dummy Text</p>
</div>
</div>
</label>
<label for="radio3">
<div class="parentDiv" aria-parent="radio3">
<input type="radio" name="radios" id="radio3">
<div>
<h2>Desk Stand 3</h2>
<p>Some Dummy Text</p>
</div>
</div>
</label>
</form>
CSS CSS
@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@400;600&display=swap');
body{
font-family: 'Poppins', sans-serif;
}
.form {
display: flex;
flex-wrap: wrap;
gap: 3rem;
}
#selected {
border: 2px solid green;
background: rgba(66, 245, 117, 0.2);
transition: all .3s ease-in-out;
}
.parentDiv {
display: flex;
align-items: center;
padding: 1rem 2rem;
border: 2px solid #ccc;
border-radius: 3px;
cursor: pointer;
}
input[type="radio"] {
display: none;
}
JavaScript JavaScript
const form = document.querySelector("form")
const parentDivs = document.querySelectorAll(".parentDiv")
form.addEventListener("change", e => {
parentDivs.forEach(parent => {
if(parent.getAttribute("aria-parent") == e.target.id) {
parent.setAttribute('id','selected')
}else { parent.removeAttribute('id','selected')
}
})
})
Note:- Please change the styles to give it a more fresh look.注意:-请更改样式以使其外观更清新。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.