क्या सफारी के लिए एक सीएसएस हैक है जो केवल क्रोम नहीं है?


182

मैं सिर्फ सफारी नहीं क्रोम के लिए एक सीएसएस हैक खोजने की कोशिश कर रहा हूँ, मुझे पता है कि ये दोनों वेबकिट ब्राउज़र हैं, लेकिन क्रोम और सफारी में div संरेखण के साथ समस्याएँ हैं, प्रत्येक अलग प्रदर्शित करता है।

मैं इसे इस्तेमाल करने की कोशिश कर रहा हूं लेकिन यह क्रोम को भी प्रभावित करता है,

@media screen and (-webkit-min-device-pixel-ratio:0) { 
  #safari { display: block; } 
} 

क्या किसी को दूसरे के बारे में पता है जो सिर्फ सफारी पर लागू होगा?


CSS का उपयोग नहीं करने पर, आपको जावास्क्रिप्ट का उपयोग करना होगा। stackoverflow.com/questions/5899783/detect-safari-use-jquery
ईसाई

मैं एक नाजुक और हैकी समाधान की तुलना में वास्तविक समस्या में अधिक रुचि रखता हूं। क्या यह (अभी भी) कहीं उपलब्ध है?
मैटिज्स

उन लोगों के लिए जो 'काम नहीं करता है' पोस्ट कर रहे हैं - कृपया महसूस करें कि आपको सफारी का संस्करण जानने की जरूरत है जिसका आप परीक्षण कर रहे हैं। हर संस्करण के लिए कोई 'कैच-ऑल' सफारी समाधान नहीं है। आपको अपनी पोस्टिंग के साथ वह जानकारी प्रदान करने की आवश्यकता है या कोई भी समाधान खोजने में आपकी सहायता नहीं कर सकता है।
जेफ क्लेटन 14

Safari के विभिन्न संस्करणों की अलग-अलग ज़रूरतें हैं - लाइव उदाहरणों के लिए यहाँ जाँच करें: browserstrangeness.bitbucket.io/css_hacks.html#safari [या मिरर] Browserstrangeness.github.io/css_hacks.html#safari
Jeff Clayton

जवाबों:


356
  • CATALINA और SAFARI 13 के लिए अद्यतन (प्रारंभिक 2020 अद्यतन) *

नोट: फ़िल्टर और कंपाइलर (जैसे SASS इंजन) मानक 'क्रॉस-ब्राउज़र' कोड की अपेक्षा करते हैं - CSS को इनकी तरह हैक नहीं किया जाता है, जिसका अर्थ है कि वे हैक को फिर से लिखेंगे, नष्ट कर देंगे या हटा देंगे जो कि हैक नहीं करता है। इनमें से अधिकांश गैर-मानक कोड है जो एकल ब्राउज़र संस्करणों को लक्षित करने के लिए श्रमसाध्य रूप से तैयार किए गए हैं और यदि वे बदल दिए गए हैं तो काम नहीं कर सकते हैं। यदि आप इसे उन लोगों के साथ उपयोग करना चाहते हैं, तो आपको अपने चुने हुए CSS हैक को किसी भी फ़िल्टर या कंपाइलर पर लोड करना होगा । यह एक दिया जैसा प्रतीत हो सकता है, लेकिन ऐसे लोगों में बहुत भ्रम पैदा हो गया है, जिन्हें इस बात का अंदाजा नहीं है कि वे इस तरह के सॉफ्टवेयर के जरिए इसे हैक कर रहे हैं, जो इस काम के लिए नहीं बनाया गया था।

संस्करण 6.1 के बाद से सफारी बदल गई है, जैसा कि कई ने देखा है।

