没有文本时,W3School的自定义复选框对齐问题

时间:2018-07-17 16:34:37

标签: html css asp.net checkbox vertical-alignment

我使用了W3School的自定义复选框片段,可在以下位置找到: https://www.w3schools.com/howto/howto_css_custom_checkbox.asp

我将内容略微调整为以下内容:(对于此帖子,最重要的是我希望复选框和文本在垂直方向上居中对齐):

/*END******************** checkbox styling *********************/

.chkboxContainer {
  display: block;
  position: relative;
  padding-left: 35px;
  padding-top: 6px;
  margin-bottom: 4px;
  cursor: pointer;
  font-size: 14px;
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
}


/* Hide the browser's default checkbox */
.chkboxContainer input[type=checkbox] {
  position: absolute;
  opacity: 0;
  cursor: pointer;
}


/* Create a custom checkbox */
.checkmark {
  position: absolute;
  top: 0;
  left: 0;
  height: 25px;
  width: 25px;
  background-color: #f9fafb;
  border: 1px solid #d4d8de;
  border-radius: 4px;
  -webkit-transition: background 0.5s;
  -moz-transition: background 0.5s;
  -ms-transition: background 0.5s;
  -o-transition: background 0.5s;
  transition: background 0.5s;
}


/* When the checkbox is checked, add a green background */
.chkboxContainer input:checked~.checkmark {
  background-color: #b5dc39;
}


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

/* Show the checkmark when checked */
.chkboxContainer input:checked~.checkmark:after {
  display: block;
}


/* Style the checkmark/indicator */
.chkboxContainer .checkmark:after {
  left: 9px;
  top: 5px;
  width: 5px;
  height: 10px;
  border: solid white;
  border-width: 0 3px 3px 0;
  -webkit-transform: rotate(45deg);
  -ms-transform: rotate(45deg);
  transform: rotate(45deg);
}


/*END******************** checkbox styling *********************/

我发现,将样式应用于没有文本的asp:CheckBox时,对齐方式会出现问题-对我来说,对齐方式变成了底部对齐,我无法使用垂直对齐方式对其进行修复,因此我不想离W3School的摘要太远了。

<!--How the style was applied to the asp:CheckBox -->

<asp:Label ID="chkB_SMOKER_FLAG_Container" class="chkboxContainer" runat="server" AssociatedControlID="chkB_SMOKER_FLAG">
  <asp:CheckBox ID="chkB_SMOKER_FLAG" runat="server" Text="" AutoPostBack="True" OnCheckedChanged="OnSmokerFlagChanged"></asp:CheckBox>
  <span class="checkmark"></span>
</asp:Label>

1 个答案:

答案 0 :(得分:0)

我最终发现,如果我做了&nbsp;在HTML标记中,所有内容都会正确对齐。请参见下面的代码段。

<asp:Label ID="chkB_SMOKER_FLAG_Container" class="chkboxContainer" runat="server" AssociatedControlID="chkB_SMOKER_FLAG">
  <asp:CheckBox ID="chkB_SMOKER_FLAG" runat="server" Text="" AutoPostBack="True" OnCheckedChanged="OnSmokerFlagChanged"></asp:CheckBox>
  <span class="checkmark"></span>&nbsp;
</asp:Label>

我意识到我必须在很多地方这样做,并且还觉得将来从事代码工作的开发人员可能会错过这种解决方法,因此我找到了避免使用&nbsp;的方法。通过CSS样式:

.chkboxContainer:after {
  /*Do not remove. This keeps the custom styled asp:checkbox alignment correct when there's no label*/
  content: '\200b';
}

'\ 200b'是零宽度的空间。

我确定这是解决此问题的众多方法之一,但是我尝试了很多对我正在使用的应用程序中的复选框的所有不同实现都无效的方法。有些使用'Input type = checkbox',有些使用'asp:checkbox'等。我的目标是不要与W3School的代码段相距太远。