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

CSS选择器:选中仅为唯一子元素且无非空格兄弟的<code>元素

问题:精准设置仅作为<p>唯一有效子元素的<code>为块级样式

原代码及问题现象

原HTML和CSS代码如下:

<!DOCTYPE html>
<html>
  <head>
  <style>
code {
  display: inline-block;
  padding: 0;
  color: red;
}
p > code:only-child {
  display: block;
  white-space: pre;
  padding: 20px;
  line-height: 125%;
  background: #eee;
  border: 1px solid #ccc;
  margin: 1em 0;
}

  </style>
  </head>
  <body>
<p>Assuming you have the IP <code>1.1.1.1</code>:</p>

<p><code>
echo "hello world";
echo "another command here";
echo "you are done";
</code></p>
</body></html>

当前问题:p > code:only-child选择器会错误选中那些<p>标签内还包含其他文本内容的<code>元素(比如示例中包裹IP的<code>),因为:only-child仅判断元素节点,忽略了<p>内的文本节点。

解决方案

利用CSS的:has()伪类结合文本节点选择,精准筛选出<p>内仅包含<code>元素(无其他非空格文本内容)的情况,同时保留其他<code>的行内块样式:

/* 基础样式:所有code默认行内块 */
code {
  display: inline-block;
  padding: 0;
  color: red;
}

/* 先给所有p下唯一的code元素设置块级样式 */
p > code:only-child {
  display: block;
  white-space: pre;
  padding: 20px;
  line-height: 125%;
  background: #eee;
  border: 1px solid #ccc;
  margin: 1em 0;
}

/* 重置那些p内包含非空格文本的code元素样式,恢复行内块 */
p:has(text()[not(normalize-space()='')]) > code:only-child {
  display: inline-block;
  padding: 0;
  background: transparent;
  border: none;
  margin: 0;
  white-space: normal;
}

说明

  • text()[not(normalize-space()='')]用于匹配<p>内存在非空格的文本节点
  • :has()伪类检测<p>是否包含上述文本节点,若包含则重置其内部的code:only-child样式
  • 该方案兼容现代主流浏览器(Chrome 105+、Firefox 121+、Safari 15.4+)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 17:42:45