浏览器特定的前缀,在转换时具有 CSS 过渡

2024-03-09

根据 caniuse.com,对于同时支持 CSS 的浏览器transition和CSStransform,组合起来至少有三种不同的类型:

  1. 那些需要-webkit-两者的前缀transition and transform(例如 Safari 6、Android 浏览器
  2. 那些只需要-webkit-前缀于transform(例如 Chrome 3x)。
  3. 那些不需要前缀的浏览器(例如 FF 和 IE10/11)。

我怎样才能安全地写我的transition样式以便在每种类型中正确解析它们?我看到两个选择:

-webkit-transition: -webkit-transform 300ms;
        transition: -webkit-transform 300ms, transform 300ms;

or

-webkit-transition: -webkit-transform 300ms;
        transition: -webkit-transform 300ms;
        transition: transform 300ms;

现在,由于类型 2 和类型 3 浏览器,我需要有一个无前缀转换both -webkit-transform and transform。第一个选项的问题是我担心类型 2 和类型 3 浏览器将无法解析第二行,因为它们始终包含无法识别的属性。问题是,浏览器如何处理 a 中的无效属性transition--忽略整个transition样式还是只是跳过无效属性?

我认为可以通过将其分成两个属性来缓解这一问题,这样如果一个属性不可解析,它将被忽略。除了第二个选项有点冗长之外,我仍然想知道,在类型 2 浏览器的情况下,第三个选项是否transition将无法解析并“重置”transition回到零。

一般来说,它们的表现有什么想法吗?另外,当 Chrome 浏览器使用时,其中哪些是未来兼容的et al.切换自-webkit-transform到无前缀transform?


更新通知不幸的是,事实证明,在撰写本文时,Safari 并未遵循下面 W3 规范中概述的标准,并且在转换后同时包含 webkit 前缀属性和无前缀属性将导致它崩溃并且根本无法动画化。我仍在探索这个问题,寻找一个好的通用解决方案,但看起来在 Safari 解决这个问题之前,可能没有一个解决方案可以在任何地方以及所有未来的属性上工作,而无需使用 JavaScript 动态调整每个浏览器的 CSS 规则。


如果将无法识别或无效的属性添加到过渡属性列表中,则列表中的有效属性仍会添加(Safari 除外,请参阅上面的通知)。

根据 CSS Transitions w3 规范第 2.1 节:

如果列出的标识符之一不是可识别的属性名称或不是可动画属性,则实现仍必须使用列表中各自索引处的持续时间、延迟和计时函数来启动列表中可动画属性的转换,以用于 '过渡持续时间”、“过渡延迟”和“过渡计时函数”。

CSS 过渡的 W3 规范 http://www.w3.org/TR/css3-transitions/

如果您采用以下样式,尽管前面有一个无效且无法识别的属性,但 width 属性仍将具有动画效果。

transition: unrecognizedProperty 2s, width 2s;

如果您遵循一个转换规则和另一个转换规则(具有相同的前缀或缺少前缀),则第一条规则将被覆盖即使第二条规则仅具有右侧列出的无效属性,也不再适用。

如果您尝试以下样式,宽度将不会动画,因为第一条规则将被第二条规则覆盖,由于无法识别“unrecognizedProperty”,因此第二条规则实际上不执行任何操作。

transition: width 2s;
transition: unrecognizedProperty 2s;

基于此,我相信你的第一种方法是正确的。

-webkit-transition: -webkit-transform 300ms;
        transition: -webkit-transform 300ms, transform 300ms;

第一条规则仅在 -webkit-transition 被识别时才适用,在这种情况下,由于转换是在转换后出现的,因此它肯定必须带有前缀,并且我们可以省略无前缀的转换属性(尽管我认为这不会损害别管它)。仅当识别到无前缀转换时才会应用第二条规则,在这种情况下,将应用浏览器识别的右侧属性,即使列表中的其他属性未被识别。

您的第二种方法是有缺陷的,因为无论右侧的任何属性是否被识别,第二条规则总是会被第三条规则覆盖。

我相信确保您在所有有能力的浏览器上应用 2s 转换进行转换的浏览器前缀属性的完整列表如下,但请阅读下面的原理,因为它只是碰巧对于这个属性对来说如此简洁:

-webkit-transition: -webkit-transform 2s;
   -moz-transition:    -moz-transform 2s;
     -o-transition:      -o-transform 2s;
        transition:         transform 2s;
  1. 请注意,没有 -ms-transition 这样的东西,但有一个 -ms-transform。话虽这么说,过渡直到 10 才添加到 IE,其中 -ms-transform 也因无前缀的转换而过时。因此,对于 IE,我们需要的唯一规则是“transition:transform”。

  2. 我还要注意的是,任何时候我们有一个用于转换的浏览器前缀(

  3. 由于 Firefox 在无前缀转换的同时发布了无前缀转换,因此我们不需要在无前缀“transition”的右侧添加前缀“-moz-transform”。

  4. 除了 -o- 之外,Opera 在某些时候还使用 -webkit- 前缀进行转换,但是在版本 12.1 中开始使用无前缀转换之后,他们在版本 15 中开始使用 -webkit-transform,因此我们不需要包含 -webkit -o-转换后进行-transform。另外,由于 Opera 在 12.1 版本之后仅使用了 prefixless 或 -webkit-transform,因此我们不需要在无前缀转换之后包含 -o-transform。

  5. 在这种情况下,我们不必将 -webkit-transform 包含在无前缀转换的右侧,因为仅识别 -webkit-tranform 的浏览器将回退到 -webkit-transition 并仍然应用此属性。


如果您不介意 CSS 的长度,那么以下应该是一个安全的通用解决方案,用于确保正确的浏览器过渡前缀和前缀右手属性。更新通知事实证明,这种方法在 Safari 上可能不安全,因为它们不遵循 W3 标准,即忽略过渡右侧无法识别的属性(如果有一个前缀和一个没有前缀)。

-webkit-transition: -webkit-property,
                            property;
   -moz-transition:    -moz-property,
                            property;
    -ms-transition:     -ms-property,
                            property;
     -o-transition:      -o-property,
                    -webkit-property,
                            property;
        transition: -webkit-property,
                       -moz-property,
                        -ms-property,
                         -o-property,
                            property;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

浏览器特定的前缀,在转换时具有 CSS 过渡 的相关文章

  • 为什么使用 iPhone 或 iOS 设备在“iframe”中查看“position:fixed”时不起作用?

    我研究过 stackoverflow 似乎position fixed在 iOS 移动设备的 iframe 中 https stackoverflow com questions 15874910 position fixed and if
  • 使用内联样式有哪些风险?

    A 内容安全政策 https developer mozilla org en US docs Web HTTP CSP with a default src or style src指令将阻止内联样式应用于
  • 如果一个设置多个html标签的id属性值相同,会发生什么?

    我最近看到一个html页面 我认为几个html标签的id是相同的 然后我意识到id是唯一的 但这提出了一个问题 如果页面实际上使用了多个标签 会发生什么 正如我听说每个 html 标签 如果有的话 的 id 属性必须是唯一的 现在我想知道如
  • 编辑类名中带有空格的元素的 css 样式

    我正在创建一个 tumblr 我必须编写一个外部 CSS 文件 但我在编辑 post 元素的 css 样式时遇到问题 这是它的结构 li class post quote other code li 问题是类名中有空格 我如何创建一个 CS
  • Gmail 无法在电子邮件上正确呈现字体

    我已经建立了一个 html 电子邮件并使用了 Google 字体 我已使用以下方法将字体包含在 head 标签中 if mso endif 并使用字体 即我这样做了
  • 为什么网格项目不居中?

    由于某种原因 两个输入范围使网格中的前两项偏离中心 我假设这是因为它们的影子 DOM 样式 事实真的是这样吗 有谁知道为什么范围使项目 A 和 B 偏离中心 这是一个代码笔 https codepen io tOkyO1 pen QOeKL
  • 在按钮之间添加空间?

    嗨 我这里有一个代码 除了一件事之外 一切都很完美 代码中每个按钮之间没有空格 我尝试过 margin 但不幸的是它是一个无序列表 所以我有点困惑 我将添加或替换什么以在两个按钮之间留出空间 帮助
  • 引导标签输入宽度

    我正在尝试使用引导程序标签输入 http timschlechter github io bootstrap tagsinput examples 以模态中包含的形式 像这样 div class form group div
  • 如何在jqplot中显示饼图之外的标签?

    Jqplot 有如下图表 jqplot 图表 http www jqplot com tests pie donut charts php 我的问题是如何在 a 之外显示标签jqplot chart像下面这样high chart 高图表可以
  • 将父容器扩展至 100% 高度以容纳浮动内容

    我正在为一个客户项目而苦苦挣扎 我的全部divs 没有绝对定位 height 100 for html body 和容器divs 但静态内容未达到其内容 在 910 像素处 我可以将溢出属性更改为auto 并且背景会继续向下到内容的末尾 但
  • 设置浏览器窗口最小化的最小尺寸限制?

    有没有办法在所有浏览器中手动设置浏览器窗口的最小尺寸 你可以试试 body min width 600px 一旦视口小于 600 像素 您将得到一个水平滚动条 这仅适用于支持 min width CSS 属性的现代浏览器 我认为不可能限制用
  • 使用 CSS 自定义字体?

    我见过一些在其网站上使用自定义字体的新网站 除了常规的 Arial Tahoma 等 他们支持大量的浏览器 如何做到这一点 同时 如果可能的话 还会阻止人们免费下载该字体 一般来说 您可以使用自定义字体 font face在你的 CSS 中
  • 调整文本区域大小

    我需要使用文本区域来显示一些文本 问题是 如果我放置 4 5 行文本 就会出现滚动条 如何使用 CSS HTML 使文本区域与其内容一样大 没有滚动条 文本区域不需要动态更改其大小 我仅使用它来显示文本 我也可以使用禁用的文本区域 我希望文
  • 防止浮动换行,直到元素达到最小宽度

    我有可变宽度的 HTML 布局 内容左侧有一个固定宽度的菜单 div 可变宽度 由 css max width 和 min width 设置 对于非常窄的浏览器窗口 我希望内容包裹在菜单下方 我目前通过设置来实现这一点float left在
  • 动画进度元素值

    我有一个progress元素 该元素如下所示 div class container div div div
  • 如何将此 HTML 表格布局解决方案转换为浮动 div 解决方案?

    我经常需要列出各种尺寸的项目images在左边和text在右边 像这样 替代文本 http www deviantsart com upload 7s01l5 png http www deviantsart com upload 7s01
  • 如何为背景图像添加边距?

    我想向背景图像添加边距 以便将其与屏幕中间保持距离 但将其添加到该类中会为整个主体添加边距 body poppage background url Imagenes tip3 png 50 200px no repeat E2E4E9 我怎
  • 三级十进制有序列表 CSS

    我有一个 html 中的三级有序列表 我想为其提供如下样式 1 Item 1 1 1 Item 2 1 1 1 Item 3 下一个 plunker 中有一个 html 示例 http plnkr co edit DqhZ5pJILTUHG
  • 显示覆盖以覆盖整个页面

    我有一个正在加载的网络应用程序iframe 我需要显示一个覆盖 div 来覆盖整个页面 问题是叠加层当前仅显示在iframe区域而不覆盖整个页面 我们的应用程序 子应用程序 是加载的一组应用程序的一部分iframe 你可以做这样的事情 di
  • HTML 默认图像大小

    我在我的代码上显示 3 张图片 图片具有不同的尺寸 宽度和高度 div class row div class col lg 12 h2 class page header Gallery h2 div div class col md 4

随机推荐