มี css hack สำหรับ Safari ไม่ใช่ Chrome เท่านั้นหรือไม่


182

ฉันพยายามที่จะค้นหาแฮ็ค CSS สำหรับซาฟารีไม่ใช่โครเมี่ยมฉันรู้ว่านี่เป็นทั้งเบราว์เซอร์ webkit แต่ฉันมีปัญหากับการจัดแนว div ใน chrome และซาฟารีซึ่งแต่ละจอแสดงผลแตกต่างกัน

ฉันพยายามใช้สิ่งนี้ แต่มีผลกับโครเมี่ยมเช่นกัน

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

ไม่มีใครรู้ของอีกคนหนึ่งที่จะนำไปใช้กับซาฟารีโปรด?


ไม่ได้ใช้ CSS คุณจะต้องใช้จาวาสคริปต์ stackoverflow.com/questions/5899783/detect-safari-using-jquery
— Christian

ฉันสนใจปัญหาจริงมากกว่าโซลูชันที่บอบบางและแฮ็ค มี (ยัง) อยู่ที่ไหนบ้าง?
— Matijs

สำหรับผู้ที่โพสต์ข้อความว่า 'ใช้งานไม่ได้' - โปรดทราบว่าคุณจำเป็นต้องรู้เวอร์ชันของ Safari ที่คุณกำลังทดสอบ ไม่มีโซลูชัน Safari 'แบบจับใจได้' ​​สำหรับทุกรุ่น คุณต้องให้ข้อมูลดังกล่าวกับการโพสต์หรือไม่มีใครสามารถช่วยคุณในการหาวิธีการแก้ปัญหา
— Jeff Clayton

รุ่นต่างๆของซาฟารีมีความต้องการที่แตกต่างกัน - ตรวจสอบที่นี่สำหรับตัวอย่างชีวิต: browserstrangeness.bitbucket.io/css_hacks.html#safari [หรือกระจก] browserstrangeness.github.io/css_hacks.html#safari
— เจฟฟ์เคลย์ตัน

คำตอบ:


356
  • ปรับปรุงสำหรับ CATALINA & SAFARI 13 (อัปเดตเมื่อต้นปี 2020) *

หมายเหตุ: ตัวกรองและคอมไพเลอร์ (เช่นเอ็นจิ้น SASS) คาดหวังรหัส 'เบราว์เซอร์ข้ามมาตรฐาน' - ไม่แฮ็ก CSS เช่นนี้หมายความว่าพวกเขาจะเขียนใหม่ทำลายหรือลบแฮ็กเพราะไม่ใช่แฮ็คที่ทำ ส่วนใหญ่เป็นรหัสที่ไม่ได้มาตรฐานซึ่งได้รับการออกแบบมาอย่างพิถีพิถันเพื่อกำหนดเป้าหมายเบราว์เซอร์เวอร์ชันเดียวเท่านั้นและไม่สามารถทำงานได้หากมีการเปลี่ยนแปลง หากคุณต้องการที่จะใช้กับเหล่านั้นคุณต้องโหลดสับ CSS ที่คุณเลือกหลังจากกรองใด ๆ หรือคอมไพเลอร์ สิ่งนี้อาจดูเหมือนเป็นเรื่องที่ให้มา แต่มีความสับสนอย่างมากในหมู่คนที่ไม่ทราบว่าพวกเขากำลังทำการแฮ็คโดยการเปิดใช้งานผ่านซอฟต์แวร์ดังกล่าวซึ่งไม่ได้ออกแบบมาเพื่อจุดประสงค์นี้

Safari มีการเปลี่ยนแปลงตั้งแต่รุ่น 6.1 เป็นจำนวนมากได้สังเกตเห็น

