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

iOS专属CSS开发疑问:为何使用-webkit-touch-callout:none?

iOS专属CSS适配常见问题解答

1. 为什么用-webkit-touch-callout: none做特性检测?

你不用真的把它设为none,这里只是用这个私有属性来检测当前浏览器是否是iOS Safari(或基于WebKit的iOS浏览器)——因为这个属性是iOS WebKit独有的特性,其他系统浏览器不支持。

你用inherit也能生效,是因为只要浏览器识别这个属性,不管赋值是什么,@supports都会判定为支持,从而执行里面的样式。开发者习惯写none只是约定俗成,本质是利用这个属性的存在来做iOS环境判断,和最终是否修改长按菜单无关。

2. 不写@supports(-webkit-touch-callout:none)会有什么影响?

你的代码里用了-webkit-fill-available和stretch这两个属性:

  • -webkit-fill-available是iOS WebKit的私有属性,用来替代100vh解决iOS状态栏/导航栏遮挡的问题;
  • 如果不套@supports,非iOS浏览器会忽略这两个私有属性,继续用min-height:100vh,看起来好像没问题?但其实有些旧版安卓浏览器可能会识别stretch属性,导致布局异常;
  • 更关键的是,@supports能确保只有真正支持iOS专属特性的浏览器才执行这段修正代码,避免给其他系统带来潜在的样式冲突。

你的代码逻辑说明

#main {
    min-height: 100vh;
}
/* iOS only */
@supports (-webkit-touch-callout: none) { 
    #main {
        min-height: -webkit-fill-available;
        min-height: stretch;
    }
}

这段代码的核心逻辑是:

  • 先给所有浏览器设置基础的100vh高度;
  • 用@supports检测iOS环境,给iOS设备替换成适配全屏的-webkit-fill-available(兼容旧版iOS)和标准属性stretch(适配新版iOS),解决100vh在iOS中被状态栏/底部导航栏挤占的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 05:15:47