कृपया ध्यान दें: यदि आप iOS पर क्रोम [और अब फ़ायरफ़ॉक्स] का उपयोग कर रहे हैं (कम से कम आईओएस संस्करण 6.1 और नए में) और आपको आश्चर्य है कि क्यों कोई भी हैक क्रोम से सफारी को अलग नहीं करता है, ऐसा इसलिए है क्योंकि क्रोम का आईओएस संस्करण सफ़ारी इंजन का उपयोग कर रहा है। यह क्रोम वाले नहीं सफारी सफारी का उपयोग करता है। इसके बारे में यहां और अधिक: https://allthingsd.com/20120628/googles-chrome-for-ios-is-more-like-a-chrome-plated-apple/ iOS के लिए फ़ायरफ़ॉक्स 2015 में जारी किया गया था। यह भी जवाब देता है सफारी भाड़े, लेकिन फ़ायरफ़ॉक्स वाले में से कोई भी, iOS क्रोम के समान।

ALSO: यदि आपने एक या अधिक हैक की कोशिश की है और उन्हें काम करने में परेशानी हो रही है, तो कृपया नमूना कोड (बेहतर अभी तक एक परीक्षण पृष्ठ) पोस्ट करें - जिस हैक का आप प्रयास कर रहे हैं, और जो ब्राउज़र (सटीक)! साथ ही आपके द्वारा उपयोग किए जा रहे डिवाइस का उपयोग कर रहे हैं। उस अतिरिक्त जानकारी के बिना, मेरे लिए या यहाँ किसी अन्य व्यक्ति के लिए आपकी सहायता करना असंभव है।

अक्सर यह एक साधारण फिक्स या एक लापता अर्धविराम होता है। CSS के साथ यह आमतौर पर है कि या किस क्रम में कोड को स्टाइल शीट में सूचीबद्ध किया गया है, यदि सीएसएस की गलतियाँ नहीं हैं। कृपया परीक्षण स्थल पर यहां हैक का परीक्षण करें। यदि यह वहां काम करता है, तो इसका मतलब है कि हैक वास्तव में आपके सेटअप के लिए काम कर रहा है, लेकिन यह कुछ और है जिसे हल करने की आवश्यकता है। यहां के लोग वास्तव में मदद करने के लिए प्यार करते हैं, या कम से कम आपको सही दिशा में इंगित करते हैं।

परीक्षण स्थल:

https://browserstrangeness.bitbucket.io/css_hacks.html#safari

और MIRROR!

https://browserstrangeness.github.io/css_hacks.html#safari

सफारी के अधिक हाल के संस्करणों के लिए उपयोग करने के लिए यहां आपके लिए हैक हैं।

आपको इसे पहले प्रयास करना चाहिए क्योंकि यह वर्तमान सफारी संस्करणों को कवर करता है और केवल शुद्ध-सफारी है:

यह अभी भी सफारी 13 (2020 की शुरुआत) के साथ ठीक से काम करता है:

/* Safari 7.1+ */

_::-webkit-full-page-media, _:future, :root .safari_only {

  color:#0000FF; 
  background-color:#CCCCCC; 

}

अधिक संस्करणों को कवर करने के लिए, 6.1 और ऊपर, इस समय आपको सीएसएस हैक की अगली जोड़ी का उपयोग करना होगा। 6.1-10.0 के लिए एक के साथ जाने के लिए जो 10.1 और ऊपर संभालती है।

तो फिर - यहाँ एक मैं सफारी 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 के अंत में अपडेट)

यह हैक मैंने कई महीनों के परीक्षण और प्रयोग में कई अन्य हैक को मिलाकर बनाया।

नोट: ऊपर की तरह, डबल मीडिया क्वेरी कोई दुर्घटना नहीं है - यह कई पुराने ब्राउज़र को नियमबद्ध करता है जो मीडिया क्वेरी नेस्टिंग को संभाल नहीं सकते हैं। - 'और' में से एक के बाद लापता स्थान भी महत्वपूर्ण है। यह सब के बाद, एक हैक ... और केवल एक है जो इस समय 6.1 और सभी नए सफारी संस्करणों के लिए काम करता है। नीचे दिए गए टिप्पणियों में सूचीबद्ध के रूप में भी जागरूक रहें, हैक गैर-मानक सीएसएस है और इसे फ़िल्टर के बाद लागू किया जाना चाहिए। 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 11+ */