โปรดทราบ: หากคุณใช้ Chrome [และตอนนี้ก็ Firefox] บน iOS (อย่างน้อยใน iOS เวอร์ชัน 6.1 และใหม่กว่า) และคุณสงสัยว่าทำไมไม่มีแฮ็กที่ดูเหมือนจะแยก Chrome ออกจาก Safari นั่นเป็นเพราะ Chrome เวอร์ชัน iOS ของ Chrome กำลังใช้งานโปรแกรม Safari มันใช้ Safari ไม่แฮ็ก Chrome เพิ่มเติมเกี่ยวกับที่นี่: https://allthingsd.com/20120628/googles-chrome-for-ios-is-more-like-a-chrome-plated-apple/ Firefox สำหรับ iOS เปิดตัวในฤดูใบไม้ร่วง 2558 นอกจากนี้ยังตอบสนองต่อ Safari Hacks แต่ไม่มี Firefox ใดที่เหมือนกับ iOS Chrome

นอกจากนี้: หากคุณได้ลองแฮ็กอย่างน้อยหนึ่งอย่างและมีปัญหาในการทำงานโปรดโพสต์โค้ดตัวอย่าง (ดีกว่าหน้าทดสอบ) - แฮ็คที่คุณพยายามและเบราว์เซอร์ใด (เวอร์ชั่นที่แน่นอน!) คุณ กำลังใช้งานเช่นเดียวกับอุปกรณ์ที่คุณกำลังใช้ หากไม่มีข้อมูลเพิ่มเติมฉันหรือคนอื่น ๆ ที่นี่จะช่วยเหลือคุณไม่ได้

บ่อยครั้งเป็นการแก้ไขแบบง่ายหรือเซมิโคลอนที่หายไป ด้วย CSS มันมักจะเป็นปัญหานั้นเกิดจากการสั่งซื้อรหัสจะแสดงอยู่ในสไตล์ชีทถ้าไม่ใช่แค่ข้อผิดพลาด CSS กรุณาทดสอบแฮ็กที่นี่ในเว็บไซต์ทดสอบ หากใช้งานได้หมายความว่าแฮ็คใช้งานได้จริงสำหรับการตั้งค่าของคุณ แต่เป็นสิ่งอื่นที่ต้องแก้ไข คนที่นี่ชอบช่วยเหลือหรืออย่างน้อยก็ชี้คุณไปในทิศทางที่ถูกต้อง

เว็บไซต์ทดสอบ:

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

และกระจก!

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

นี่เป็นวิธีที่คุณไม่ควรใช้กับ Safari เวอร์ชันล่าสุด

คุณควรลองตัวนี้ก่อนเพราะมันครอบคลุมเวอร์ชั่น Safari ปัจจุบันและเป็น pure-Safari เท่านั้น:

อันนี้ยังใช้งานได้กับ Safari 13 (ต้นปี 2020):

/* Safari 7.1+ */

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

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

}

เพื่อให้ครอบคลุมเวอร์ชั่นเพิ่มเติม 6.1 และสูงกว่าในเวลานี้คุณต้องใช้ css hacks คู่ต่อไป หนึ่งสำหรับ 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)

แฮ็คนี้ฉันสร้างมาหลายเดือนของการทดสอบและการทดลองโดยการรวมแฮ็กอื่น ๆ

หมายเหตุ: เช่นเดียวกับข้างต้นข้อความค้นหาสื่อคู่นั้นไม่ได้เกิดอุบัติเหตุเพราะเป็นข้อ จำกัด เบราว์เซอร์รุ่นเก่าที่ไม่สามารถจัดการกับการซ้อนข้อความค้นหาสื่อได้ - ช่องว่างที่ขาดหายไปหลังจากสิ่งใดสิ่งหนึ่ง 'และมีความสำคัญเช่นกัน นี่เป็นเพราะแฮ็ค ... และเป็นแฮ็คเดียวที่ทำงานได้กับ 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 รุ่น 'เฉพาะเจาะจง' เพิ่มเติมโปรดอ่านต่อไปด้านล่าง

