มี 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.