Reymark Reymark - 11 days ago 4
CSS Question

HTML,CSS checkbox label position should be on top of checkbox

good day, I am not good at CSS and I am getting a hard time to position the checkbox label on top of checkbox itself. Can you please help me? I want it the label also to be center formatted text because I want also to change the text dynamically using jquery. If I checked it, the "Fix" text will become "Fixed" and this text should remain its centered position on the top of the checkbox. Here is my JSFIDDLE >>> https://jsfiddle.net/koykoys/d2cb96xo/ .

**Note: Please do not modify the "html" part, only the "css" part.

Thank you.



input[type="checkbox"]:not(:checked),
input[type="checkbox"]:checked {
position: absolute;
left: -9999px;
}
input[type="checkbox"]:not(:checked) + label,
input[type="checkbox"]:checked + label{
position: relative;
padding-left: 50px;
cursor: pointer;
}


/* checkbox aspect */
input[type="checkbox"]:not(:checked) + label:before,
input[type="checkbox"]:checked + label:before {
content: '';
position: absolute;
left:0; top: 2px;
width: 40px; height: 40px;
background: #f8f8f8;
border-radius: 3px;
border: 2px solid #aaa;
-webkit-box-shadow: groove 0 0 13px rgba(0, 0, 0, 0.5);
box-shadow: groove 0 0 13px rgba(0, 0, 0, 0.5);
}
/* checked mark aspect */
input[type="checkbox"]:not(:checked) + label:after,
input[type="checkbox"]:checked + label:after {
content: '✔';
position: absolute;
top: 0; left: 5px;
font-size: 34px;
color: green;
transition: all .2s;
-webkit-transition: all .2s;
-moz-transition: all .2s;
-ms-transition: all .2s;
-o-transition: all .2s;
}
/* checked mark aspect changes */
input[type="checkbox"]:not(:checked) + label:after {
opacity: 0;
transform: scale(0);
}
input[type="checkbox"]:checked + label:after {
opacity: 1;
transform: scale(1);
}

<div class="col-md-12">
<input id="checkid" type="checkbox">
<label for="checkid">Fixed</label>
</div>




Answer

This will center the label above the "checkbox" (which is no longer actually an input type="checkbox" since you are using pseudo elements on the label to visually replace it).

input[type="checkbox"]:not(:checked),
input[type="checkbox"]:checked {
  position: absolute;
  left: -9999px;
}
input[type="checkbox"]:not(:checked) + label,
input[type="checkbox"]:checked + label{
  position: relative;
  cursor: pointer;
  display: inline-block;
  padding-bottom: 50px;
}


/* checkbox aspect */
input[type="checkbox"]:not(:checked) + label:before,
input[type="checkbox"]:checked + label:before {
  content: '';
  position: absolute;
  left:50%; top: 20px;
  width: 40px; height: 40px;
  background: #f8f8f8;
  border-radius: 3px;
  border: 2px solid #aaa;
  -webkit-box-shadow: groove 0 0 13px rgba(0, 0, 0, 0.5);
  box-shadow: groove 0 0 13px rgba(0, 0, 0, 0.5);
  transform: translateX(-50%);
}
/* checked mark aspect */
input[type="checkbox"]:not(:checked) + label:after,
input[type="checkbox"]:checked + label:after {
  content: '✔';
  position: absolute;
  top: 20px; left: 0;
  right: 0;
  font-size: 34px;
  color: green;
  transition: all .2s;
  -webkit-transition: all .2s;
  -moz-transition: all .2s;
  -ms-transition: all .2s;
  -o-transition: all .2s;
  text-align: center;
}
/* checked mark aspect changes */
input[type="checkbox"]:not(:checked) + label:after {
  opacity: 0;
  transform: scale(0);
}
input[type="checkbox"]:checked + label:after {
  opacity: 1;
  transform: scale(1);
}
<div class="col-md-12">
   <input id="checkid"  type="checkbox">
   <label for="checkid">Fixed</label>
</div>

<div class="col-md-12">
   <input id="checkid2"  type="checkbox">
   <label for="checkid2">Label can now vary in length</label>
</div>

Comments