/* 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 และสูงกว่า:

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

@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 เท่านั้น ดังที่กล่าวไว้ข้างต้นเนื่องจาก Chrome บน iOS ได้รับการรูตใน 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 นี่คือเวอร์ชันแฮ็กของ Safari 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>

โดยปกติ [เหมือนในคำถามนี้] เหตุผลที่ผู้คนถามเกี่ยวกับ Safari แฮ็คส่วนใหญ่อ้างอิงจาก Google Chrome (ไม่ใช่ iOS อีกครั้ง!) การโพสต์ทางเลือกอื่นอาจเป็นเรื่องสำคัญ: วิธีกำหนดเป้าหมาย Chrome แยกจาก Safari ด้วยเช่นกัน ฉันกำลังจัดหาสิ่งนี้ให้คุณที่นี่ในกรณีที่จำเป็น

ต่อไปนี้เป็นข้อมูลเบื้องต้นให้ตรวจสอบหน้าทดสอบอีกครั้งสำหรับ Chrome เฉพาะรุ่นจำนวนมาก แต่ครอบคลุม Chrome โดยทั่วไป Chrome เป็นรุ่น 45, รุ่น Dev และ Canary ขึ้นอยู่กับรุ่น 47 ในขณะนี้

คำสั่งผสมสื่อการสืบค้นเก่าของฉันที่ฉันใส่ในเบราว์เซอร์ยังคงใช้งานได้กับ 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 และใหม่กว่านั้นง่ายต่อการกำหนดเป้าหมาย นี่คือสิ่งที่ฉันส่งไปยัง browserhacks หลังจากเห็นมันรวมอยู่ในบล็อกของโค้ด CSS อื่น ๆ (แต่เดิมไม่ได้ตั้งใจว่าจะเป็นการแฮ็ก CSS) และตระหนักว่ามันทำอะไรดังนั้นฉันจึงแยกส่วนที่เกี่ยวข้องเพื่อวัตถุประสงค์ของเรา:

[หมายเหตุ:] วิธีที่เก่ากว่านี้ด้านล่างนี้แสดงภาพ 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

[หรือกระจก]

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

หน้าทดสอบนั้นมีอีกหลายรุ่นเช่นกันโดยเฉพาะเวอร์ชันที่ใช้เพื่อช่วยให้คุณแยกแยะความแตกต่างระหว่าง Chrome และ Safari และยังมีแฮ็กมากมายสำหรับ Firefox, Microsoft Edge และเว็บเบราว์เซอร์ Internet Explorer

หมายเหตุ: หากสิ่งที่ไม่ได้ผลสำหรับคุณให้ตรวจสอบหน้าทดสอบก่อน แต่ให้รหัสตัวอย่างและแฮ็คที่คุณพยายามให้ทุกคนช่วยเหลือคุณ


9
แค่อยากบอกว่าหน้าทดสอบนั้นยอดเยี่ยม ตอนนี้ฉันสามารถเรียกดูไซต์ด้วยอุปกรณ์ใดก็ได้และดูว่ากฎ css ใดที่เกี่ยวข้อง!
— duyn9uyen

1
สิ่งนี้จะใช้กับ Safari บน iPhone หรือ iPad หรือไม่
— Greg Rozmarynowycz

1
ที่จริงฉันเพิ่งแก้ไขคำถามของตัวเองโดยใช้ตัวอย่างข้างต้นและ (; คุณสมบัติ: ค่า;); ด้านล่างและมันใช้งานได้ดี!
— mydoglixu

1
แฮ็คสำหรับ Safari 6.1+ ที่ด้านบนของคำตอบนี้จะโยนข้อผิดพลาดในคอมไพเลอร์ Sass มีวิธีแก้ไขหรือไม่
— Blackbird

2
@Blackbird ขออภัย แต่คุณไม่สามารถคอมไพล์หรือกรองแฮ็คมันจะทำลายพวกเขา พวกเขาจะต้องใช้ตามที่เป็นอยู่ (เพิ่มลงในไฟล์ css ที่เสร็จสมบูรณ์หลังจากการคอมไพล์) ข้อเท็จจริงที่ว่าพวกเขาไม่ได้มาตรฐานคือเหตุผลที่พวกเขาทำงาน
— Jeff Clayton

89

มีวิธีในการกรอง Safari 5+ จาก Chrome:

@media screen and (-webkit-min-device-pixel-ratio:0) { 
    /* Safari and Chrome */
    .myClass {
     color:red;
    }

    /* Safari only override */
    ::i-block-chrome,.myClass {
     color:blue;
    }
}

