简体   繁体   English

如何将单选按钮的父 DIV 设置为看起来像卡片?

[英]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.

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