我可以使用单个选择器来定位所有<H>标签吗?


154

我想定位页面上的所有h标签。我知道你可以这样

h1,
h2,
h3,
h4,
h5,
h6 {
  font: 32px/42px trajan-pro-1,trajan-pro-2;
}

但是使用高级CSS选择器有没有更有效的方法呢?例如:

[att^=h] {
  font: 32px/42px trajan-pro-1,trajan-pro-2;
}

(但显然这是行不通的)


8
选择时这变得越来越乏味h1 a:hover, h2 a:hover, h3 a:hover, h4 a:hover, ...
Vortico

Answers:


127

不可以,在这种情况下,您需要使用逗号分隔的列表。


13
对于那些从Google登陆的人来说,想知道逗号分隔列表在CSS 中的含义是什么,这是OP给出的第一个示例。也就是说,h1, h2, h3 {}
bluesmonk

44

这不是基本的CSS,但是如果您使用的是LESS(http://lesscss.org),则可以使用递归操作:

.hClass (@index) when (@index > 0) {
    h@{index} {
        font: 32px/42px trajan-pro-1,trajan-pro-2;
    }
    .hClass(@index - 1);
}
.hClass(6);

Sass(http://sass-lang.com)将允许您管理此问题,但不允许递归;它们具有@for以下实例的语法:

@for $index from 1 through 6 {
  h#{$index}{
    font: 32px/42px trajan-pro-1,trajan-pro-2;
  }
}

如果您没有使用像LESS或Sass这样的可编译为CSS的动态语言,则一定要检查以下选项之一。它们确实可以简化CSS开发并使之更加动态。


12
我很确定手动输入比在CSS中创建h1,h2,h3之类的for循环...需要更少的时间,空间..更清楚地了解现在和以后。
穆罕默德·乌默尔

¯_(ツ)_ /¯ "can" != "should"。即使这样,Sass / LESS选项也为您提供了普通CSS无法提供的可扩展性。想想类似的东西font-size: (48px / @index)
史蒂夫

如果它最适合您的需求就可以。如前面的评论中所述,如果由于某种原因需要在LESS或Sass中对索引进行操作,则此方法可以使您轻松进行操作。根据标头号,您的实现可以是动态的。
史蒂夫

对于那些不想集成scss/sass到他们的项目中但想与其产生css联系的scss/sass人们,可以使用称为sassmeister的
Sameer Khan

37

如果您使用的是SASS,也可以使用以下mixin:

@mixin headings {
    h1, h2, h3,
    h4, h5, h6 {
        @content;
    }
}

像这样使用它:

@include headings {
    font: 32px/42px trajan-pro-1, trajan-pro-2;
}

编辑:我个人最喜欢的方法是,可以选择在每个标题元素上扩展一个占位符选择器。

h1, h2, h3,
h4, h5, h6 {
    @extend %headings !optional;
}

然后,我可以定位所有标题,就像定位任何单个类一样,例如:

.element > %headings {
    color: red;
}

这是从SCSS到SCSS + Compass的很小的一步:罗盘样式.org / reference / compass / helpers / selectors-标题($ from,$ to)
强制性2014年

1
哇,两年后才碰到..并且编辑看起来很不错!我确定我了解!optional扩展标志的用途吗?而且似乎无法在Google上找到任何东西……
比尔



3

所有h标签(h1,h2等)的jQuery选择器都是“:header”。例如,如果要使用jQuery将所有h标签变成红色,请使用:

$(':header').css("color","red")


您能否仅将特定div内的所有标题定位?例如$('.my_div :header').css("color","red")
user1063287

1

要使用普通CSS解决此问题,请在h1..h6元素的祖先中查找模式:

<section class="row">
  <header>
    <h1>AMD RX Series</h1>
    <small>These come in different brands and types</small>
  </header>
</header>

<div class="row">
  <h3>Sapphire RX460 OC 2/4GB</h3>
  <small>Available in 2GB and 4GB models</small>
</div>

如果可以发现模式,则可以编写针对您想要的选择器。给定以上示例,h1..h6可以通过组合CSS3中的:first-child:not伪类来确定所有元素的位置,所有现代浏览器中都可以使用,如下所示:

.row :first-child:not(header) { /* ... */ }

将来,随着Web标准随着时间的推移不断发展,高级伪类选择器(例如:has()和)和后续同级组合器~)将提供更多控制。



1

如果您想使用单个选择器来定位它们,则可以将文档中的所有标题分类。

<h1 class="heading">...heading text...</h1>
<h2 class="heading">...heading text...</h2>

和在CSS

.heading{
    color: #Dad;
    background-color: #DadDad;
}

我并不是说这始终是最佳做法,但是它可能会很有用,而且在许多方面,更容易实现语法定位,

因此,如果您在html中为所有h1到h6提供相同的.heading类,则可以为使用该CSS工作表的所有html文档修改它们。

有利的是,与“ section div文章h1等{}”相比,全局控制更多,

不利的一面是,与其在css中调用所有选择器,不如在html中输入更多内容,但我发现在html中拥有一个以所有标题为目标的类可能是有益的,只是要注意CSS,因为冲突可能来自


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.