该CSS网格布局模块,不仅可以解决的布局问题的一个庞大的,而且我们一直在一些很好的旧顽强问题处理时间长,如造型复选框标签。
虽然是一个相对简单的方法,以风格标签当它出现后的复选框,就当标签出现不是那么容易之前它。
没有CSS网格的复选框样式
自从我们在某处阅读有关标签的内容之后,开发人员就一直在为复选框添加样式标签。该技术是CSS可以拥有的强大动力的主要和古老的例子之一。
这是您可能已经熟悉的代码,它在选中的复选框后为标签设置样式:
1个
2
|
< input type = "checkbox" > < label >label for the checkbox</ label > |
1个
2
3
|
input:checked + label { /* style me */ } |
一个风格的标签后复选框可能是这样的(不过,你可以使用其他的样式规则以及):
上面的CSS代码使用该键标记的相邻同级组合器+
。当复选框处于:checked
状态,一个元件之后它(通常是一个标签)可使用此方法的样式。
如此简单有效的技术!什么能可能出错呢?没什么-直到您要在复选框之前显示标签。
相邻的同级组合器选择下一个元素;这意味着标签必须位于HTML源代码中的复选框之后。
因此,要使标签出现在屏幕上的所属复选框之前,我们不能仅将其移动到源代码中该复选框之前,因为CSS中不存在以前的同级选择器。
剩下的只有一个选择:使用或或另一个具有某种动能功能的CSS属性来重新定位复选框和标签,以便标签显示在屏幕上复选框的左侧。transform
position
margin
传统方法的问题
前面提到的技术没有什么大不了的,但是在某些情况下可能效率很低。我指的是复选框和标签的重新排列位置不再起作用的情况。
例如,考虑响应式。您可能必须根据显示的设备调整复选框的大小或位置。发生这种情况时,您也需要重新定位标签,因为不会因复选框的重新定位/调整大小而对标签进行自动重新对齐。
如果我们可以为复选框和标签提供一些可靠的布局,而不是将它们粗略地放置在页面上,则可以消除此缺点。
但是,几乎所有布局系统(例如表或列)都要求您在源代码中的复选框之前添加标签,以使其在屏幕上以相同的方式显示。这是我们不希望做的事情,因为标签上的下一个元素选择器将停止工作。
另一方面,CSS Grid是一种布局系统,不依赖于源代码中元素的位置/顺序。
网格布局的重新排序功能有意仅影响视觉渲染,保留语音顺序和基于源顺序的导航。这使作者可以在不影响源顺序的情况下操纵视觉呈现…– CSS网格布局模块第1层,W3C
因此,CSS网格是对出现在 checkbox 之前的标签进行样式设置的理想解决方案。
CSS网格的复选框样式
让我们从HTML代码开始。复选框和标签的顺序将与以前相同。我们只是将它们都添加到网格中。
1个
2
3
4
|
< div id = "cbgrid" > < input type = "checkbox" > < label >label for the checkbox</ label > </ div > |
随附的CSS如下:
1个
2
3
4
5
6
7
8
9
10
11
|
#cbgrid { display : grid; grid-template-areas: "left right" ; width : 150px ; } input[type=checkbox] { grid-area: right ; } label { grid-area: left ; } |
我已经写了一篇有关该主题的详细文章,因此我不会深入介绍CSS网格的工作原理,您可以在此处阅读。但是,有一些基础知识:该display: grid
属性将元素转换为网格容器,grid-area
标识元素所属的网格区域,并grid-template-areas
形成由不同网格区域组成的网格布局。
在上面的代码中,有两个网格区域:"left"
和"right"
。它们组成一个网格行的两列。复选框属于该"right"
区域,标签属于"left"
。这里是他们如何看待在屏幕上:
由于我们没有更改复选框和标签在源代码中的相对位置,因此我们仍然可以使用相邻的同级组合器:
1个
2
3
|
input:checked + label { /* style me */ } |
注意网格项总是被阻塞的 ; 它与周围的框(称为网格级框)一起出现。如果您不希望这样(例如,用于标签),则在该项目上放置一个包装纸(将其包装在另一个元素中),然后将该包装纸放入网格区域。
就是这样,伙计们。CSS网格有望帮助您确定那些厚脸皮复选框的布局。