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

如何用CSS为JSON数据设置粗体?自定义属性无效怎么办

如何用CSS为D3渲染的JSON数据文本设置粗体样式

首先明确说:你不能直接给JSON文件添加样式,JSON是纯数据格式,它只负责存储数据,不包含任何样式定义——你加的properties.style字段只是普通的自定义数据,D3或者浏览器不会自动识别并应用它。

不过你完全可以通过D3读取这个自定义数据,然后在渲染文本元素的时候动态设置CSS样式,具体做法如下:

方法1:直接通过D3的.style()方法设置字体粗细

假设你在示例中是这样渲染文本的(类似原示例的文本绑定逻辑):

// 原文本渲染代码
node.append("text")
  .attr("dy", ".35em")
  .text(function(d) { return d.name; });

你可以修改这段代码,读取JSON里的properties字段,动态设置font-weight:

node.append("text")
  .attr("dy", ".35em")
  .text(function(d) { return d.name; })
  .style("font-weight", function(d) {
    // 检查是否有bold样式标记,注意properties是数组,要取第一个元素的style
    return d.properties && d.properties[0] && d.properties[0].style === "bold" ? "bold" : "normal";
  });

方法2:用CSS类控制(更推荐,样式和逻辑分离)

先在你的CSS里定义一个粗体类:

.bold-node-text {
  font-weight: bold;
}

然后在D3代码里,根据JSON数据给文本元素添加/移除这个类:

node.append("text")
  .attr("dy", ".35em")
  .text(function(d) { return d.name; })
  .classed("bold-node-text", function(d) {
    return d.properties && d.properties[0] && d.properties[0].style === "bold";
  });

优化建议:简化JSON结构

你当前的properties是数组,其实如果只是标记是否加粗,完全可以把JSON结构改得更简洁,比如直接加一个isBold字段:

{"name":"AI.AI","size":3812,"isBold":true,"imports":[]}

这样D3代码会更简洁:

// 用style的方式
.style("font-weight", d => d.isBold ? "bold" : "normal")

// 或者用classed的方式
.classed("bold-node-text", d => d.isBold)

总结一下:JSON只存数据,样式要通过前端代码(D3+CSS)来应用,核心就是在数据绑定的时候,根据JSON里的自定义字段动态设置元素样式或类名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:04:16