3
jeffclayton.wordpress.com/2014/07/22/ … - ฉันทำงานหลายอย่าง (ฉันทดสอบและสร้าง css hacks สำหรับ browserhacks.com) และหน้าทดสอบที่นี่: browserstrangeness.bitbucket.org/css_hacks.html#webkit
— Jeff Clayton

หมายเหตุ: ใน iOS [ทดสอบใน iOS 7] รุ่นโครเมียมกำลังใช้งานโปรแกรมซาฟารีจริง ๆ ดังนั้นในไอแพดหรือไอโฟนคุณใช้แฮ็กซาฟารี สำหรับอุปกรณ์อื่นพวกมันต่างกัน
— Jeff Clayton

ดังนั้นโดยทั่วไปแล้วรหัสในคำตอบนั้นใช้กับ Safari 5.0 และ 6.0 และไม่ใช่ 6.1+?
— Nic Cottrell

เพื่อความถูกต้องอย่างแท้จริงโครงสร้าง :: i-block-chrome, .myClass {} อนุญาตให้ใช้ Safari 5.1-6.0 เท่านั้น แต่ยังใช้ Chrome 10-24 (Chrome รุ่นเก่าที่ไม่ได้ใช้งานจริงอีกต่อไปดังนั้นจึงไม่คุ้มค่าที่จะกล่าวถึง) - Safari hacks มักจะทำงานดังนี้: ชุดหนึ่งจัดการ 5.1-6.0, อีกจัดการ 6.1-7.0 และใหม่กว่าจัดการ 7.1-8.0 พวกเขาดูเหมือนจะอัปเดตสิ่งต่าง ๆ มากมายจนกระทั่งพวกเขาตัดสินใจที่จะไปยังรุ่นตัวเลขถัดไปซึ่งใกล้เคียงกับรีลีส '.1' ก่อนหน้านี้มาก
— Jeff Clayton

ในช่วงเวลาของคำตอบนี้ในปี 2013 Safari 6.1 เพิ่งเปิดตัวดังนั้นมีคนไม่พอที่เห็นว่าเบราว์เซอร์เปลี่ยนไปดังนั้นนี่จึงเป็นสิ่งที่ถูกต้องที่สุดในขณะนั้น หากคุณต้องการคำตอบที่ใหม่กว่าโปรดตรวจสอบคำตอบของฉันด้านล่าง นี่เป็นคำตอบที่ยอดเยี่ยมในเวลาที่จัดเตรียมไว้ อย่างไรก็ตามเวลาเปลี่ยนแปลงดังนั้นฉันโพสต์งานของฉันเป็นการอัปเดตของอันนี้ ใช้เวลาหลายเดือนกว่าที่ฉันจะสร้าง 6.1-7.0 และ 7.1-8.0 ฉันหวังว่าคุณจะชอบผลลัพธ์ เป็นไปได้มากเมื่อเวอร์ชัน 8.1 ถูกปล่อยออกมาถ้ามันเป็นไปตามรูปแบบมันก็จะต้องแฮ็คที่แตกต่างกัน อีกครั้งจะบอกเวลาเท่านั้น
— Jeff Clayton

21

ส่าหรีเท่านั้น

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

8
สนใจที่จะเพิ่มคำอธิบายบางอย่าง? ฉันพิมพ์ root: root อย่างแท้จริงหรือไม่?
— Nubtacular

1
อันนี้ถูกต้องสำหรับ Safari 3.x (และ Chrome รุ่น 1.0 เท่านั้นแม้ว่าจะไม่มีใครใช้ Chrome 1.0 เพราะมันอยู่ในยุค 30 ตอนนี้ ... )
— Jeff Clayton

