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

如何根据指定元素可见性动态切换对应CSS规则的生效状态

实现方案

你可以根据兼容性需求选择以下两种方案:

方案1:纯CSS实现(优先推荐,代码量最少)

借助CSS :has() 伪类直接检测.text5的显隐状态,只有当.text5可见时才应用你写的响应式规则:

@media screen and (max-width: 820px) {
  /* 若外部JS通过类名控制显隐(比如加hidden类),用这个选择器 */
  .topbar:has(.text5:not(.hidden)) nav.container {
    flex-grow: 3;
  }
  /* 若外部JS直接修改内联style控制display:none,用这个选择器 */
  /*
  .topbar:has(.text5:not([style*="display: none"])) nav.container {
    flex-grow: 3;
  }
  */
}
  • 兼容性说明:Chrome 105+、Firefox 121+、Safari 15.4+均原生支持,不需要额外写JS。

方案2:JS动态控制(全版本兼容)

如果需要兼容老旧浏览器,通过JS监听.text5的状态动态切换CSS规则的生效状态:

  1. 首先修改原有CSS规则,加专属类作为开关:
@media screen and (max-width: 820px) {
  /* 只有body带enable-flex-grow类时规则才生效 */
  body.enable-flex-grow nav.container {
    flex-grow: 3;
  }
}
  1. 加入JS代码检测状态+监听变化:
const text5El = document.querySelector('.text5');
// 更新规则开关状态
const toggleFlexRule = () => {
  const isText5Visible = getComputedStyle(text5El).display !== 'none';
  document.body.classList.toggle('enable-flex-grow', isText5Visible);
};
// 页面加载时初始化一次
toggleFlexRule();
// 监听.text5的属性变化,应对外部JS修改它的显隐状态
const observer = new MutationObserver(toggleFlexRule);
observer.observe(text5El, {
  attributes: true,
  attributeFilter: ['style', 'class'] // 只监听和显隐相关的属性,降低性能消耗
});
// 可选:如果需要窗口大小变化时同步更新,加入这行
window.addEventListener('resize', toggleFlexRule);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 22:03:03