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

Safari下summary标签::before伪元素搭配display flex失效求解决方案

问题产生原因

  • Safari 14.1及更早版本对<summary>元素的CSS布局支持存在原生缺陷:该版本内核会强制将<summary>元素的渲染模式锁定为内置list-item逻辑,即便显式声明display: flex也无法覆盖原生规则,导致所有flex相关属性(flex-direction、justify-content、gap等)全部失效,伪元素无法按预期排列。
  • 现有代码仅隐藏了::-webkit-details-marker,但Safari 14中<summary>的原生列表标记没有被完全清除,会额外挤占布局空间,进一步打乱排版。

效果参考:
Chrome V94运行效果
Safari V14.1运行效果

修复方案

方案1:嵌套内层容器实现flex布局(兼容性最优,推荐)

不直接给<summary>设置flex属性,在<summary>内部新增一层容器承载内容,给内层容器设置flex规则,可兼容所有支持<details>/<summary>的浏览器版本。

修改后的HTML代码(Liquid):

<div class="product-size-guide product-metafield">
  <details>
      <summary>
        <!-- 新增内层flex容器 -->
        <div class="summary-inner">
          <p class="product-metafield-title">Size guide</p>
        </div>
      </summary>
    <div class="size-guide-content">
      <img src="{{product.metafields.my_fields.size_guide | img_url: '500x'}}"
        alt="Size guide" id="sizeGuideContent">
    </div>
  </details>
</div>

调整后的SCSS代码:

.product-metafield{ 
    summary{
        list-style: none; /* 彻底清除原生列表标记 */
        
        &::-webkit-details-marker{
            display: none;
        }
        /* 兼容Firefox的标记隐藏 */
        &::marker{
            content: "";
            display: none;
        }

        /* 给内层容器设置flex属性 */
        .summary-inner{
            display: -webkit-box; 
            display: -ms-flexbox; 
            display: -webkit-flex; 
            display: flex;
            flex-direction: row-reverse;
            justify-content: flex-end;
            gap: 10px;
            width: 100%;
        }
    }

    /* 伪元素绑定到内层容器,布局规则正常生效 */
    .summary-inner::before{
        font-size: 23px;
        line-height: 25px;
        content: "\002B"; // 加号
    }

    details[open] .summary-inner::before{
        font-size: 23px;
        line-height: 25px;
        content: "\2212"; // 减号
    }
}

方案2:浮动定位实现(无需修改HTML结构)

如果无法修改Shopify模板的HTML结构,可以放弃flex布局,改用浮动实现相同的排版效果:

.product-metafield{ 
    summary{
        list-style: none;
        &::-webkit-details-marker{
            display: none;
        }
        &::marker{
            content: "";
            display: none;
        }
        /* 清除浮动 */
        &::after{
            content: "";
            display: table;
            clear: both;
        }
    }

    summary::before{
        font-size: 23px;
        line-height: 25px;
        content: "\002B";
        float: left;
        margin-right: 10px; /* 替代gap属性实现间距 */
    }

    details[open] summary::before{
        content: "\2212";
    }
    
    .product-metafield-title{
        float: left;
        margin: 0;
        line-height: 25px; /* 和伪元素行高对齐,避免错位 */
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 22:27:01