ตอนนี้เป้าหมายนี้คือ Safari 9.0 เช่นกันดังนั้นสถิติที่สมบูรณ์จึงอัปเดตแล้ว: / * Chrome 1.0, Safari 3.X, Safari 9.0+ * /
— Jeff Clayton

4
:not(:root:root)เลือกไม่ถูกต้องตาม CSS Selectors 3 สเปค (ซึ่ง:not()สามารถมีเพียงตัวเลือกที่ง่ายคือประเภทเลือกอย่างใดอย่างหนึ่งหรือหนึ่ง ID หรือชั้นหนึ่งหรือหนึ่งหลอกชั้น) แต่ตามที่ถูกต้องสมบูรณ์เพื่อ CSS Selectors 4 (ที่:not()รายการยอมรับ เตอร์) เป็นความจริงที่ว่าในปัจจุบัน Safari เท่านั้นที่เข้าใจ CSS Selectors 4 ไวยากรณ์ แต่โซลูชันนี้ไม่สามารถพิสูจน์ได้ในอนาคต
— Ilya Streltsyn

2
แฮ็กน้อยมากไม่ได้ (และรหัสมาตรฐานจริงมากไม่ได้เกิดจากการเปลี่ยนแปลงรุ่น) พิสูจน์ในอนาคต แผนการที่ดีที่สุดคือถ้าคุณจะใช้แฮ็ค css ให้ใช้เป็นการแก้ไขชั่วคราวเท่านั้นเพื่อซื้อเวลาเพื่อทำการอัปเดตข้ามเบราว์เซอร์ที่เป็นทางการมากขึ้น
— Jeff Clayton

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 และ Safari ในเวอร์ชันที่แตกต่างกัน อนุญาตให้ใช้งาน Chrome 10-24 (ซึ่งไม่มีใครใช้อีกต่อไปซึ่งเป็นเหตุผลว่าทำไมคนที่ระบุว่าบล็อก Chrome) และ Safari 5.1-6.0 เท่านั้น มันไม่ทำงานสำหรับ Safari 6.1 และใหม่กว่า ในเวลานั้นไม่มีการแฮ็คชนิดใดที่ดีไปกว่านี้แล้ว
— Jeff Clayton

1
@ veronica-lotti มันก็ใช้ได้กับฉันเหมือนกัน คุณกำจัดฉันปวดหัว ขอบคุณ
— Andhi Irawan

คน - โปรดระวัง สิ่งที่ความคิดเห็นเหล่านี้อธิบายไว้เป็นวิธีการที่ใช้ไม่ได้กับ Safari รุ่นต่างๆในช่วงหลายปีที่ผ่านมาและใช้ได้กับเวอร์ชันเก่าเท่านั้น สิ่งที่จริงหมายถึงคือคนส่วนใหญ่บนอินเทอร์เน็ตจะไม่มีผลลัพธ์ที่คุณกำลังมองหา แต่เฉพาะคนที่มีคอมพิวเตอร์เก่ากว่า สิ่งนี้ไม่ทำงานสำหรับระบบปฏิบัติการปัจจุบัน ในเวลานี้คนส่วนใหญ่มีรุ่น 12 ขึ้นไป (ไม่ใช่ 6.0 และต่ำกว่าซึ่งเป็นปัจจุบันเฉพาะในยุค windows XP)
— Jeff Clayton

8

สำหรับผู้ที่ต้องการใช้แฮ็คสำหรับ Safari 7.0 และต่ำกว่า แต่ไม่ใช่ 7.1 ขึ้นไปให้ใช้:

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

ฉันทดลองใช้ Safari 7 แล้วไม่สามารถใช้งานได้ คุณสามารถให้ตัวอย่างการทำงานโดยโอกาสใด ๆ
— Juicy

