当前位置: 首页 > 面试题库 >

为什么[CSS功能]在[浏览器]中不起作用,但在其他浏览器中又起作用呢?

吕灿
2023-03-14
问题内容

我尝试transition在Firefox 15上使用,即使它在其他版本的Firefox和其他浏览器(例如Chrome和Safari)上也无法使用。

当我使用Firefox的检查器查看属性时,将transition被删除并显示错误“无效的属性值”。MDN和caniuse表示Firefox
4及更高版本支持该功能!

#mydiv {
    transition: width 1s; /* Did I do this wrong? */
    background: #f00;
    width: 100px; height: 100px;
}
#mydiv:hover { width: 200px }

怎么会有时性能喜欢transitionanimation一些浏览器的工作和在其他无效?

免责声明 :这是所有问题的规范重复,可通过添加供应商前缀来完全解决。堆栈溢出的问题应该 不会 是这个广泛除非元,随后创建了一个规范的答案讨论这样一个为。


问题答案:

虽然它并非总是如此,最常见的原因,就像一个属性的一个transitionanimation工作在某些浏览器,而不是其他人是因为
供应商前缀

什么是供应商前缀?

在引入Firefox第4版时,CSS过渡模块规范是“工作草案”。在规范最终定稿之前(实际上,这是达到候选推荐标准的时间),浏览器供应
在属性,值和@ -rules中添加了 供应商前缀 ,以防止在规范更改时出现兼容性问题。

供应商前缀正是它们的名称所描述的-
属性或值的特定于供应商的(供应商是指开发浏览器的公司)前缀。它们通常以每种浏览器的特定方式实现,因为属性或值仍处于“候选推荐”阶段之前的许多实验阶段之一,在“候选推荐阶段”中,它们被认为已准备好实现。

最常见的是-moz-(Mozilla Firefox),-webkit-(Chrome,Safari等)和-ms-(Microsofthtml" target="_blank">Internet Explorer),但还有更多。

我什么时候需要使用它们?

这完全取决于您要提供的浏览器,使用的属性和值以及开发网站的时间。有些网站试图保留最新列表,但它们并不总是准确或保持最新状态。

以下是一些最常见的前缀属性和值。如果您的项目不支持该属性右侧的注释中提到的浏览器,则无需将其包含在CSS中。

转场

无前缀属性有时带有前缀等价物-webkit-transition

为了获得完整的浏览器支持,必须执行以下操作:

.foo {
    -webkit-transition: <transition shorthand value>; /* Safari 3.1-6, Chrome 1-25, Old Android browser, Old Mobile Safari, Blackberry browser */
    -moz-transition: <transition shorthand value>;    /* Firefox 4-15 */
    -o-transition: <transition shorthand value>;      /* Old opera */
    transition: <transition shorthand value>;         /* Modern browsers */
}

请注意,-ms-存在的前缀transition,但是仅由不再起作用的IE10的预发布版本实现,因此不再需要它。它在IE10
RTM和更高版本中没有前缀实现。

变身

.foo {
    -webkit-transform: <transform-list>; /* Chrome 21-35, Safari, iOS Safari, Opera 22, many mobile browsers */
    -ms-transform: <transform-list>;     /* IE9 */
    transform: <transform-list>;
}

动画制作

动画需要有前缀属性 前缀,像这样相应的关键帧:

.foo {
  -webkit-animation: bar; /* Safari 4+ */
  -moz-animation: bar;    /* Fx 5+ */
  -o-animation: bar;      /* Opera 12+ */
  animation: bar;         /* IE 10+, Fx 16+ */
}

@-webkit-keyframes bar { /* Keyframes syntax */ }
@-moz-keyframes bar { /* Keyframes syntax */ }
@-o-keyframes bar { /* Keyframes syntax */ }
@keyframes bar { /* Keyframes syntax */ }

弹性盒

值也可以加上前缀,例如flexbox。:为了获得最大的浏览器兼容性,具体Flexbox的-属性,如ordinal-groupflex-flowflex-directionorderbox-orient,等需要在某些浏览器作为前缀 ,除了 以下几点:

.foo {
    display: -webkit-box;  /* OLD - iOS 6-, Safari 3.1-6 */
    display: -moz-box;     /* OLD - Firefox 19- (buggy but mostly works) */
    display: -ms-flexbox;  /* TWEENER - IE 10 */
    display: -webkit-flex; /* NEW - Chrome */
    display: flex;         /* NEW, Spec - Opera 12.1, Firefox 20+ */

    -webkit-box-flex: <flex shorthand value>;
    -moz-box-flex: <flex shorthand value>;
    -webkit-flex: <flex shorthand value>;
    -ms-flex: <flex shorthand value>;
    flex: <flex shorthand value>;
}

计算

.foo {
    width: -webkit-calc(<mathematical expression>); /* Chrome 21, Safari 6, Blackberry browser */
    width: -moz-calc(<mathematical expression>);    /* Firefox <16 */
    width: calc(<mathematical expression>);         /* Modern browsers */
}

渐变色

有关更多信息,请参见CSS技巧上的CSS渐变。

.foo {
    background-color: <color>; /* Fallback (could use .jpg/.png alternatively) */
    background-image: url(bar.svg); /* SVG fallback for IE 9 (could be data URI, or could use filter) */  
    background-image: -webkit-gradient(linear, left top, right top, from(<color-stop>), to(<color-stop>)); /* Safari 4, Chrome 1-9, iOS 3.2-4.3, Android 2.1-3.0 */  
    background-image: -webkit-linear-gradient(left, <color-stop>, <color-stop>); /* Safari 5.1, iOS 5.0-6.1, Chrome 10-25, Android 4.0-4.3 */  
    background-image: -moz-linear-gradient(left, <color-stop>, <color-stop>); /* Firefox 3.6 - 15 */
    background-image: -o-linear-gradient(left, <color-stop>, <color-stop>); /* Opera 11.1 - 12 */
    background-image: linear-gradient(to right, <color-stop>, <color-stop>); /* Opera 15+, Chrome 25+, IE 10+, Firefox 16+, Safari 6.1+, iOS 7+, Android 4.4+ */
}

注意,leftto right代表同一个方向,左到右的,因此leftto left相反
的方式。

边界半径(大多数情况下不需要)

.foo {
    -webkit-border-radius: <length | percentage>; /* or iOS 3.2 */
    -moz-border-radius: <length | percentage>;    /* Firefox 3.6 and lower */
    border-radius: <length | percentage>;
}

盒子阴影(在大多数情况下不需要)

.foo {
    -webkit-box-shadow: <box-shadow shorthand value>; /* iOS 4.3 and Safari 5.0 */
    -moz-box-shadow: <box-shadow shorthand value>;    /* Firefox 3.6 and lower */
    box-shadow: <box-shadow shorthand value>;
}

如何使用JavaScript实施它们?

要在JavaScript中访问带前缀的属性和事件,请使用与CSS前缀等效的camelCase。同样对于事件侦听器foo.addEventListener('webkitAnimationIteration',bar )foo也是DOM对象document.getElementsById('foo'))也是如此。

