导航

萌即是正义!时不时分享一些ACG活动记录与有趣代码的小站!

侧边栏
最新评论
广树管理员
2025-11-21 19:57
@石樱灯笼:那就少子老龄化吧
石樱灯笼
2025-11-21 13:13
@广树:这玩意叫少子化,不叫老龄化。
广树管理员
2025-11-20 22:03
虽然不是真正意义上的闭校。但是作为作品中的那所学校因为少子老龄化最后并校与更名,还是有些可惜的。 很想去,但是似乎知道的有些太迟了呢。
广树管理员
2025-11-20 11:26
@小彦:淡定,日本民众根本不关心这些
广树管理员
2025-11-20 11:26
@老张博客:是呀
攻略中
全民高尔夫环球之旅
暂无评分
Steam全民高尔夫环球之旅
2025年9月07日 12时 ~ 攻略中
已累计游玩2个月16天
《全民高尔夫 环球之旅》除了能体验到与过去作品相同的乐趣、爽快与深奥之外, 还有着以精美图像设计而成、个性丰富的角色们与以世界各地为主题的球场, 以及能让所有人热血沸腾的全新模式等等,是本系列的全新力作!
ToHeart
暂无评分
SteamToHeart
2025年6月26日 19时 ~ 攻略中
已累计游玩4个月29天
AQUAPLUS推出的“温暖人心的校园恋爱游戏”将以高清全3D形式焕新归来!
fault - StP - LIGHTKRAVTE
暂无评分
Steamfault - StP - LIGHTKRAVTE
2025年5月29日 20时 ~ 攻略中
已累计游玩5个月27天
全球累计销量超过50万份的“fault”系列最新作!故事的舞台是一个融合了奇幻与科幻的超前世界——卢森海德王国。本作讲述了生活在此地的一个平凡又平庸的究极普通市民——名为果子的少年的故事。
PSN奖杯卡

PSN奖杯卡

归档
赞助商广告

解决Safari以及iOS上的其他浏览器子元素不受border-radius作用的问题

作者:广树时间:2024-01-16 18:00:00分类:CSS/HTML

在使用 Safari 浏览器查看 HTML 时,即使在父元素中设置了 overflow: hidden 和 border-radius,子元素仍然可能超出 border-radius 的范围而显示的问题。

问题:

尽管在父元素中设置了 overflow: hidden 和 border-radius 以应用圆角样式于子元素,但在桌面版 Safari 或 iOS 上的 Chrome 等浏览器中,子元素仍然可能在 border-radius 的范围之外显示。

例如,通过以下方式将 <img> 放在 <div> 中,设置 overflow: hidden 和 border-radius 就能复现这个现象。

HTML:

<div class="parent">
  <img src="avatar.jpg" width="100" height="100" />
</div>

CSS:

.parent {
  overflow: hidden;
  border-radius: 50%;
}

当然,如果直接在要应用样式的元素上设置 border-radius,则会按预期显示(理所当然)。因此,问题只在设置了 overflow: hidden 和 border-radius 的父元素时才会出现。

我在以下浏览器版本中能够复现这个现象:

  • macOS Safari: 15.4 (17613.1.17.1.13)
  • iOS Chrome: 100.0.4896.85
  • iOS Brave: 1.37 (22.4.6.8)

原因:

直接进入结论,似乎 Safari(准确说是 WebKit)的一个 bug(?)是问题的原因。在 WebKit Bugzilla 的 Bug 140535 中称其为“仅在非堆叠上下文中发生”。

140535 – Border-radius clip of non-stacking composited descendant doesn't work

为了验证这一点,如果添加生成堆叠上下文的 CSS 属性,问题将得到解决。


解决方法:

因为问题似乎仅在非堆叠上下文中发生,所以可以通过有意地生成堆叠上下文来避免。具体而言,有以下几种方法可以在不影响外观的情况下生成堆叠上下文:

方法 A) 设置 isolation: isolate

.parent {
  isolation: isolate;
}

方法 B) 设置 position 和 z-index

.parent {
  position: relative;
  z-index: 0;
}

方法 C) 设置 transform

.parent {
  transform: translateZ(0);
}

从本质上来说,“生成堆叠上下文”的意思来说,最直接的可能是方法 A) 中的 isolation: isolate。如果没有其他特殊原因,可能最好选择 A)。有关生成堆叠上下文的其他方法,如果感兴趣,可以查阅 MDN 页面:

The stacking context - CSS: Cascading Style Sheets | MDN

翻译自:《Safari や iOS 上のブラウザで border-radius で子要素をマスクできない問題》

donate.png


telegram banner (1).png


1210 x 50(蓝底).png

cloudcone