@Juicy: มีการทดสอบแบบสดๆที่ browserhacks.com - ทำงานบน Safari 7 และรุ่นต่ำกว่าและ Chrome 28 และต่ำกว่า (ดังที่กล่าวไว้ในอีกโพสต์ iOS 7 และ 8 อาจจะเป็นคนอื่นเช่นกันใช้เครื่องยนต์ Safari สำหรับ Chrome ดังนั้น Chrome และ Safari บนไอแพดนั้นเป็นทั้ง Safari จริงๆ)
— Jeff Clayton

คุณอาจลองใช้งานใน Safari 7.1 ไม่ใช่ Safari 7.0 ใช้ได้กับ 7.0 และก่อนหน้าไม่ใช่ 7.1 และใหม่กว่า เมื่อคำตอบนี้ถูกโพสต์ 7.0 เป็นเวอร์ชันล่าสุดของ Safari ดังนั้นจึงเป็นจริงในขณะนั้น
— Jeff Clayton

ใช้งานได้กับ Safari สำหรับ Windows (รุ่น 5.1.7 (7534.57.2))
— jave.web

ใช้งานได้กับ Safari สำหรับ Mac (เวอร์ชัน 6.0.2 (7536.26.17))
— Merlin

6

แทนที่คลาสของคุณใน (.myClass)

/ * Safari เท่านั้น * / .myClass: ไม่ (: root: root) { enter code here }


นี้เป็นหนึ่งที่ดีสำหรับ Safari - เบราว์เซอร์เท่านั้นอื่น ๆ ก็มีเป้าหมายคือ Chrome ที่ 1 (ไม่มีใครใช้ Chome 1 อีกต่อไป)
— เจฟฟ์เคลย์ตัน

รายละเอียดที่แน่นอนสำหรับผู้ที่ไม่ได้ใช้ Macs ล่าสุด: Chrome 1, Safari 3.X, Safari 9.0+ (ไม่ใช่ Safari 4-8)
— Jeff Clayton

การทำงานกับเวอร์ชันล่าสุดของ Safari 7+ และเท่าที่ฉันสามารถบอกได้ควรเป็นคำตอบที่ยอมรับได้
— Jason Engage

ขอบคุณมากในที่สุดมันก็ใช้งานได้สำหรับฉันหลังจากที่ได้ลองใช้เบราว์เซอร์จำนวนมากสำหรับ Safari !!!
— FairyQueen

4

ยังไงก็ตามสำหรับพวกคุณคนใดที่ต้องการตั้งเป้าหมาย 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>

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

วิธีแฮ็ค JavaScript นี้ต้องใช้แพ็คเกจ JQuery ในการติดตั้ง
— Jeff Clayton

สิ่งนี้ถือได้ว่าเป็นการปฏิบัติที่ไม่ดีอย่างมากการดมกลิ่นเบราว์เซอร์นั้นเกิดข้อผิดพลาดได้ง่ายมาก อย่าทำสิ่งนี้แม้แต่การดมกลิ่นการสืบค้นสื่อก็สกปรกมาก แต่อาจเป็นที่ยอมรับสำหรับการเปลี่ยนแปลงเล็กน้อย
— Wannes

3

เมื่อใช้ตัวกรองเฉพาะซาฟารีนี้ฉันสามารถกำหนดเป้าหมาย Safari (iOS และ Mac) แต่ไม่รวม Chrome (และเบราว์เซอร์อื่น ๆ ):

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

2

ขั้นตอนที่ 1: ใช้https://modernizr.com/

ขั้นตอนที่ 2: ใช้ html class .regions เพื่อเลือก Safari เท่านั้น

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

Modernizr จะเพิ่มคลาส html ให้กับ DOM โดยยึดตามสิ่งที่เบราว์เซอร์ปัจจุบันรองรับ Safari สนับสนุนภูมิภาคhttp://caniuse.com/#feat=css-regionsในขณะที่เบราว์เซอร์อื่นไม่ได้ทำ วิธีนี้มีประสิทธิภาพมากในการเลือก IE เวอร์ชันต่างๆ ขอพลังจงอยู่กับท่าน.


