You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何复用CSS类并修改content属性以避免代码重复?

复用右上角标签CSS样式的方案

当然可以最大化复用现有样式,避免代码重复,以下是几种实用方案:

1. 基础CSS分组选择器(兼容性最好)

把所有相同的样式抽出来,用逗号分隔多个选择器统一设置,只单独定义每个标签的content内容:

/* 通用容器样式:所有标签容器共享 */
.foo, .bar, .baz {
    position: relative;
    border: 1px solid #ccc;
    padding: 1em 1em 0.5em 1em;
    border-radius: 4px;
}

/* 通用伪元素样式:所有右上角标签共享 */
.foo:after, .bar:after, .baz:after {
    position: absolute;
    top: 0;
    right: 0;
    padding: 3px 7px;
    font-size: 12px;
    font-weight: bold;
    background-color: #f5f5f5;
    border: 1px solid #ccc;
    color: #9da0a4;
    border-radius: 0 4px 0 4px;
    border-width: 0 0 1px 1px;
}

/* 单独定义每个标签的文字内容 */
.foo:after { content: "Foo"; }
.bar:after { content: "Bar"; }
.baz:after { content: "Baz"; }

对应的HTML:

<div class="foo">Hello</div>
<p></p>
<div class="bar">Mama!</div>
<p></p>
<div class="baz">World!</div>

2. HTML data属性+CSS attr()(最灵活)

用HTML的自定义data-*属性存储标签内容,CSS通过attr()直接读取,新增标签时不用修改CSS,只需要在HTML里加属性:

/* 通用容器样式 */
.label-box {
    position: relative;
    border: 1px solid #ccc;
    padding: 1em 1em 0.5em 1em;
    border-radius: 4px;
}

/* 伪元素直接读取data-label属性的值作为内容 */
.label-box:after {
    content: attr(data-label);
    position: absolute;
    top: 0;
    right: 0;
    padding: 3px 7px;
    font-size: 12px;
    font-weight: bold;
    background-color: #f5f5f5;
    border: 1px solid #ccc;
    color: #9da0a4;
    border-radius: 0 4px 0 4px;
    border-width: 0 0 1px 1px;
}

对应的HTML:

<div class="label-box" data-label="Foo">Hello</div>
<p></p>
<div class="label-box" data-label="Bar">Mama!</div>
<p></p>
<div class="label-box" data-label="Baz">World!</div>

3. CSS变量(适合动态场景)

用CSS自定义属性(变量)存储标签内容,需要新增标签时只需要定义新的变量值,样式部分完全复用:

/* 通用容器样式 */
.label-box {
    position: relative;
    border: 1px solid #ccc;
    padding: 1em 1em 0.5em 1em;
    border-radius: 4px;
}

/* 伪元素使用变量作为内容 */
.label-box:after {
    content: var(--label-content);
    position: absolute;
    top: 0;
    right: 0;
    padding: 3px 7px;
    font-size: 12px;
    font-weight: bold;
    background-color: #f5f5f5;
    border: 1px solid #ccc;
    color: #9da0a4;
    border-radius: 0 4px 0 4px;
    border-width: 0 0 1px 1px;
}

/* 为不同标签定义变量值 */
.foo { --label-content: "Foo"; }
.bar { --label-content: "Bar"; }
.baz { --label-content: "Baz"; }

对应的HTML:

<div class="label-box foo">Hello</div>
<p></p>
<div class="label-box bar">Mama!</div>
<p></p>
<div class="label-box baz">World!</div>

内容的提问来源于stack exchange,提问作者h q

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 12:52:49