@media not all and (min-resolution:.001dpcm)
{ @supports (-webkit-appearance:none) and (stroke-color:transparent) {

    .safari_only { 

        color:#0000FF; 
        background-color:#CCCCCC; 

    }
}}

सफारी 11.0 के लिए एक:

/* Safari 11.0 (not 11.1) */

html >> * .safari_only {

  color:#0000FF; 
  background-color:#CCCCCC; 

}

सफारी के लिए एक 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; 

    }
}}

सफारी 10.0 (गैर-आईओएस डिवाइस):

/* 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; 

}

सफारी 9 सीएसएस भाड़े:

सफारी 9.0 और उसके बाद के लिए एक सरल सपोर्ट फ़ीचर क्वेरी हैक:

@supports (-webkit-hyphens:none)
{

  .safari_only {
    color:#0000FF; 
    background-color:#CCCCCC; 
  }

}

सफारी 9.0 और उसके बाद के लिए एक साधारण अंडरस्कोर हैक:

_:not(a,b), .safari_only {

  color:#0000FF; 
  background-color:#CCCCCC; 

}

सफारी 9.0 और ऊपर के लिए एक और एक:

/* Safari 9+ */

_:default:not(:root:root), .safari_only {

  color:#0000FF; 
  background-color:#CCCCCC; 

}

और एक अन्य समर्थन सुविधाएँ क्वेरी भी:

/* Safari 9+ */

@supports (-webkit-marquee-repetition:infinite) and (object-fit:fill) {

    .safari_only { 

        color:#0000FF; 
        background-color:#CCCCCC; 

    }
}

सफारी के लिए 9.0-10.0:

/* Safari 9.0-10.0 (not 10.1) */

_::-webkit-:not(:root:root), .safari_only {

  color:#0000FF; 
  background-color:#CCCCCC; 

}

सफारी 9 में अब फीचर डिटेक्शन शामिल है ताकि अब हम इसका उपयोग कर सकें ...

/* Safari 9 */

@supports (overflow:-webkit-marquee) and (justify-content:inherit) 
{

  .safari_only {
    color:#0000FF; 
    background-color:#CCCCCC; 
  }

}

अब केवल 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; 
  }

}

सफ़ारी 9.0+ के लिए एक लेकिन iOS डिवाइस नहीं:

/* Safari 9+ (non-iOS) */

_:default:not(:root:root), .safari_only {

  color:#0000FF; 
  background-color:#CCCCCC; 

}

और सफारी 9.0-10.0 के लिए एक है, लेकिन आईओएस डिवाइस नहीं:

/* 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 उपकरणों को ब्लॉक करने का तरीका बताया है, यहाँ सफारी 6.1+ हैक का संशोधित संस्करण है जो गैर-iOS उपकरणों को लक्षित करता है:

/* 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>

आमतौर पर [इस सवाल की तरह] लोग सफारी हैक्स के बारे में पूछते हैं, ज्यादातर इसे Google Chrome से अलग करने के संदर्भ में होता है (फिर से iOS नहीं!) यह विकल्प पोस्ट करने के लिए महत्वपूर्ण हो सकता है: क्रोम को सफारी से भी अलग से कैसे लक्षित करें, ताकि मैं यहाँ आपके लिए यह प्रदान कर रहा हूँ कि यह आवश्यक हो।

यहां मूल बातें हैं, फिर से क्रोम के कई विशिष्ट संस्करणों के लिए मेरे परीक्षण पृष्ठ की जांच करें, लेकिन ये सामान्य रूप से क्रोम को कवर करते हैं। Chrome इस समय संस्करण 45 है, देव और कैनरी संस्करण इस समय संस्करण 47 तक हैं।

मेरा पुराना मीडिया क्वेरी कॉम्बो जिसे मैंने ब्राउज़रहक्स पर रखा है, अभी भी क्रोम 29+ के लिए काम करता है:

/* Chrome 29+ */

