我正在尝试找到一种只应用于Safari的CSS方法,但我找到的所有方法都同时适用于Chrome。我知道这两个浏览器目前都是基于WebKit,但我在Chrome和Safari中遇到了div对齐的问题;它们显示不同。
我一直在尝试使用这个方法,但它也会影响Chrome:
@media screen and (-webkit-min-device-pixel-ratio:0) {
#safari { display: block; }
}
有没有其他只适用于Safari的方法呢?
我正在尝试找到一种只应用于Safari的CSS方法,但我找到的所有方法都同时适用于Chrome。我知道这两个浏览器目前都是基于WebKit,但我在Chrome和Safari中遇到了div对齐的问题;它们显示不同。
我一直在尝试使用这个方法,但它也会影响Chrome:
@media screen and (-webkit-min-device-pixel-ratio:0) {
#safari { display: block; }
}
有没有其他只适用于Safari的方法呢?
https://browserstrangeness.bitbucket.io/css_hacks.html#safari
并且镜子!
https://browserstrangeness.github.io/css_hacks.html#safari
注意:过滤器和编译器(如SASS引擎)期望标准的“跨浏览器”代码,而不是像这样的CSS hack。这意味着它们将重写、破坏或删除这些hack,因为这不是hack的作用。其中很多都是非标准的代码,经过精心编写,只针对特定的浏览器版本,如果被修改,就无法正常工作。如果您希望在这些浏览器上使用它,您必须在任何过滤器或编译器之后加载您选择的CSS hack。这似乎是显而易见的,但是有很多人混淆了这一点,他们没有意识到通过这种软件运行它们会取消一个hack的效果,而这种软件并不是为此目的而设计的。 自从6.1版本以后,Safari已经发生了变化,许多人已经注意到了这一点。 请注意:如果您在iOS上使用Chrome(至少在iOS版本6.1及更高版本)(现在也包括Firefox),并且您想知道为什么没有任何黑客似乎能将Chrome与Safari分离开来,那是因为iOS版本的Chrome使用的是Safari引擎。它使用的是Safari的黑客,而不是Chrome的黑客。有关更多信息,请参阅此处:https://allthingsd.com/20120628/googles-chrome-for-ios-is-more-like-a-chrome-plated-apple/。Firefox for iOS于2015年秋季发布。它也响应Safari的黑客,但不响应Firefox的黑客,与iOS Chrome相同。 另外:如果您尝试了一个或多个黑客,并且无法使它们正常工作,请发布示例代码(最好是测试页面)-您正在尝试的黑客,以及您使用的浏览器(确切版本!)和设备。没有这些额外的信息,我或其他人都无法为您提供帮助。 通常情况下,这只是一个简单的修复或者一个缺失的分号。对于CSS来说,通常是这样,或者是代码在样式表中的顺序问题,如果不是CSS错误的话。请在测试网站上测试这些技巧。如果在那里有效,那意味着这个技巧确实适用于您的设置,但还有其他问题需要解决。这里的人们真的很乐意帮助您,或者至少指引您正确的方向。 那么,下面是一些适用于较新版本Safari的技巧,您可以尝试使用: 首先,您应该尝试这个,因为它适用于当前的Safari版本,并且仅适用于Safari:This one still works properly with Safari 17.0 (Fall-2023):
/* Safari 7.1+ */
_::-webkit-full-page-media, _:future, :root .safari_only {
color:#0000FF;
background-color:#CCCCCC;
}
为了覆盖更多的版本,包括6.1及以上,目前您需要使用下一对CSS Hack。一个用于处理6.1-10.0版本,另一个用于处理10.1及以上版本。
所以,这是我为Safari 10.1+设计的一个解决方案:
这里的双重媒体查询非常重要,请不要删除它。
/* Safari 10.1+ */
@media not all and (min-resolution:.001dpcm) { @media {
.safari_only {
color:#0000FF;
background-color:#CCCCCC;
}
}}
如果SCSS或其他工具集在嵌套媒体查询方面出现问题,请尝试使用这个方法。
/* Safari 10.1+ (alternate method) */
@media not all and (min-resolution:.001dpcm)
{ @supports (-webkit-appearance:none) {
.safari_only {
color:#0000FF;
background-color:#CCCCCC;
}
}}
这个下一个适用于6.1-10.0,但不适用于10.1(2017年3月底更新)。
这个我经过多个月的测试和实验创建的黑客,结合了多个其他黑客的方法。
注意:像上面一样,双媒体查询不是偶然的——它排除了许多无法处理媒体查询嵌套的旧浏览器。一个“and”后面缺少的空格也很重要。毕竟,这是一个黑客……也是唯一一个在6.1和所有更新的Safari版本上都有效的黑客。还请注意,如下评论所述,这个黑客是非标准的CSS,必须在过滤器之后应用。像SASS引擎这样的过滤器会重写、撤销或完全删除它。
如上所述,请查看我的测试页面,以查看它的工作状态(无需修改!)
以下是代码:
/* Safari 6.1-10.0 (not 10.1) */
@media screen and (min-color-index:0) and(-webkit-min-device-pixel-ratio:0)
{ @media {
.safari_only {
color:#0000FF;
background-color:#CCCCCC;
}
}}
请继续阅读以下内容,以获取更多关于特定版本Safari的CSS信息。
/* Safari 11+ */
@media not all and (min-resolution:.001dpcm)
{ @supports (-webkit-appearance:none) and (stroke-color:transparent) {
.safari_only {
color:#0000FF;
background-color:#CCCCCC;
}
}}
Safari 11.0 专用:
/* Safari 11.0 (not 11.1) */
html >> * .safari_only {
color:#0000FF;
background-color:#CCCCCC;
}
适用于Safari 10.0的一个:
/* Safari 10.0 (not 10.1) */
_::-webkit-:host:not(:root:root), .safari_only {
color:#0000FF;
background-color:#CCCCCC;
}
稍微修改适用于10.1版本(仅限):
/* Safari 10.1 */
@media not all and (min-resolution:.001dpcm)
{ @supports (-webkit-appearance:none) and (not (stroke-color:transparent)) {
.safari_only {
color:#0000FF;
background-color:#CCCCCC;
}
}}
Safari 10.0(非iOS设备):
/* Safari 10.0 (not 10.1) but not on iOS */
_::-webkit-:-webkit-full-screen:host:not(:root:root), .safari_only {
color:#0000FF;
background-color:#CCCCCC;
}
Safari 9 CSS Hacks:
一个适用于Safari 9.0及以上版本的简单支持特性查询的hack:
@supports (-webkit-hyphens:none)
{
.safari_only {
color:#0000FF;
background-color:#CCCCCC;
}
}
一个适用于Safari 9.0及以上版本的简单下划线技巧:
_:not(a,b), .safari_only {
color:#0000FF;
background-color:#CCCCCC;
}
另一个适用于Safari 9.0及以上版本的选项:
/* Safari 9+ */
_:default:not(:root:root), .safari_only {
color:#0000FF;
background-color:#CCCCCC;
}
还有另一个支持功能的查询:
/* Safari 9+, < 13.1 */
@supports (-webkit-marquee-repetition:infinite) and (object-fit:fill) {
.safari_only {
color:#0000FF;
background-color:#CCCCCC;
}
}
适用于Safari 9.0-10.0的一个版本:
/* Safari 9.0-10.0 (not 10.1) */
_::-webkit-:not(:root:root), .safari_only {
color:#0000FF;
background-color:#CCCCCC;
}
Safari 9现在包含了功能检测,所以我们现在可以使用它了...
/* Safari 9 */
@supports (overflow:-webkit-marquee) and (justify-content:inherit)
{
.safari_only {
color:#0000FF;
background-color:#CCCCCC;
}
}
现在只针对iOS设备。如上所述,由于iOS上的Chrome是基于Safari的,所以当然也会受到影响。
/* Safari 9.0 (iOS Only) */
@supports (-webkit-text-size-adjust:none) and (not (-ms-ime-align:auto))
and (not (-moz-appearance:none))
{
.safari_only {
color:#0000FF;
background-color:#CCCCCC;
}
}
适用于Safari 9.0+,但不适用于iOS设备。
/* Safari 9+ (non-iOS) */
_:default:not(:root:root), .safari_only {
color:#0000FF;
background-color:#CCCCCC;
}
而且还适用于Safari 9.0-10.0,但不适用于iOS设备。
/* Safari 9.0-10.0 (not 10.1) (non-iOS) */
_:-webkit-full-screen:not(:root:root), .safari_only {
color:#0000FF;
background-color:#CCCCCC;
}
以下是将6.1-7.0和7.1+区分开来的一些技巧。
为了得到正确的结果,这些技巧还需要结合多个方法的组合使用:
/* Safari 6.1-7.0 */
@media screen and (-webkit-min-device-pixel-ratio:0) and (min-color-index:0)
{
.safari_only {(;
color:#0000FF;
background-color:#CCCCCC;
);}
}
自从我指出了如何阻止iOS设备的方法,这里是针对非iOS设备的修改版Safari 6.1+黑客攻击方式。
/* Safari 6.1-10.0 (not 10.1) (non-iOS) */
@media screen and (min-color-index:0) and(-webkit-min-device-pixel-ratio:0)
{ @media {
_:-webkit-full-screen, .safari_only {
color:#0000FF;
background-color:#CCCCCC;
}
}}
使用它们的方法:
<div class="safari_only">This text will be Blue in Safari</div>
以下是基本信息,再次请查看我的测试页面以获取Chrome的各个具体版本,但这些信息适用于Chrome的一般情况。Chrome的版本是45,Dev和Canary版本目前已更新到47。
我在browserhacks上发布的旧媒体查询组合仍然适用于Chrome 29+:
/* Chrome 29+ */
@media screen and (-webkit-min-device-pixel-ratio:0) and (min-resolution:.001dpcm)
{
.chrome_only {
color:#0000FF;
background-color:#CCCCCC;
}
}
一个 @supports 特性查询在 Chrome 29+ 上运行良好... 这是我们在 Chrome 28+ 上使用的修改版本。Safari 9、即将发布的 Firefox 浏览器和 Microsoft Edge 浏览器无法识别此查询。
/* Chrome 29+ */
@supports (-webkit-appearance:none) and (not (overflow:-webkit-marquee))
and (not (-ms-ime-align:auto)) and (not (-moz-appearance:none))
{
.chrome_only {
color:#0000FF;
background-color:#CCCCCC;
}
}
以前,Chrome 28及更高版本很容易被定位。这是我在看到它被包含在其他CSS代码块中(最初并不是作为CSS hack)后发送给browserhacks的一个例子,我意识到它的作用,所以我提取了相关部分以供我们使用:
[注意:]下面这种较旧的方法现在可以识别Safari 9和Microsoft Edge浏览器,而不需要上述更新。即将发布的Firefox和Microsoft Edge版本已经在它们的编程中添加了对多个-webkit- CSS代码的支持,Edge和Safari 9都已经添加了对@supports特性检测的支持。Chrome和Firefox之前已经包含了@supports。
/* Chrome 28+, Now Also Safari 9+, Firefox, and Microsoft Edge */
@supports (-webkit-appearance:none)
{
.chrome_and_safari {
color:#0000FF;
background-color:#CCCCCC;
}
}
Chrome版本22-28的区块(如果需要支持旧版本)也可以通过我上面发布的Safari组合黑客技巧来进行定位。
/* Chrome 22-28 */
@media screen and(-webkit-min-device-pixel-ratio:0)
{
.chrome_only {-chrome-:only(;
color:#0000FF;
background-color:#CCCCCC;
);}
}
NOTE: If you are new, change class name but leave this the same-> {-chrome-:only(;
像上面的Safari CSS格式化技巧一样,这些可以按照以下方式使用:
<div class="chrome_only">This text will be Blue in Chrome</div>
所以你不需要在这篇帖子中搜索,这是我的实时测试页面链接:
https://browserstrangeness.bitbucket.io/css_hacks.html#safari
【或者镜子】 测试页面还有许多其他内容,特别是基于版本的内容,可以帮助您进一步区分Chrome和Safari,并且还有许多针对Firefox、Microsoft Edge和Internet Explorer浏览器的技巧。 注意:如果某些内容对您不起作用,请首先查看测试页面,然后提供示例代码和您尝试的技巧,以便其他人能够帮助您。有一种方法可以从Chrome中过滤出Safari 5+:
@media screen and (-webkit-min-device-pixel-ratio:0) {
/* Safari and Chrome */
.myClass {
color:red;
}
/* Safari only override */
::i-block-chrome,.myClass {
color:blue;
}
}
仅限 Sarari
.yourClass:not(:root:root){
/* ^_^ */
}
适用于iOS 16和macOS Ventura:
@supports (font: -apple-system-body) and (-webkit-appearance: none) {
.body {
background-color: red;
}
}
这个黑客技巧只适用于Safari 5.1-6.0版本,我刚刚测试成功了。
@media only screen and (-webkit-min-device-pixel-ratio: 1) {
::i-block-chrome, .yourcssrule {
your css property
}
}
@supports (-webkit-backdrop-filter: blur(1px)) {
.safari-only {
background-color: rgb(76,80,84);
}
}
对于那些想要在Safari 7.0及以下版本实施黑客攻击,而不是7.1及以上版本的人,请使用:
.myclass { (;property: value;); }
.myclass { [;property: value;]; }
var isSafari = /Safari/.test(navigator.userAgent) && /Apple Computer/.test(navigator.vendor);
if (isSafari) {
$('head').append('<link rel="stylesheet" type="text/css" href="path/to/safari.css">')
};
替换 (.myClass) 中的类
/* 仅适用于 Safari */
.myClass:not(:root:root) {
输入代码
}
https://www.bram.us/2021/06/23/css-at-supports-rules-to-target-only-firefox-safari-chromium/#safari
@supports (background: -webkit-named-image(i)) {
//
}
h1::after {
content: "No";
margin-left: .3em;
color: red;
}
@supports (background: -webkit-named-image(i)) {
h1::after {
content: "Yes";
color: green;
}
}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>JS Bin</title>
</head>
<body>
<h1>Safari?</h1>
</body>
</html>