1
modernizr เป็นส่วนเสริมจาวาสคริปต์ที่ยอดเยี่ยมสำหรับเว็บไซต์ในการระบุเบราว์เซอร์ซึ่งเป็นเครื่องมือที่ยอดเยี่ยม! - แฮ็คนี้จะใช้งานได้ (เหมือนคนอื่น ๆ ) จนกระทั่งเบราว์เซอร์อื่นตัดสินใจสนับสนุนคุณสมบัติของภูมิภาค
— Jeff Clayton

1
ไม่รองรับพื้นที่ CSS อีกต่อไป
— 1stthomas

2
ภูมิภาคทำให้ฉันสามารถกำหนดเป้าหมาย Safari 6.1 ถึง 11 และ 7.1 ถึง 11.2 บน iOS และเพียงอย่างเดียวก็ยอดเยี่ยมอยู่แล้ว
— lowtechsun

@lowtechsun - การโพสต์สถิติของคุณที่ยอดเยี่ยมเกี่ยวกับเรื่องนี้แฮ็คนั้นดีพอ ๆ กับความรู้ในสิ่งที่เบราว์เซอร์กำหนด
— Jeff Clayton

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

    }

}

นี่เป็นชุดที่ดีใช้แฮ็คอย่างดีพร้อมการตั้งค่าอุปกรณ์หลายรายการสำหรับเว็บไซต์โดยใช้มุมมองที่ตอบสนองได้
— Jeff Clayton

2

หมายเหตุ:หาก iOS เท่านั้นเพียงพอ (หากคุณยินดีเสียสละเดสก์ท็อป Safari) สิ่งนี้จะได้ผล:

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

1

คุณสามารถใช้แฮ็คแบบสอบถามสื่อเพื่อเลือก Safari 6.1-7.0 จากเบราว์เซอร์อื่น

@media \\0 screen {}

คำเตือน: แฮ็คนี้มีเป้าหมายเป็น Chrome รุ่นเก่า (ก่อนกรกฎาคม 2013)


มันใช้งานไม่ได้กับ Safari รุ่นใหม่สถิติสำหรับอันนี้กำลังใช้การผ่าตัด แต่ Safari 6.1-7.0, Chrome 22-28 ยังคงมีประโยชน์
— Jeff Clayton

0

งานนี้:

@media not all and (min-resolution:.001dpcm) { 
  @media {
    /* your code for Safari Desktop & Mobile */
    body {
      background-color: red;
      color: blue;
    }
    /* end */
  }
}

0

ในตอนท้ายฉันใช้ JavaScript เล็กน้อยเพื่อให้บรรลุ:

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

จากนั้นใน CSS ของฉันเพื่อกำหนดเป้าหมายเครื่องมือเบราว์เซอร์ Apple ตัวเลือกจะเป็น:

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

0

https://stackoverflow.com/a/17637937/3174065 มีการตอบคำถามที่นี่แม้ว่าวิธีนี้จะใช้ JS บางตัว หากใช้ต้องแน่ใจว่าใส่ js ไว้ในส่วนท้ายของร่างกายต้องโหลดให้เต็มเพื่อที่จะทำการยิงอย่างถูกต้องเมื่อวางลงบนหัวมันจะเกิดข้อผิดพลาดเพราะมันจะยิงก่อนที่ร่างกายจะถูกโหลด

จากนั้นจะเพิ่มคลาส. safari ให้กับร่างกาย แต่เฉพาะในซาฟารีเท่านั้นทำให้การกำหนดเป้าหมาย css ง่ายมาก


-1

มันทำงานได้ 100% ในซาฟารี .. ฉันพยายามแล้ว

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

ใช้งานได้กับ Safari เวอร์ชันเก่าไม่ใช่เวอร์ชันปัจจุบัน - 6.1 และใหม่กว่า
— Jeff Clayton

-1

ฉันได้ทดสอบแล้วและมันก็ใช้ได้ผลสำหรับฉัน

@media only screen and (-webkit-min-device-pixel-ratio: 1) {
 ::i-block-chrome, .myClass {
    height: 1070px !important;
  }
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.