foo.style.webkitAnimation = '<animation shorthand value>';
foo.style.mozAnimation = '<animation shorthand value>';
foo.style.oAnimation = '<animation shorthand value>';


 类似资料:
  • 我已经设置了一个包含3列的css网格来显示我们的投资组合。我找到了一个Firefox、Internet Explorer和Safari的工作代码。但是在Chrome上,它并没有显示我的网格,所有的图片都在下面。见网址:http://www.ddw-sanitair.be 此外,它不接受“display:none”类的一些图片,因此双/三图像... 有什么建议吗? 我尝试添加网格自动行:270px;

  • 问题内容: 我在使用SWT浏览器组件时遇到了一些麻烦。我正在运行带有Sun的Java SE 1.6的Ubuntu 11.04 AMD64和Eclipse 3.7 我的问题是我的浏览器无法初始化。当我使用SWT.NONE标志实现时,出现错误 然后当我尝试使用SWT.MOZILLA标志时,我得到 我怀疑这部分是因为我正在使用XULRunner2,但是我更喜欢使用WebKit,在Eclipse 3.7中

  • 问题内容: 在我制作的html页面中,我尝试使用html和css使div可点击。在一些主要的浏览器(Chrome,Firefox,Opera,Safari)以及HTC手机中,该功能都可以完美运行,但是当我尝试在Iphone上对其进行测试时,我发现它根本无法正常工作。复选框本身甚至无法选择。 这是我的代码(除了在Iphone上工作): HTML: CSS: 因此,正如您所看到的,我使用的技术基本上只

  • 问题内容: 在iPhone / iPad / iPod上的Webkit中,点击元素时不会触发为标签的:active伪类指定样式。我该如何触发?示例代码: 问题答案: … 仅应用了一次,而不是每个按钮元素都可以修复页面上的所有按钮。另外,您可以使用这个名为’Fastclick’的小型JS库。它可以加快触摸设备上的点击事件,也可以解决此问题。

  • 问题内容: alert(myVar1); return false; var myVar1; 上面的代码在IE,FF和Opera中引发错误,表明return语句必须包含在函数中。但它可以在Safari和Chrome中运行(显示)。 以上代码已在全局范围内编写。以外的所有功能。 任何原因? 问题答案: 在javaScript中,将变量移到脚本顶部,然后运行。所以当你运行它会做 这是因为javascr

  • 问题内容: 如何使元素位置固定在 移动浏览器(iOS和Android)中 ?元素仍在ios <5和android <4中使用以下代码滚动 问题答案: 在大多数的旧版本中不工作和。我已经在大多数移动浏览器中尝试了此修复程序,并且没有任何插件即可正常运行。 采用