@media screen and (-webkit-min-device-pixel-ratio:0) and (min-resolution:.001dpcm)
{
    .chrome_only {

       color:#0000FF; 
       background-color:#CCCCCC; 

    }
}

Chrome @ 29 के लिए @supports सुविधा क्वेरी अच्छी तरह से काम करती है ... हम नीचे दिए गए Chrome 28+ के लिए उपयोग कर रहे हैं का एक संशोधित संस्करण। सफारी 9, आने वाले फ़ायरफ़ॉक्स ब्राउज़र और Microsoft एज ब्राउज़र को इसके साथ नहीं लिया गया है:

/* 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 और नया लक्ष्य करना आसान था। यह वह है जिसे मैंने अन्य सीएसएस कोड के ब्लॉक में शामिल करने के बाद ब्राउज़रशेक पर भेजा है (मूल रूप से सीएसएस हैक के रूप में नहीं) और महसूस किया कि यह क्या करता है, इसलिए मैंने हमारे उद्देश्यों के लिए प्रासंगिक भाग निकाला:

[नोट:] यह नीचे दी गई पुरानी विधि अब सफारी ९ और माइक्रोसॉफ्ट एज ब्राउज़र को ऊपर के अपडेट के बिना जोड़ देती है। फ़ायरफ़ॉक्स और माइक्रोसॉफ्ट एज के आने वाले संस्करणों ने अपनी प्रोग्रामिंग में कई -webkit- CSS कोड के लिए समर्थन जोड़ा है, और एज और सफारी 9 दोनों ने @supports सुविधा का पता लगाने के लिए समर्थन जोड़ा है। क्रोम और फ़ायरफ़ॉक्स में पहले @supports शामिल थे।

/* Chrome 28+, Now Also Safari 9+, Firefox, and Microsoft Edge */

@supports (-webkit-appearance:none) 
{
    .chrome_and_safari {

       color:#0000FF; 
       background-color:#CCCCCC; 

    }
}

क्रोम संस्करणों के ब्लॉक 22-28 (यदि पुराने संस्करणों का समर्थन करने की आवश्यकता है) मेरे सफारी कॉम्बो हैक पर एक मोड़ के साथ लक्षित करना संभव है जिसे मैंने ऊपर पोस्ट किया है:

