自定义单选按钮w3s示例

时间:2017-12-14 10:00:14

标签: css css3 css-selectors

w3schools.com上有一个自定义单选按钮示例: https://www.w3schools.com/howto/tryit.asp?filename=tryhow_css_custom_radio

我想知道,单独.container .checkmark:after声明的原因是什么?为什么这些样式不直接包含在.checkmark:after语句中?

完整代码示例:



/* The container */
.container {
    display: block;
    position: relative;
    padding-left: 35px;
    margin-bottom: 12px;
    cursor: pointer;
    font-size: 22px;
    -webkit-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
}

/* Hide the browser's default radio button */
.container input {
    position: absolute;
    opacity: 0;
}

/* Create a custom radio button */
.checkmark {
    position: absolute;
    top: 0;
    left: 0;
    height: 25px;
    width: 25px;
    background-color: #eee;
    border-radius: 50%;
}

/* On mouse-over, add a grey background color */
.container:hover input ~ .checkmark {
    background-color: #ccc;
}

/* When the radio button is checked, add a blue background */
.container input:checked ~ .checkmark {
    background-color: #2196F3;
}

/* Create the indicator (the dot/circle - hidden when not checked) */
.checkmark:after {
    content: "";
    position: absolute;
    display: none;
}

/* Show the indicator (dot/circle) when checked */
.container input:checked ~ .checkmark:after {
    display: block;
}

/* Style the indicator (dot/circle) */
.container .checkmark:after {
 	top: 9px;
	left: 9px;
	width: 8px;
	height: 8px;
	border-radius: 50%;
	background: white;
}

<h1>Custom Radio Buttons</h1>
<label class="container">One
  <input type="radio" checked="checked" name="radio">
  <span class="checkmark"></span>
</label>
<label class="container">Two
  <input type="radio" name="radio">
  <span class="checkmark"></span>
</label>
<label class="container">Three
  <input type="radio" name="radio">
  <span class="checkmark"></span>
</label>
<label class="container">Four
  <input type="radio" name="radio">
  <span class="checkmark"></span>
</label>
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:0)

为什么会发生这种情况没有真正原因,我想w3schools有以下动机:

  • .checkmark:after的第一条规则除了设置内容,位置和显示外,并没有真正提供任何标记。这仅仅是样式的准备,可以应用于网站上的每个复选框,如果其他样式被更改,则不会产生任何后果。

  • 在此示例中,只有一个区域包含样式化输入,但在大型网站中可能有多个输入字段。应用不可见的伪元素(现代浏览器不能完全呈现display: none on page load anyway)不是问题,但您可以通过这种方式控制实际样式化的输入。

这是一个语义问题,将实际的样式和逻辑分开。

答案 1 :(得分:0)

在上面的示例you can just omit ".container" because the only radio buttons present are also enclosed within the container类标签中,因此应用了相同的CSS样式。

但是如果是这样的话,你想要应用不同的样式并且单选按钮不在同一容器类中?

如果您使用"input:checked ~ .checkmark:after"而未提及具体存在于哪个容器中,则样式would be just applied to all the elements of the type input而不仅仅是容器类中的样式。