Home  >  Article  >  Web Front-end  >  Example of custom effect of checkbox in html

Example of custom effect of checkbox in html

零下一度
零下一度Original
2017-06-30 10:10:331571browse

Checkbox should be a relatively common HTML function, but the checkbox that comes with the browser is often not very good-looking, and the effects are different in different browsers. Out of the need to beautify and unify visual effects, the customization of checkbox was proposed. Here is a summary of the implementation methods.

Implementation ideas

The main means of pure css implementation is to use the simulation function of the label label. The for attribute of label can be associated with a specific input element. Even if the input itself is not visible to the user, there is a corresponding After adding label, the user can directly interact with the label label to replace the native input - and this leaves room for our style simulation. In short,

hides the native input and leaves the style definition process to label (Then why not directly change the style of the checkbox? Because checkbox is the default component of the browser, the style It is not as convenient to change as label. Many attributes have no effect on checkbox, such as background, and label is basically the same as div in style. Let others slaughter')

In the selection event, due to the existence of the "adjacent selector (E+F)" of css, we can directly use the default checkbox of html, eliminating the need for js simulation selection trouble.

demo

Some CSS3 attributes of DEMO only have webkit prefix, so it is recommended to use a browser with webkit kernel to view this page
HTML code:

<div class="wrap"><!-- `input`的id必须有,这个是label进行元素匹配所必需的 --><!-- 可以看到每个input的id和label的“for”属性对应同一字符串 --><input type="checkbox" id="checkbox01" /><label for="checkbox01"></label><input type="checkbox" id="checkbox02" /><label for="checkbox02"></label><input type="checkbox" id="checkbox03" /><label for="checkbox03"></label><input type="checkbox" id="checkbox04" /><label for="checkbox04"></label>

HTML construction is completed, next is the corresponding css.

.wrap {
  width: 500px;
  background-color: #EEE;
  border: 2px solid #DEF;
}/* 隐藏所有checkbox */input[type='checkbox'] {
  display: none;
}/* 对label进行模拟.背景图片随便拼凑的,不要吐槽品味*//*   transition效果是做个背景切换效果,这里单纯演示而已,实际上这个过渡不加更自然*/label {
  display: inline-block;
  width: 60px;
  height: 60px;
  position: relative;
  background: url(//www.chitanda.me/images/blank.png);
  background-position: 0 0px;
  -webkit-transition: background 0.5s linear;
}/*  利用相邻选择符和checkbox`:checked`的状态伪类来模拟默认选中效果(就是点击后那个勾号的效果)  *//*如果这段代码注释,点击后将没有任何反馈给用户*//*因为label本身是没有点击后被选中的状态的,checkbox被隐藏后,这个状态只能手动模拟*/input[type='checkbox']:checked+label {
  background-position: 0 -60px;
}

The effect of the above code is as follows, and it seems to be OK.

But if you think about it carefully, it seems that something is missing: The prompt text corresponding to the option
Newcomers who don’t understand css may first react at this time to label# Use the p tag or the span tag after ## to add text. But this approach is not very elegant. Personally, I recommend using CSS ::before and ::after pseudo-elements (::before and :before are the same thing. But In order to distinguish "pseudo elements" from "pseudo classes", the W3C recommended writing method is to use :: for pseudo elements and : for pseudo classes) The specific content of the pseudo element Not much to say here, (actually my knowledge of them is limited to their use, and I don’t understand this, so I won’t mislead others)

/* 伪元素的生效很简单,定义`content`就好,其余的属性和普通div一样 */label::after {
   content: attr(data-name);   /*利用attr可以减少css代码量,data-name写在html部分的label属性里*/
  display: inline-block;
  position: relative;
  width: 120px;
  height: 60px;
  left: 100%;
  vertical-align: middle;
  margin: 10px;
}
Of course, since You can use

::after to simulate the text of the label, and then you can use ::before to simulate the checkbox style of label, which will not be analyzed here.

The above is the detailed content of Example of custom effect of checkbox in html. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn