Ojman
Ojman

Reputation: 61

Select a container of a radio button list when a button gets selected

I have several containers with radio buttons. I want a container of a selected radio button to become selected:

input[type="radio"]:checked+.container {
  border: 5px solid red;
}
<div class="container">
  <input class="btn-radio" type="radio" value="123" name="rd" />
</div>


<div class="container">
  <input class="btn-radio" type="radio" value="1234" name="rd" />
</div>


<div class="container">
  <input class="btn-radio" type="radio" value="12345" name="rd" />
</div>

Why doesn't it work?

Upvotes: 2

Views: 2342

Answers (3)

T04435
T04435

Reputation: 13992

Here is a solution without new elements, you can use the ::before of the input to make the border on the container. Good Luck!

.container {
  position: relative;
  margin-bottom: 2em;
}

input[type="radio"]:checked::before {
  content: '';
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
  border: 5px solid red;
}
    <div class="container">
      <p>container 123</p>
      <input class="btn-radio" type="radio" value="123" name="rd" />
    </div>


    <div class="container">
    <p>container 1234</p>
      <input class="btn-radio" type="radio" value="1234" name="rd" />
    </div>


    <div class="container">
    <p>container 12345</p>
      <input class="btn-radio" type="radio" value="12345" name="rd" />
    </div>

Upvotes: 1

MJN
MJN

Reputation: 653

Here is the working code which I commented above

input[type="radio"]:checked + .border {
    border: 5px solid red;
}

.container {
    position: relative;
    max-width: 100px;
    margin: 10px;
}

input {
    position: relative;
    z-index: 100;
}

.border {
    position: absolute;
    left: 0;
    right: 0;
    top: 0;
    bottom: 0;
}
<div class="container">
    <input class="btn-radio" type="radio" value="123" name="rd" />Input 1
    <div class="border"></div>
</div>
<div class="container">
    <input class="btn-radio" type="radio" value="1234" name="rd" />Input 2
    <div class="border"></div>
</div>
<div class="container">
   <input class="btn-radio" type="radio" value="12345" name="rd" /> Input 3
     <div class="border"></div>
</div>

Upvotes: 2

Rajat Jain
Rajat Jain

Reputation: 1415

Use id insted of that. Give them individual id.

#id:checked + .container {
    border: 5px solid red;;
}

For better result use the id for container as well.

Upvotes: 0

Related Questions