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;
答案 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
而不仅仅是容器类中的样式。