Elyor
Elyor

Reputation: 5532

How can I change the background color of a button when clicked?

I researched a lot, and I found this JSFiddle looks like what I need, but, when I click the button, the page background is changing. I want the button's color to be changed when clicked, instead.

div{
    width: 100%;
    height: 100%;
    background: #5CB85C;
    position: absolute;
    top: 0;
    left: 0;
    z-index:1;
}
label.btn {
    position: absolute;
    top:10px;
    left: 10px;
    z-index:2;
    -webkit-touch-callout: none;
    -webkit-user-select: none;
    -khtml-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
}
input[type="checkbox"]{
    display: none;
}
input[type="checkbox"]:checked + div{
    background: #5BC0DE;
}
label + input[type="checkbox"]:checked{
    background: #000;
}
<link href="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/css/bootstrap-combined.min.css" rel="stylesheet"/>
<label for="check" class="btn btn-default">Toggle background colour</label>
<input type="checkbox" id="check" />
<div></div>

Upvotes: 9

Views: 5627

Answers (6)

user4939121
user4939121

Reputation:

change

input[type="checkbox"]:checked + div{
    background: #5BC0DE;
}

to

input[type="checkbox"]:checked + .btn {
    background: #5BC0DE;
}

Upvotes: 1

Vandana Rajput
Vandana Rajput

Reputation: 35

.nl [type=checkbox]:checked + span {
  background: #222222;
  background-repeat: no-repeat;
}
.nl label span {
  height: 18px;
  width: 18px;
  float: left;
  margin-right: 9px;
  border: 1px solid #d5d5d5;
  display: inline-block;
    background-color: #ff0000;
}
input[type="checkbox"], .checkbox-inline input[type="checkbox"] {
  position: absolute;
  margin-top: 4px \9;
  margin-left: -20px;
}
.nl label input {
  display: none;
}
<div class="checkbox nl">
            <label><input type="checkbox" class="checkboxx" name="rememberme" id="rememberme" value="1" checked="checkced"> Remember me<span></span></label>
			<input type="hidden" name="action" value="login">
</div>

Upvotes: 1

Francesco V.
Francesco V.

Reputation: 119

To achieve what you want, in your css use background-color when the button is clicked.

":active" property is used for displaying clicked event style...

HTML:

<input type='button' class='btn' value='test'/>

CSS:

.btn {
    background-color:#00ff00;
}

.btn:active {
    background-color:#ff00ff;
}

TEST

Upvotes: 3

TylerH
TylerH

Reputation: 21086

This is fairly trivial. Simply move the "button" label element to after the checkbox so that you can select it with the + selector (this is called the adjacent sibling selector; there is no previous sibling selector, unfortunately), and change the CSS to match. JSFiddle

div{
    width: 100%;
    height: 100%;
    background: #5CB85C;
    position: absolute;
    top: 0;
    left: 0;
    z-index:1;
}
.btn {
    position: absolute;
    top:10px;
    left: 10px;
    z-index:2;
    -webkit-touch-callout: none;
    -webkit-user-select: none;
    -khtml-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
}
input[type="checkbox"]{
    display: none;
}
input[type="checkbox"]:checked + .btn {
    background: #5BC0DE;
}
/* label + input[type="checkbox"]:checked{
    background: #000;
} */ /* I've commented this last selector out as it is unused per Harry's point in the comments */
<link href="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/css/bootstrap-combined.min.css" rel="stylesheet"/>
<input type="checkbox" id="check" />
<label for="check" class="btn btn-default">Toggle background color</label>
<div></div>

Upvotes: 11

ketan
ketan

Reputation: 19341

In css you can not go backward you should go forward like following.
You need to put label after input box.

+ is for the next sibling. There is no "previous sibling" selector.

div{
    width: 100%;
    height: 100%;
    background: #5CB85C;
    position: absolute;
    top: 0;
    left: 0;
    z-index:1;
}
label.btn {
    position: absolute;
    top:10px;
    left: 10px;
    z-index:2;
    -webkit-touch-callout: none;
    -webkit-user-select: none;
    -khtml-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
}
input[type="checkbox"]{
    display: none;
}
input[type="checkbox"]:checked + label{
    background: #5BC0DE;
}
label + input[type="checkbox"]:checked{
    background: #000;
}
<link href="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/css/bootstrap-combined.min.css" rel="stylesheet"/>
<input type="checkbox" id="check" />
<label for="check" class="btn btn-default">Toggle background colour</label>
<div></div>

Check Updated Fiddle

Upvotes: 2

user2575725
user2575725

Reputation:

Try using css pseudo code:

#check {
  display: none;
}
#check + label.btn {
  cursor: pointer;
  border: 1px solid grey;
  padding: 6px 8px;
  background: ghostwhite;
  border-radius: 7px;
  box-shadow: 0px 1px 1px;
}
#check:checked + label.btn {
  background: wheat;
}
#check + label.btn:hover {
  box-shadow: 0px 3px 2px;
}
#check + label.btn:active {
  box-shadow: 0px 1px 1px inset;
}
<input type="checkbox" id="check" />
<label for="check" class="btn">Toggle background colour</label>

Upvotes: 2

Related Questions