@media screen and (-webkit-min-device-pixel-ratio:0) {
#safari { display: block; }
}
有人知道另外一个仅适用于野生动物园吗?
#1 楼
针对CATALINA和SAFARI 13的更新(2020年初更新)*
请-如果您遇到麻烦,并且真的想获得帮助或通过发表评论来帮助他人,发布您的浏览器和设备(带有浏览器和操作系统版本号的MacBook / IPad / etc ...!)
声称这些工作都不是准确的(实际上甚至是不可能的。)其中许多都不是真的' hacks,但是代码内置在Apple的Safari版本中。需要更多信息。我喜欢您来到这里的事实,并真的希望事情能为您解决。
如果您在从这里获取一些东西在您的网站上工作时遇到问题,请通过以下链接检查测试网站-如果被黑客入侵正在那里工作,但不在您的站点上,黑客不是问题-您的站点正在发生其他事情,通常只是如下所述的CSS冲突,或者也许没有任何作用,但是您可能没有意识到自己实际上不是完全使用Safari。请记住,此信息是为了帮助人们(希望)解决短期问题。
测试站点:
https://browserstrangeness.bitbucket.io/css_hacks.html#safari
和镜像!
https://browserstrangeness.github.io/css_hacks.html#safari
注意:过滤器和编译器(例如SASS引擎)需要标准的“跨浏览器”代码-而不是CSS hacks这些意味着它们将重写,销毁或删除这些hack,因为这不是hack所做的。其中大部分是非标准代码,这些代码经过精心设计,仅针对单个浏览器版本,如果更改了它们,将无法正常工作。如果您希望将它们与之配合使用,则必须在任何过滤器或编译器之后加载所选的CSS hack。这似乎是一个定理,但人们之间有很多困惑,他们没有意识到他们正在通过不是为此目的设计的软件运行黑客来消除黑客。
自6.1版以来,Safari发生了变化,正如许多人注意到的那样。
请注意:如果您在iOS上使用Chrome [以及现在也在使用Firefox](至少在iOS版本6.1和更高版本中),并且您想知道为什么这些黑客似乎都没有将Chrome与Safari分开,这是因为iOS的Chrome版本正在使用Safari引擎。它使用的是Safari hack,而不是Chrome hack。有关此信息的更多信息,请访问:https://allthingsd.com/20120628/googles-chrome-for-ios-is-more-like-a-chrome-plated-apple/ iOS版Firefox于2015年秋季发布。 Safari Hacks,但没有一个与iOS Chrome相同的Firefox。 )-您尝试的黑客行为,使用的浏览器(精确版本!)以及使用的设备。没有这些额外的信息,我或这里的任何其他人都无法为您提供帮助。
通常这只是简单的解决方法,或者缺少分号。使用CSS通常是样式表中列出的代码或代码顺序的问题,而不仅仅是CSS错误。请在测试站点的此处进行测试。如果能够在此处正常运行,则说明该hack确实适用于您的设置,但这是需要解决的其他问题。这里的人确实很乐于提供帮助,或者至少可以为您指明正确的方向。
这里的垃圾使您可以使用Safari的最新版本。
您应该尝试使用此工具首先,因为它涵盖了当前的Safari版本,并且仅适用于纯Safari:
此版本仍可与Safari 13(2020年初)一起正常使用:
/* Safari 7.1+ */
_::-webkit-full-page-media, _:future, :root .safari_only {
color:#0000FF;
background-color:#CCCCCC;
}
要涵盖6.1及更高版本,此时,您必须使用下一个CSS技巧。一个用于6.1-10.0的处理程序,一个用于处理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月下旬更新)
我通过结合多个其他hacks进行了数月的测试和试验,创建了此hack。
注意:以上,双重媒体查询并非偶然-排除了许多无法处理媒体查询嵌套的旧版浏览器。 -“ and”后的空格也很重要。毕竟,这是一种黑客行为,并且是目前唯一适用于6.1和所有较新Safari版本的黑客行为。另外请注意,如以下注释中所列,该hack是非标准的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设备): hacks:
一个简单的支持Safari 9.0及更高版本的功能查询hack:
/* 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.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+ */
_:default:not(:root:root), .safari_only {
color:#0000FF;
background-color:#CCCCCC;
}
Safari 9.0-10.0的一个:检测,因此我们现在就可以使用它。
/* Safari 9+ */
@supports (-webkit-marquee-repetition:infinite) and (object-fit:fill) {
.safari_only {
color:#0000FF;
background-color:#CCCCCC;
}
}
现在仅定位到iOS设备。如上所述,由于iOS上的Chrome根植于Safari,因此它当然也适用于该浏览器。还有一个适用于Safari 9.0-10.0但不适用于iOS设备的版本:
/* Safari 9.0-10.0 (not 10.1) */
_::-webkit-:not(:root:root), .safari_only {
color:#0000FF;
background-color:#CCCCCC;
}
以下是将6.1-7.0和7.1+分开的黑客为了获得正确的结果,这些还需要结合多种黑客手段:
/* Safari 9 */
@supports (overflow:-webkit-marquee) and (justify-content:inherit)
{
.safari_only {
color:#0000FF;
background-color:#CCCCCC;
}
}
由于我已经指出了阻止iOS设备的方法,因此这是针对非-iOS设备:
/* 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+ (non-iOS) */
_:default:not(:root:root), .safari_only {
color:#0000FF;
background-color:#CCCCCC;
}
通常[像这个问题]人们问有关Safari hack的原因主要是关于将其与Google Chrome分开(再次不是iOS!)。
发布替代方法可能很重要:如何也将Safari和Safari分别定位为目标,因此我在此处为您提供
这是基本知识,请再次在我的测试页上查看许多特定版本的Chrome,但这些通常涵盖了Chrome。 Chrome是45版,Dev和Canary版本目前是47版。
我放在浏览器上的旧媒体查询组合仍然仅适用于Chrome 29+:
/* Safari 9.0-10.0 (not 10.1) (non-iOS) */
_:-webkit-full-screen:not(:root:root), .safari_only {
color:#0000FF;
background-color:#CCCCCC;
}
An @支持功能查询,同样适用于Chrome 29+,也适用于...下面是我们用于Chrome 28+的功能的修改版。 Safari 9,即将到来的Firefox浏览器和Microsoft Edge浏览器都无法使用此功能。这是我看到它包含在其他CSS代码块中(最初不打算作为CSS hack)并意识到它的作用后发送给browserhacks的代码,因此我提取了相关的部分用于我们的目的:
[注意: ]现在,下面的这种较旧的方法会在没有上述更新的情况下显示Safari 9和Microsoft Edge浏览器。即将发布的Firefox和Microsoft Edge版本在其编程中增加了对多个-webkit- CSS代码的支持,Edge和Safari 9均增加了对@supports功能检测的支持。 Chrome和Firefox之前已包含@supports。
/* 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;
);}
}
Chrome版本22-28(如果需要以支持较早的版本)的块也可以针对我上面发布的Safari组合hacks进行定位:这些可以按以下方式使用:
/* 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;
}
}}
所以您不必在这篇文章中进行搜索,这是我的实时测试页:
https://browserstrangeness.bitbucket。 io / css_hacks.html#safari
[或镜像]
https://browserstrangeness.github.io/css_hacks.html#safari
测试页也有许多其他版本,特别是版本可以进一步
帮助您区分Chrome和Safari,以及许多针对Firefox,Microsoft Edge和Internet Explorer Web浏览器的黑客。
注意:如果某些内容对您不起作用,请检查测试请先进入页面,但请提供示例代码和您试图让任何人来帮助您的WHICH hack。
评论
只是想说测试页很棒。现在,我可以使用任何设备浏览到该站点,并查看哪些CSS规则适用!
– duyn9uyen
14-10-28在20:02
这是否适用于iPhone或iPad上的Safari?
– Greg Rozmarynowycz
2014年11月14日15:20
实际上,我只是结合以上示例和(; property:value;);解决了自己的问题。在下面,效果很好!
–mydoglixu
2014年12月3日20:49
此答案顶部的Safari 6.1+破解在Sass编译器中引发错误。有办法解决吗?
–黑鸟
15年4月17日在9:52
@Blackbird对不起,但是您不能编译或过滤这些hack,它会破坏它们。它们必须原样使用。 (在编译后将它们添加到完整的css文件中。)它们是非标准的事实是它们起作用的原因。
–杰夫·克莱顿(Jeff Clayton)
2015年4月17日在22:18
#2 楼
有一种方法可以从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;
}
}
评论
jeffclayton.wordpress.com/2014/07/22/…-我一直在从事许多工作(我为browserhacks.com测试和创建CSS hack)并在此处测试页面:browserstrangeness.bitbucket.org/css_hacks.html#webkit
–杰夫·克莱顿(Jeff Clayton)
2014年8月6日14:14
注意:在iOS [经过iOS 7测试]中,Chrome版本实际上正在运行safari引擎,因此在ipad或iphone上,您可以使用safari hacks。对于其他设备,它们是不同的。
–杰夫·克莱顿(Jeff Clayton)
2014年8月6日14:15
因此,答案中的代码基本上适用于Safari 5.0和6.0,而不适用于6.1+?
– Nic Cottrell
14-10-15在13:26
绝对准确地说,:: i-block-chrome,.myClass {}构造仅允许使用Safari 5.1-6.0,但也允许使用Chrome 10-24(不再使用旧版本的Chrome,因此不值得一提),但没有更新-Safari黑客通常会这样工作:一批处理5.1-6.0,另一批处理6.1-7.0,而更新的处理7.1-8.0。他们似乎要进行很多更新,直到他们决定转到与先前的.1版本非常接近的下一个数字版本。
–杰夫·克莱顿(Jeff Clayton)
14-10-19在7:38
在2013年回答这个问题时,Safari 6.1刚刚发布,因此没有足够的人看到浏览器已更改,因此这是当时最准确的浏览器。如果您需要更新的,请在下面查看我的答案。在提供它时,这是一个很好的答案。时间随时间变化,所以我发布了我的作品作为对此的更新。我花了几个月的时间来创建6.1-7.0和7.1-8.0。希望您喜欢结果。如果遵循该模式,则很有可能在发布8.1版时,也需要进行其他修改。再一次只有时间会证明一切。
–杰夫·克莱顿(Jeff Clayton)
14-10-19在7:52
#3 楼
仅Sarari.yourClass:not(:root:root){
/* ^_^ */
}
评论
想要添加一些解释吗?我可以直接输入root:root吗?
– ub
14年7月17日在7:36
此版本完全适用于Safari 3.x(和Chrome版本1.0,尽管现在没有人使用Chrome 1.0,因为它已经是30年代了...)
–杰夫·克莱顿(Jeff Clayton)
2014年8月6日13:29
这个现在也以Safari 9.0为目标,因此完整的统计信息已更新:/ * Chrome 1.0,Safari 3.X,Safari 9.0+ * /
–杰夫·克莱顿(Jeff Clayton)
15年9月24日在20:32
根据CSS Selectors 3规范,:not(:root:root)选择器无效(其中:not()只能包含一个简单的选择器,即一个类型选择器或一个ID或一个类或一个伪类),但是根据CSS选择器4完全有效(其中:not()接受选择器列表)。的确,目前只有Safari能够理解CSS Selectors 4语法,但是这种解决方案并非面向未来。
–伊利亚·斯特雷兹辛(Ilya Streltsyn)
16年7月7日在6:10
很少有骇客无法证明(并且很多实际的标准代码不是由于版本更改引起)的未来证明。最好的计划是,如果您要使用css hack,请仅将其用作临时修复程序,以便腾出时间进行更正式的跨浏览器更新。
–杰夫·克莱顿(Jeff Clayton)
17-4-28在18:12
#4 楼
此hack 100%仅适用于Safari 5.1-6.0。我已经成功测试了它。@media only screen and (-webkit-min-device-pixel-ratio: 1) {
::i-block-chrome, .yourcssrule {
your css property
}
}
评论
该hack实际上适用于不同版本的Chrome和Safari。它仅允许使用Chrome 10-24(没有人再使用了,这就是为什么有人列出它阻止了Chrome)和Safari 5.1-6.0。但是,它不适用于Safari 6.1和更高版本。当时没有更好的黑客手段。
–杰夫·克莱顿(Jeff Clayton)
2015年1月29日16:00
@ veronica-lotti,这也对我有用。你摆脱了我的头痛。谢谢
–安第·爱侣湾(Andhi Irawan)
18年5月11日在10:06
人-请注意。这些注释所描述的是一种在过去几年中不适用于Safari版本且仅适用于旧版本的方法。真正的意思是,互联网上的大多数人都不会获得您想要的结果,而只有拥有旧计算机的人才可以。这不适用于当前的操作系统。目前,大多数人都具有版本12和更高版本(不是6.0和更低版本,仅在Windows XP时代才是最新版本)。
–杰夫·克莱顿(Jeff Clayton)
18/12/27在1:04
#5 楼
将类替换为(.myClass)/ *仅限Safari * /
.myClass:not(:root:root){
enter code here
}
评论
这对于Safari来说是一个很好的选择-它针对的唯一其他浏览器是Chrome 1(再也没有人使用Chome 1了)
–杰夫·克莱顿(Jeff Clayton)
16/09/21在15:23
适用于未使用最新Mac的用户的确切规格:Chrome 1,Safari 3.X,Safari 9.0+(而非Safari 4-8)
–杰夫·克莱顿(Jeff Clayton)
16-09-21在15:35
这适用于最新版本的Safari 7+,据我所知应该是可接受的答案。
– Jason Engage
19/12/26在6:42
哇,在尝试了许多Safari浏览器黑客攻击后,这终于对我有用!!!
– FairyQueen
3月4日22:11
#6 楼
对于那些想为Safari 7.0及更低版本(而非7.1及更高版本)实施hack的用户-使用:.myclass { (;property: value;); }
.myclass { [;property: value;]; }
评论
我在Safari 7上进行了尝试,但无法正常工作。您能否提供一个可行的示例?
–多汁
2014年8月15日19:05
@Juicy:在browserhacks.com上有针对这些功能的实时测试-它们可以在Safari 7及更低版本,Chrome 28及更低版本上运行。 (如另一篇发布的iOS 7和8所述,也许其他人也将Safari引擎用于Chrome,因此iPad上的Chrome和Safari都是Safari)
–杰夫·克莱顿(Jeff Clayton)
2014-09-22 12:29
您可能已经在Safari 7.1(而不是Safari 7.0)中尝试过。它对7.0和更早版本有效,而不对7.1和较新版本有效。发布此答案时,7.0是Safari的最新版本,因此在那时是真实的。
–杰夫·克莱顿(Jeff Clayton)
14-10-19在6:10
适用于Windows的Safari(版本5.1.7(7534.57.2))
– java.web
15年1月8日,0:46
适用于Mac上的Safari(版本6.0.2(7536.26.17))
–梅林
17年11月17日在9:02
#7 楼
我喜欢使用以下方法: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">')
};
评论
此JavaScript hack方法需要安装JQuery软件包。
–杰夫·克莱顿(Jeff Clayton)
18-10-23在21:23
这被认为是极其糟糕的做法,浏览器嗅探非常容易出错,并导致大量误报。不要这样做,即使媒体查询嗅探也很脏,但是对于很小的更改也是可以接受的。
–万尼斯
19年3月12日在13:28
#8 楼
顺便说一下,对于只需要在移动设备上定位Safari的任何人,只需向该黑客添加媒体查询即可:@media screen and (max-width: 767px) {
_::-webkit-full-page-media, _:future, :root .safari_only {
padding: 10px; //or any property you need
}
}
不要忘了将.safari_only类添加到要定位的元素,例如:
<div class='safari_only'> This div will have a padding:10px in a mobile with Safari </div>
#9 楼
使用仅用于Safari的过滤器时,我可以定位Safari(iOS和Mac),但不包括Chrome(和其他浏览器):@supports (-webkit-backdrop-filter: blur(1px)) {
.safari-only {
background-color: rgb(76,80,84);
}
}
评论
这不会过滤边缘
–史蒂夫
8月6日20:23
#10 楼
步骤1:使用https://modernizr.com/步骤2:使用html类.regions仅选择Safari
a { color: blue; }
html.regions a { color: green; }
Modernizr将基于当前浏览器支持的内容将html类添加到DOM。 Safari支持http://caniuse.com/#feat=css-regions区域,而其他浏览器则不支持(无论如何)。在选择不同版本的IE时,此方法也非常有效。愿力量与你同在。
评论
modernizr是网站上很棒的javascript插件,可用于识别浏览器,这是出色的工具! -在其他浏览器决定支持区域功能之前,此技巧将(与其他技巧一样)起作用
–杰夫·克莱顿(Jeff Clayton)
16年7月4日在15:44
CSS区域不再受支持。
– 1stthomas
18年8月13日在6:38
区域使我能够在iOS上将Safari 6.1至11和7.1至11.2定位为目标,仅此一项就已经很棒。
–lowtechsun
18/09/11在22:20
@lowtechsun-很好地发布您的统计信息,黑客只知道他们所针对的浏览器是好的。
–杰夫·克莱顿(Jeff Clayton)
3月10日12:40
#11 楼
嗨,我做了这个,对我有用@media(max-width: 1920px){
@media not all and (min-resolution:.001dpcm) {
.photo_row2 {
margin-left: 5.5% !important;
}
}
}
@media(max-width: 1680px){
@media not all and (min-resolution:.001dpcm) {
.photo_row2 {
margin-left: 15% !important;
}
}
}
@media(max-width: 1600px){
@media not all and (min-resolution:.001dpcm) {
.photo_row2 {
margin-left: 18% !important;
}
}
}
@media (max-width: 1440px) {
@media not all and (min-resolution:.001dpcm) {
.photo_row2 {
margin-left: 24.5% !important;
}
}
}
@media (max-width: 1024px) {
@media not all and (min-resolution:.001dpcm) {
@media {
.photo_row2 {
margin-left: -11% !important;
}
}
}
评论
这是一个不错的设置,它很好地利用了带有针对响应视图的网站的多种设备设置的hack。
–杰夫·克莱顿(Jeff Clayton)
18-10-23在21:27
#12 楼
这有效:@media not all and (min-resolution:.001dpcm) {
@media {
/* your code for Safari Desktop & Mobile */
body {
background-color: red;
color: blue;
}
/* end */
}
}
评论
这对我有用-谢谢。你能解释为什么吗?
– heLL0
8月20日14:31
@ heLL0,因为Safari根本不支持dcpm单元(@media并非全部支持...)caniuse.com/mdn-css_types_resolution_dpcm
–乔治·埃普南(JorgeEpuñan)
9月7日下午13:11
#13 楼
注意:如果仅iOS足够(如果您愿意牺牲Safari桌面),则可以使用: @supports (-webkit-overflow-scrolling: touch) {
/* CSS specific to iOS devices */
}
#14 楼
您可以使用媒体查询黑客从其他浏览器中选择Safari 6.1-7.0。评论
它在较新的Safari上不起作用,但是该统计数据是外科手术的:Safari 6.1-7.0,Chrome 22-28仍然很方便。
–杰夫·克莱顿(Jeff Clayton)
16年1月9日在1:59
#15 楼
最后,我使用了一些JavaScript来实现它: >if (navigator.vendor.startsWith('Apple'))
document.documentElement.classList.add('on-apple');
#16 楼
https://stackoverflow.com/a/17637937/3174065尽管此方法确实使用了某些JS,但仍在此处回答。如果使用,请确保将js放在页脚中,主体必须完全加载才能正确触发,将其放置在头部时会出错,因为它在加载主体之前就触发了。然后将.safari类添加到主体,但仅在safari中,这使得对CSS的定位非常容易。
#17 楼
它在Safari中工作了100%。.i已尝试@media screen and (-webkit-min-device-pixel-ratio:0)
{
::i-block-chrome, Class Name {your styles}
}
评论
这适用于Safari的旧版本,而不是6.1和更高版本的当前版本。
–杰夫·克莱顿(Jeff Clayton)
18-10-23在21:25
#18 楼
我已经测试过,并且对我有用。@media only screen and (-webkit-min-device-pixel-ratio: 1) {
::i-block-chrome, .myClass {
height: 1070px !important;
}
}
评论
不使用CSS,则需要使用javascript。 stackoverflow.com/questions/5899783/detect-safari-using-jquery我对实际问题比对脆弱和棘手的解决方案更感兴趣。 (仍然)在某处可用吗?
对于发布“行不通”的人-请意识到您需要知道要测试的Safari版本。没有针对每个版本的“万能” Safari解决方案。您需要在发布时提供这些信息,否则没有人可以帮助您找到解决方案。
不同版本的Safari有不同的需求-请在此处查看实时示例:browserstrangeness.bitbucket.io/css_hacks.html#safari [或镜报] browserstrangeness.github.io/css_hacks.html#safari