/* 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(;

सफ़ारी सीएसएस फॉर्मेटिंग हैक के ऊपर, इन्हें निम्नानुसार इस्तेमाल किया जा सकता है:

<div class="chrome_only">This text will be Blue in Chrome</div>

तो आपको इस पोस्ट में इसे खोजना नहीं है, यहाँ मेरा लाइव टेस्ट पेज फिर से है:

https://browserstrangeness.bitbucket.io/css_hacks.html#safari

[या दर्पण]

https://browserstrangeness.github.io/css_hacks.html#safari

परीक्षण पृष्ठ में कई अन्य लोगों के साथ-साथ विशेष रूप से संस्करण-आधारित हैं जो आपको क्रोम और सफारी के बीच अंतर करने में मदद करने के लिए, और फ़ायरफ़ॉक्स, माइक्रोसॉफ्ट एज, और इंटरनेट एक्सप्लोरर वेब ब्राउज़रों के लिए कई हैक भी करते हैं।

नोट: यदि आपके लिए कुछ काम नहीं करता है, तो पहले परीक्षण पृष्ठ की जांच करें, लेकिन उदाहरण कोड प्रदान करें और जिसे आप किसी की सहायता के लिए प्रयास कर रहे हैं उसे हैक करें।


9
बस इतना कहना चाहता हूं कि टेस्ट पेज कमाल का है। अब मैं किसी भी डिवाइस के साथ उस साइट पर ब्राउज़ कर सकता हूं और देख सकता हूं कि कौन से सीएसएस नियम लागू हैं!
duyn9uyen

1
क्या यह iPhone या iPad पर Safari पर लागू होगा?
ग्रेग रोज़मेरीवॉक्ज़

1
वास्तव में, मैंने ऊपर दिए गए उदाहरण और (; संपत्ति: मूल्य;) के संयोजन का उपयोग करके अपने प्रश्न को हल किया; नीचे और यह बहुत अच्छा काम किया!
mydoglixu

1
इस जवाब के शीर्ष पर सफारी 6.1+ के लिए हैक सैस कंपाइलर में एक त्रुटि फेंकता है। क्या इसे हल करने का कोई तरीका है?
ब्लैकबर्ड

2
@Blackbird क्षमा करें, लेकिन आप हैक को संकलित या फ़िल्टर नहीं कर सकते, यह उन्हें बर्बाद कर देता है। उन्हें जैसे-तैसे इस्तेमाल किया जाना है। (संकलन के बाद उन्हें पूर्ण सीएसएस फ़ाइल में जोड़ें।) तथ्य यह है कि वे गैर-मानक हैं इसलिए वे काम करते हैं।
जेफ क्लेटन

89

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;
    }
}


नोट: iOS में [iOS 7 में परीक्षण किया गया], क्रोम संस्करण वास्तव में सफारी इंजन चला रहा है, इसलिए आईपैड या आईफ़ोन पर, आप सफारी हैक का उपयोग करते हैं। अन्य उपकरणों के लिए, वे अलग हैं।
जेफ क्लेटन

तो, मूल रूप से उत्तर में कोड सफारी 5.0 और 6.0 के लिए काम करता है न कि 6.1+ के लिए?
निक कॉटरेल

बिल्कुल सटीक होने के लिए, :: i-block-chrome, .myClass {} निर्माण केवल Safari 5.1-6.0 की अनुमति देता है, लेकिन साथ ही क्रोम 10-24 (Chrome का पुराना संस्करण वास्तव में उपयोग नहीं किया गया है इसलिए पूरी तरह से उल्लेख के लायक नहीं है) लेकिन नया कुछ भी नहीं - सफारी हैक की तरह काम करते हैं: एक बैच 5.1-6.0 संभालता है, दूसरा हैंडल 6.1-7.0, और नए वाले 7.1-8.0 संभालते हैं। जब तक वे अगले संख्यात्मक संस्करण पर जाने का फैसला नहीं करते, तब तक वे बहुत सी चीजों को अपडेट करते दिखते हैं, जो पिछले '1 'रिलीज के बहुत करीब है।
जेफ क्लेटन

2013 में इस जवाब के समय, सफारी 6.1 को अभी जारी किया गया था, इसलिए पर्याप्त लोगों ने नहीं देखा था कि ब्राउज़र बदल गया था इसलिए यह उस समय सबसे सटीक था। यदि आपको नए की आवश्यकता है तो नीचे मेरे उत्तर की जांच करें। जिस समय यह प्रदान किया गया था, यह एक महान जवाब था। हालाँकि समय बदलता है इसलिए मैंने अपने काम को इसको अपडेट के रूप में पोस्ट किया है। मुझे 6.1-7.0 और 7.1-8.0 वाले बनाने में महीनों लग गए। मुझे उम्मीद है कि आपको परिणाम पसंद आएंगे। सबसे अधिक संभावना है जब एक संस्करण 8.1 जारी किया जाता है यदि यह पैटर्न का पालन करता है, तो इसके लिए एक अलग हैक की भी आवश्यकता होगी। फिर से केवल समय बताएगा।
जेफ क्लेटन

21

सरारी केवल

.yourClass:not(:root:root){ 
    /* ^_^ */ 
}

8
कुछ स्पष्टीकरण जोड़ने के लिए देखभाल? क्या मैं शाब्दिक रूप से जड़: जड़?
नटखट जूल 17'14

1
यह सफारी 3.x (और क्रोम संस्करण 1.0 के लिए बिल्कुल सही है, हालांकि कोई भी क्रोम 1.0 का उपयोग नहीं करता है क्योंकि यह 30 के दशक में है ...)
जेफ क्लेटन

यह अब सफारी 9.0 को भी लक्षित करता है, इसलिए पूर्ण आँकड़े अपडेट किए गए हैं: / * क्रोम 1.0, सफारी 3.X, सफारी 9.0+ * /
जेफ क्लेटन

