当前位置: 首页 > 文档资料 > Less 入门教程 >

父选择器(Parent Selectors)

优质
小牛编辑
153浏览
2023-12-01

上一个章节中我们学习了属性的合并,这个章节我们学习一个有关选择器的操作 – 父选择器。

其功能与其名称相同,就是用符号代表其父选择器。

1. 语法定义

官方定义: Referencing parent selectors with &

慕课解释: 用 符号引用父选择器。

2. 语法详情

在嵌套结构中 & 表示父选择器。比如:

a {
  color: blue;
  &:hover {
    color: green;
  }
}

在上述代码中,:hover 前面加上了 & 符号,编译后则等同于 a:hover

输出代码如下:

a {
  color: blue;
}

a:hover {
  color: green;
}

嵌套结构中默认编译规则为 .parentSelector .childSelector ,即父选择器和子选择器之间使用空格分隔开的。

所以在未添加 & 的情况下, :hover 输出的样式选择器会是 a :hover , 这与我们预期的结果是不一致的。

3. 使用场景

使用 & 运算符可以满足我们使用默认规则以外的其他方式组合嵌套的需求,在修改类或伪类并应用于现有选择器时最常用。

4. 示例

4.1 多个 & 组合

我们可以使用多个 & 运算符并使用其他运算符连接起来,便于重复引用父选择器而无需重复其名称。

  • 输入代码
.link {
  & , & {
    color: red;
  }

  && {
    color: blue;
  }

  &, &ish {
    color: cyan;
  }
}
  • 输出代码
.link , .link {
  color: red;
}

.link.link {
  color: blue;
}

.link, .linkish {
  color: cyan;
}

4.2 更改选择器顺序

在某些情况下我们需要将选择器放在继承的(父)选择器之前。 此时可以通过将 & 运算符放在当前选择器后面来完成。

  • 输入代码
.header {
  border-radius: 5px;
  .no-borderradius & {
    background-image: url('images/button-background.png');
  }
}
  • 输出代码
.header {
  border-radius: 5px;
}

.no-borderradius .header {
  background-image: url('images/button-background.png');
}

4.3 排列组合

& 运算符可用于生成逗号分隔列表中选择器的所有可能的排列组合。

  • 输入代码
p, a, ul, li {
  border-top: 2px dotted #366;
  & + & {
    border-top: 0;
  }
}

将会输出所有可能的 16 中排列组合。

  • 输出代码
p,
a,
ul,
li {
  border-top: 2px dotted #366;
}
p + p,
p + a,
p + ul,
p + li,
a + p,
a + a,
a + ul,
a + li,
ul + p,
ul + a,
ul + ul,
ul + li,
li + p,
li + a,
li + ul,
li + li {
  border-top: 0;
}

Tips

在嵌套结构中, 运算符代表所有父选择器,而不仅仅是最接近的父选择器,比如:

  • 输入代码
.grand {
  .parent {
    & > & {
      color: red;
    }
  }
}

上述代码中的 & 运算符不仅仅指的是 .parent 这个父选择器,而是 .grand .parent

  • 输出代码
.grand .parent > .grand .parent {
  color: red;
}

小结

这个章节我们介绍了父选择器的使用,父选择器就是用 & 符号去表示所在区域的父选择器,是一种父选择器的替代写法,可以组合出多种使用方法。