CSS Animation triggers text rendering change in Safari
薄荷新首页上周五内测,花哥反馈在 MacBook Safari 浏览器下 鼠标移动到第一个商品的时候后面几个商品的文字会加粗。这是什么鬼???
待我回到家打开笔记本,鼠标蹭蹭蹭的发现问题远不止如此:
- Banner 以下的文字都会间歇性闪(chou)烁(feng)。
- 鼠标移动到某个产品图上,在该元素以后区域的文字也会闪烁,而之前的元素都没问题。
通过现象可以观察到文字闪烁基本和动画有关,Banner 轮播图用到了 transform: translate3d,产品展示图缩放效果用到了transform: scale
那么除了动画以外影响字体渲染的CSS属性还有这些:
font-style //字体样式
font-variant //字体大小写
font-weight //字体重量值
font-size //字体大小
font-family //字体型号
font-smoothing //字体平滑属性
因为目前新版用到 BootStrap3,先确认下是自己的代码引发的问题还是 BootStrap3,带着疑问去了躺 BootStrap3 官网,找到轮播图的例子:
http://v3.bootcss.com/examples/carousel/
如果你在Mac Safari 打开上面链接会发现轮播图下方的文字都会随着动画而闪烁。
接下来分析是什么原因导致了这个bug的出现,通过对比分析发现在 BootStrap3 中 container 和 row 元素都用到了 position:relative 属性,而这两个元素都是嵌套使用,那么通过最简代码来复现该问题:
html
<div class="box">
<p>CSS Animation triggers text rendering change in Safari</p>
</div>
<div class="animation"></div>
<div class="box">
<p>CSS Animation triggers text rendering change in Safari</p>
</div>
css
<style scoped="scoped">
.animation {
width: 100px;
height: 100px;
background-color: gray;
-webkit-transition:all 0.35s ease-in-out;
}
.animation:hover {
-webkit-transform: rotate(360deg);
}
.box, .box > p {
font-size: 20px;
position: relative;
}
</style>
上面的例子中,当鼠标滑动到 animation 元素上,后面的 box 就会出现文字闪烁,而之前的元素没有问题。
触发 transform +transition 属性的元素原本只会影响自身的字体渲染,从动画开始到结束,分别经历 Subpixel rendering -> Grayscale rendering -> Subpixel rendering,所以会出现闪烁现象,我们一般通过对自身设置 -webkit-backface-visibility: hidden 来解决。但是在Mac Safari 下还会影响其后面嵌套两层以上CSS position取值为 relative、absolute 元素字体的渲染。
解决方案
// W3C官方已经废弃该属性
-webkit-font-smoothing: subpixel-antialiased
相关问题的回答
- How to prevent Webkit text rendering change during CSS
transition - Prevent flicker on webkit-transition of webkit-transform
- CSS Animation triggers text rendering change in Safari & Chrome (Webkit)
- Safari bug: text suddenly appears bold after css animation completes (antialiasing change)
相关问题的延伸阅读
CSS Animation triggers text rendering change in Safari的更多相关文章
- 利用 CSS animation 和 CSS sprite 制作动画
CSS3 大大强化了制作动画的能力,但是如果要做出图案比较复杂的动画,选择 GIF 依然是一个不错的选择.今天给大家介绍一个使用 CSS animation 配合雪碧图(CSS sprite)来制作动 ...
- CSS animation & CSS animation 101
CSS animation 101 如何为 Web 添加动画效果. https://github.com/cssanimation/css-animation-101 https://github.c ...
- OpenCascade Chinese Text Rendering
OpenCascade Chinese Text Rendering eryar@163.com Abstract. OpenCascade uses advanced text rendering ...
- Using native GDI for text rendering in C#
Using native GDI for text rendering in C# Aug12by Arthur To complete my previous post on text render ...
- CSS魔法堂:更丰富的前端动效by CSS Animation
前言 在<CSS魔法堂:Transition就这么好玩>中我们了解到对于简单的补间动画,我们可以通过transition实现.那到底多简单的动画适合用transtion来实现呢?答案就是 ...
- No.6 - 利用 CSS animation 制作一个炫酷的 Slider
*{ margin:; padding:; } div{ margin: auto; width: 800px; height: 681px; position: relative; overflow ...
- [CSS3] Make a One-time CSS Animation that Does Not Revert to its Original Style
We'll add animation to patio11bot using CSS keyframes. When defining a CSS animation, you can add it ...
- 百度前端技术学院2018笔记 之 利用 CSS animation 制作一个炫酷的 Slider
前言 题目地址 利用 CSS animation 制作一个炫酷的 Slider 思路整理 首先页面包含三种东西 一个是type为radio的input其实就是单选框 二是每个单选框对应的label 三 ...
- css animation @keyframes 动画
需求:语音播放动态效果 方案:使用如下图片,利用 css animation @keyframes 做动画 html <span class="horn" :class=& ...
随机推荐
- C++ 函数特性_参数默认值
函数参数默认值写法 有默认参数值的参数必须在参数表的最右边 ,) // 这是正确的写法 , int k) // 这是错误写法 先声明,后定义 在写函数时要先在代码前面声明,然后再去定义. 函数默认参数 ...
- native关键字(本地方法)、 java调用so动态链接库
Java native关键字 一. 什么是Native Method 简单地讲,一个Native Method就是一个java调用非java代码的接口.一个Native Method是这样一个ja ...
- RPC框架之Thrift分析(转)
一.简介 1.Thrift是Facebook开发的跨语言的RPC服务框架.随后贡献给Apache开源组织.成为RPC服务的主流框架. 2.特点: 优点: 跨语言,支持java.c/c ...
- C# JSON 序列化
1.JavaScriptSerializer System.Web.Extensions.dll System.Web.Script.Serialization命名空间 Serialize Deser ...
- Git---远程仓库之从远程仓库克隆03
远程仓库之添加远程仓库02我们讲了先有本地库,后有远程库,如何关联远程库. 现在假设我们从零开发,那么最好的方式是先创建远程库,然后,从远程库克隆. 首先,登录GitHub,创建一个新的仓库,名字叫g ...
- 在MarkDown中插入数学公式对照表(持续更新)
目录 在MarkDown中可以插入数学公式,但是在博客园和有道云笔记之中的数学公式插入方式略有不同(博客园需要先在后台选项中开启插入数学公式选项): 代码 行内公式 整行公式 博客园 $数学公式$ $ ...
- js中元素结点的引用
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- 119. Pascal's Triangle II (Graph; WFS)
Given an index k, return the kth row of the Pascal's triangle. For example, given k = 3, Return [1,3 ...
- rabbitmq的简单介绍二
上一篇博客我们没有介绍完rabbitmq,今天我们接着上一篇的博客继续介绍rabbitmq 这边的博客的内容如下 1.组播,对指定的队列设置关键词,通过关键词来控制消息的分发 2.更加细致的组播 先来 ...
- java 实现模拟浏览器 访问网站
一般的情况下我们都是使用IE或者Navigator浏览器来访问一个WEB服务器,用来浏览页面查看信息或者提交一些数据等等.所访问的这些页面 有的仅仅是一些普通的页面,有的需要用户登录后方可使用,或者需 ...