4
:not(:root:root)चयनकर्ता के सीएसएस चयनकर्ता 3 कल्पना अनुसार (जिसमें अमान्य है :not()केवल एक साधारण चयनकर्ता, यानी एक प्रकार चयनकर्ता शामिल कर सकते हैं या एक आईडी या एक वर्ग या एक छद्म वर्ग) है, लेकिन पूरी तरह से वैध अनुसार सीएसएस चयनकर्ता 4 (जहां :not()की सूची को स्वीकार करता है चयनकर्ताओं)। यह सच है कि वर्तमान में केवल सफारी सीएसएस सिलेक्टर्स 4 सिंटैक्स को समझता है, लेकिन यह समाधान भविष्य के सबूत नहीं है।
इल्या स्ट्रेलित्सिन

2
बहुत कम हैक (और बहुत वास्तविक मानक कोड संस्करण परिवर्तन के कारण नहीं है) भविष्य के प्रमाण नहीं हैं। सबसे अच्छी योजना यह है कि यदि आप एक सीएसएस हैक का उपयोग करने जा रहे हैं, तो इसे केवल एक अस्थायी फिक्स के रूप में उपयोग करें ताकि अधिक आधिकारिक क्रॉस-ब्राउज़र अपडेट करने के लिए समय खरीदा जा सके।
जेफ क्लेटन

14

यह हैक 100% केवल सफारी 5.1-6.0 के लिए काम करता है। मैंने अभी इसे सफलता के साथ परखा है।

@media only screen and (-webkit-min-device-pixel-ratio: 1) {
     ::i-block-chrome, .yourcssrule {
        your css property
    }
}

3
यह हैक वास्तव में विभिन्न संस्करणों में क्रोम और सफारी दोनों के लिए है। यह Chrome को 10-24 की अनुमति देता है (जो कोई भी अधिक उपयोग नहीं करता है यही कारण है कि लोगों ने सूचीबद्ध किया कि यह क्रोम को अवरुद्ध करता है) और सफारी 5.1-6.0 केवल। हालांकि यह सफारी 6.1 और नए के लिए काम नहीं करता है। उस समय अपनी तरह का कोई बेहतर हैक नहीं था।
जेफ क्लेटन

1
@ veronica-lotti, इसने मेरे लिए भी काम किया। तुम मेरे सिरदर्द से छुटकारा पा लो। धन्यवाद
Andhi इरावन

लोग - कृपया सावधान रहें। इन टिप्पणियों का जो वर्णन किया जा रहा है वह एक ऐसी विधि है जो पिछले कई वर्षों में सफारी के संस्करणों के लिए काम नहीं करती है और केवल पुराने संस्करणों के लिए काम करती है। वास्तव में इसका मतलब यह है कि इंटरनेट पर अधिकांश लोगों के पास वह परिणाम नहीं होगा जिसकी आप तलाश कर रहे हैं, लेकिन केवल पुराने कंप्यूटर वाले लोग। यह वर्तमान ऑपरेटिंग सिस्टम के लिए काम नहीं करता है। इस समय अधिकांश लोगों के पास संस्करण 12 और उच्चतर हैं (6.0 और उससे कम नहीं, जो केवल विंडोज़ एक्सपी युग के दौरान चालू थे।)
जेफ क्लेटन

8

उन लोगों के लिए जो सफारी 7.0 और उससे नीचे के लिए एक हैक लागू करना चाहते हैं, लेकिन 7.1 और इसके बाद के संस्करण का उपयोग नहीं करते हैं:

.myclass { (;property: value;); }
.myclass { [;property: value;]; }

मैंने इसे Safari 7 पर आज़माया और इसे काम करने के लिए नहीं मिला। क्या आप किसी भी मौके पर काम करने का उदाहरण दे सकते हैं?
रसदार

@Juicy: Browserhacks.com पर इनके लाइव टेस्ट हैं - ये सफारी 7 और लोअर पर काम करते हैं और क्रोम 28 और लोअर पर भी हैं। (जैसा कि एक अन्य पोस्टिंग आईओएस 7 और 8 में उल्लेख किया गया है कि शायद अन्य लोग क्रोम के लिए सफारी इंजन का उपयोग करते हैं, इसलिए आईपैड पर क्रोम और सफारी दोनों वास्तव में सफारी हैं)
जेफ क्लेटन

आप इसे सफारी 7.1 में नहीं, सफारी 7.1 में आजमा रहे होंगे। यह 7.0 और उससे पहले के लिए मान्य है, 7.1 और नए से नहीं। जब यह उत्तर पोस्ट किया गया था, तो 7.0 सफारी का नवीनतम संस्करण था, इसलिए यह उस समय सच था।
जेफ क्लेटन

विंडोज के लिए सफारी के लिए काम करता है (संस्करण 5.1.7 (7534.57.2))
jave.web

मैक के लिए सफारी के लिए काम करता है (संस्करण 6.0.2 (7536.26.17))
मर्लिन

6

अपनी कक्षा को .myClass में बदलें)

/ * सफ़ारी केवल * / .myClass: नहीं (: रूट: रूट) { enter code here }


यह सफारी के लिए एक अच्छा है - केवल दूसरा ब्राउज़र जो इसे लक्षित करता है वह है क्रोम 1 (कोई भी चोम 1 का उपयोग नहीं करता है)
जेफ क्लेटन

उन लोगों के लिए सटीक चश्मा जो नवीनतम Macs का उपयोग नहीं कर रहे हैं: Chrome 1, Safari 3.X, Safari 9.0+ (Safari 4-8 नहीं)
Jeff Clayton

यह सफारी के नवीनतम संस्करण के साथ काम करता है 7+ और जहां तक ​​मैं बता सकता हूं कि स्वीकृत उत्तर होना चाहिए।
जेसन

वाह धन्यवाद अंत में सफारी के लिए इतने सारे ब्राउज़र हैक करने की कोशिश करने के बाद मेरे लिए काम किया !!!
परी ११

4

वैसे, आप में से किसी के लिए जो बस मोबाइल को सफारी पर लक्षित करने की आवश्यकता है, बस इस हैक में एक मीडिया क्वेरी जोड़ें:

@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>

4

मुझे निम्न विधि का उपयोग करना पसंद है:

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">') 
};

इस जावास्क्रिप्ट हैक विधि को स्थापित करने के लिए JQuery पैकेज की आवश्यकता है।
जेफ क्लेटन

यह बेहद बुरा अभ्यास माना जाता है, ब्राउज़र सूँघना बहुत त्रुटि-प्रवण है और झूठी सकारात्मकता के ढेर की ओर ले जाता है। ऐसा न करें, यहां तक ​​कि मीडिया-क्वेरी सूंघना बहुत गंदा है लेकिन बहुत छोटे परिवर्तनों के लिए स्वीकार्य हो सकता है।
वानेस

3

इस सफारी-केवल फिल्टर का उपयोग करते समय मैं सफारी (आईओएस और मैक) को लक्षित कर सकता था, लेकिन क्रोम (और अन्य ब्राउज़र) को बाहर कर सकता हूं:

@supports (-webkit-backdrop-filter: blur(1px)) {
  .safari-only {
    background-color: rgb(76,80,84);
  }
}

2

चरण 1: https://modernizr.com/ का उपयोग करें

चरण 2: केवल सफारी का चयन करने के लिए HTML वर्ग .regions का उपयोग करें

a { color: blue; }
html.regions a { color: green; }

Modernizr डोम में html क्लासों को जोड़ेगा जो वर्तमान ब्राउज़र का समर्थन करता है। सफारी क्षेत्रों का समर्थन करता है http://caniuse.com/#feat=css-regions जबकि अन्य ब्राउज़र (अभी तक वैसे भी) नहीं हैं। यह विधि IE के विभिन्न संस्करणों के चयन में भी बहुत प्रभावी है। बल आपके साथ हो।


1
modernizr ब्राउज़रों, उत्कृष्ट टूल की पहचान करने के लिए वेबसाइटों के लिए एक शानदार जावास्क्रिप्ट एडऑन है! - यह हैक तब तक (अन्य लोगों की तरह) काम करेगा, जब तक कि अन्य ब्राउजर इस क्षेत्र की सुविधा का समर्थन करने का निर्णय नहीं लेते
जेफ क्लेटन

1
सीएसएस क्षेत्र अब समर्थित नहीं हैं।
फर्थोमस

2
क्षेत्र मुझे सफारी 6.1 से 11 और 7.1 से 11.2 आईओएस पर लक्षित करने में सक्षम बनाता है और यह अकेले पहले से ही महान है।
लोटेकसून

@lowtechsun - इस पर अपने आँकड़े पोस्ट करना, हैक केवल उन ब्राउज़रों के ज्ञान के रूप में अच्छे हैं जो वे लक्षित करते हैं।
जेफ क्लेटन

2

हाय मैं यह बनाया है और यह मेरे लिए काम किया है

@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;
        }

    }

}

यह एक अच्छा सेट है, उत्तरदायी विचारों का उपयोग करके वेब साइटों के लिए कई डिवाइस सेटिंग्स के साथ हैक का अच्छा उपयोग।
जेफ क्लेटन

2

नोट: यदि iOS- केवल पर्याप्त है (यदि आप सफारी डेस्कटॉप का बलिदान करने के लिए तैयार हैं), तो यह काम करता है:

    @supports (-webkit-overflow-scrolling: touch) {
    /* CSS specific to iOS devices */ 
    }

1

आप अन्य ब्राउज़रों से सफारी 6.1-7.0 का चयन करने के लिए मीडिया-क्वेरी हैक का उपयोग कर सकते हैं।

@media \\0 screen {}

अस्वीकरण: यह हैक पुराने क्रोम संस्करणों (जुलाई 2013 से पहले) को भी लक्षित करता है।


यह नए सफ़ारी पर काम नहीं करता है, इसके लिए आँकड़े सर्जिकल हैं: सफ़ारी 6.1-7.0, क्रोम 22-28 तो अभी भी काम कर रहे हैं।
जेफ क्लेटन


0

अंत में मैं इसे प्राप्त करने के लिए एक छोटे से जावास्क्रिप्ट का उपयोग करता हूं:

if (navigator.vendor.startsWith('Apple'))
    document.documentElement.classList.add('on-apple');

उसके बाद मेरे सीएसएस में Apple ब्राउज़र इंजन को लक्षित करने के लिए चयनकर्ता होगा:

.on-apple .my-class{
    ...
}

0

https://stackoverflow.com/a/17637937/3174065 इसका उत्तर यहाँ दिया गया है हालाँकि यह विधि कुछ JS का उपयोग करती है। यदि उपयोग किया जाता है, तो पाद में जेएस डालना सुनिश्चित करें, शरीर को ठीक से आग लगाने के लिए इसे पूरी तरह से लोड करना पड़ता है, जब सिर में रखा जाता है तो यह त्रुटिपूर्ण हो जाता है क्योंकि यह शरीर को लोड होने से पहले आग लगाता है।

यह तब शरीर के लिए एक .safari वर्ग जोड़ता है, लेकिन केवल सफारी में, सीएसएस को लक्षित करना बहुत आसान है।


-1

यह सफारी में 100% काम कर रहा है..मैंने कोशिश की

@media screen and (-webkit-min-device-pixel-ratio:0) 
{
::i-block-chrome, Class Name {your styles}
}

यह सफ़ारी के पुराने संस्करणों पर काम करता है, वर्तमान वाले नहीं - 6.1 और नए।
जेफ क्लेटन

-1

मैंने परीक्षण किया है और इसने मेरे लिए काम किया है

@media only screen and (-webkit-min-device-pixel-ratio: 1) {
 ::i-block-chrome, .myClass {
    height: 1070px !important;
  }
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.