Có hack css cho safari chỉ KHÔNG chrome?


182

Tôi đang cố gắng tìm một bản hack css cho safari KHÔNG chrome, tôi biết đây là cả hai trình duyệt webkit nhưng tôi gặp vấn đề với sự sắp xếp div trong chrome và safari, mỗi màn hình hiển thị khác nhau.

tôi đã cố gắng sử dụng nó nhưng nó cũng ảnh hưởng đến chrome

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

Có ai biết một cái khác sẽ chỉ áp dụng cho safari không?


Không sử dụng CSS, bạn sẽ cần sử dụng javascript. stackoverflow.com/questions/5899783/detect-safari-USE-jquery
Christian

Tôi quan tâm đến vấn đề thực tế hơn là một giải pháp mỏng manh và dễ bị tấn công. Là nó (vẫn) có sẵn ở đâu đó?
Matijs

Đối với những người đang đăng bài 'không hoạt động' - vui lòng nhận ra rằng bạn cần biết phiên bản Safari mà bạn đang thử nghiệm. Không có giải pháp Safari 'bắt tất cả' cho mọi phiên bản. Bạn cần cung cấp thông tin đó với bài đăng của mình hoặc không ai có thể hỗ trợ bạn trong việc tìm giải pháp.
Jeff Clayton

Các phiên bản khác nhau của Safari có các nhu cầu khác nhau - kiểm tra các ví dụ trực tiếp tại đây: browserstranguity.bitbucket.io/css_hacks.html#safari [Hoặc Mirror] browserstranguity.github.io/css_hacks.html#safari
Jeff Clayton

Câu trả lời:


356
  • CẬP NHẬT CHO CATALINA & SAFARI 13 (Cập nhật đầu năm 2020) *

LƯU Ý: Bộ lọc và trình biên dịch (chẳng hạn như công cụ SASS) mong đợi mã 'trình duyệt chéo' tiêu chuẩn - KHÔNG phải các bản hack CSS như thế này có nghĩa là chúng sẽ viết lại, phá hủy hoặc xóa các bản hack vì đó không phải là bản hack. Phần lớn đây là mã không chuẩn đã được tạo ra một cách tỉ mỉ để chỉ nhắm mục tiêu các phiên bản trình duyệt duy nhất và không thể hoạt động nếu chúng bị thay đổi. Nếu bạn muốn sử dụng nó với, bạn phải tải bản hack CSS đã chọn SAU bất kỳ bộ lọc hoặc trình biên dịch nào . Điều này có vẻ như được đưa ra nhưng đã có rất nhiều nhầm lẫn giữa những người không nhận ra rằng họ đang hoàn tác một vụ hack bằng cách chạy nó thông qua phần mềm như vậy không được thiết kế cho mục đích này.

Safari đã thay đổi kể từ phiên bản 6.1, như nhiều người đã nhận thấy.

Xin lưu ý: nếu bạn đang sử dụng Chrome [và giờ là Firefox] trên iOS (ít nhất là trong phiên bản iOS 6.1 trở lên) và bạn tự hỏi tại sao không có bản hack nào có thể tách Chrome khỏi Safari, đó là vì phiên bản Chrome của iOS đang sử dụng công cụ Safari. Nó sử dụng hack Safari chứ không phải Chrome. Thông tin thêm về điều đó tại đây: https://allthingsd.com/20120628/googles-chrom-for-ios-is-more-like-a-chrom-plated-apple/ Firefox cho iOS đã được phát hành vào mùa thu năm 2015. Nó cũng đáp ứng Safari Hacks, nhưng không ai trong số Firefox, giống như Chrome Chrome.

CSONG: Nếu bạn đã thử một hoặc nhiều bản hack và gặp sự cố khiến chúng hoạt động, vui lòng đăng mã mẫu (tốt hơn là trang thử nghiệm) - bản hack bạn đang thử và trình duyệt (phiên bản chính xác!) đang sử dụng cũng như thiết bị bạn đang sử dụng. Không có thông tin bổ sung đó, tôi hoặc bất kỳ ai khác ở đây không thể hỗ trợ bạn.

Thường thì nó là một sửa chữa đơn giản hoặc một dấu chấm phẩy bị thiếu. Với CSS, thông thường hoặc vấn đề về thứ tự mã được liệt kê trong biểu định kiểu, nếu không chỉ là lỗi CSS. Vui lòng kiểm tra các bản hack ở đây trên trang web thử nghiệm. Nếu nó hoạt động ở đó, điều đó có nghĩa là hack thực sự đang hoạt động cho thiết lập của bạn, nhưng đó là một thứ khác cần được giải quyết. Mọi người ở đây thực sự thích giúp đỡ, hoặc ít nhất là chỉ cho bạn đi đúng hướng.

Trang web thử nghiệm:

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

VÀ MIRROR!

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

Đây là cách để bạn sử dụng cho các phiên bản Safari mới hơn.

Bạn nên thử cái này trước vì nó bao gồm các phiên bản Safari hiện tại và chỉ thuần Safari:

Cái này vẫn hoạt động đúng với Safari 13 (đầu năm 2020):

/* Safari 7.1+ */

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

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

}

Để bao gồm nhiều phiên bản hơn, 6.1 trở lên, tại thời điểm này, bạn phải sử dụng cặp hack css tiếp theo. Một cho 6.1-10.0 đi với một xử lý 10.1 trở lên.

Vì vậy, sau đó - đây là một cái tôi đã làm cho Safari 10.1+:

Truy vấn phương tiện kép rất quan trọng ở đây, đừng xóa nó.

/* Safari 10.1+ */

@media not all and (min-resolution:.001dpcm) { @media {

    .safari_only { 

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

    }
}}

Hãy thử cái này nếu SCSS hoặc bộ công cụ khác gặp sự cố với truy vấn phương tiện lồng nhau:

/* Safari 10.1+ (alternate method) */

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

    .safari_only { 

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

    }
}}

Cái tiếp theo này hoạt động cho 6.1-10.0 nhưng không phải 10.1 (cập nhật cuối tháng 3 năm 2017)

Bản hack này tôi đã tạo ra trong nhiều tháng thử nghiệm và thử nghiệm bằng cách kết hợp nhiều bản hack khác.

GHI CHÚ: như trên, truy vấn phương tiện kép KHÔNG phải là một tai nạn - nó loại trừ nhiều trình duyệt cũ hơn không thể xử lý lồng nhau truy vấn phương tiện. - Không gian bị thiếu sau một trong những 'và cũng quan trọng. Rốt cuộc, đây là một bản hack ... và là bản duy nhất hoạt động cho 6.1 và tất cả các phiên bản Safari mới hơn tại thời điểm này. Ngoài ra, hãy lưu ý như được liệt kê trong các bình luận bên dưới, hack là css không chuẩn và phải được áp dụng SAU một bộ lọc. Các bộ lọc như công cụ SASS sẽ viết lại / hoàn tác hoặc loại bỏ hoàn toàn nó.

Như đã đề cập ở trên, vui lòng kiểm tra trang thử nghiệm của tôi để xem nó hoạt động như cũ (không sửa đổi!)

Và đây là mã:

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

    }
}}

Để biết thêm CSS Safari phiên bản cụ thể, vui lòng tiếp tục đọc bên dưới.

/* Safari 11+ */

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

    .safari_only { 

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

    }
}}

Một cho Safari 11.0:

/* Safari 11.0 (not 11.1) */

html >> * .safari_only {

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

}

Một cho Safari 10.0:

/* Safari 10.0 (not 10.1) */

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

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

}

Công việc sửa đổi một chút cho 10.1 (chỉ):

/* 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 (Thiết bị không phải 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; 

}

Hacks CSS 9:

Một tính năng đơn giản hỗ trợ hack truy vấn cho Safari 9.0 trở lên:

@supports (-webkit-hyphens:none)
{

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

}

Cách hack gạch dưới đơn giản cho Safari 9.0 trở lên:

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

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

}

Một số khác cho Safari 9.0 trở lên:

/* Safari 9+ */

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

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

}

và một truy vấn tính năng hỗ trợ khác nữa:

/* Safari 9+ */

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

    .safari_only { 

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

    }
}

Một cho 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 hiện bao gồm tính năng phát hiện để chúng tôi có thể sử dụng ngay bây giờ ...

/* Safari 9 */

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

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

}

Bây giờ chỉ nhắm mục tiêu thiết bị iOS. Như đã đề cập ở trên, vì Chrome trên iOS được bắt nguồn từ Safari, nên dĩ nhiên nó cũng đạt được điều đó.

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

}

một cho Safari 9.0+ nhưng không phải cho thiết bị iOS:

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

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

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

}

Và một cho Safari 9.0-10.0 nhưng không phải cho thiết bị iOS:

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

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

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

}

Dưới đây là các bản hack tách riêng 6.1-7.0 và 7.1+ Chúng cũng yêu cầu kết hợp nhiều bản hack để có kết quả đúng:

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

    );}
}

Vì tôi đã chỉ ra cách chặn các thiết bị iOS, đây là phiên bản sửa đổi của Safari 6.1+ hack nhắm vào các thiết bị không phải 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; 

    }
}}

Để sử dụng chúng:

<div class="safari_only">This text will be Blue in Safari</div>

Thông thường [như trong câu hỏi này] lý do mọi người hỏi về hack Safari chủ yếu liên quan đến việc tách nó khỏi Google Chrome (một lần nữa KHÔNG phải iOS!) Điều quan trọng là phải đăng bài thay thế: cách nhắm mục tiêu Chrome riêng biệt với Safari, vì vậy Tôi đang cung cấp cho bạn ở đây trong trường hợp cần thiết.

Dưới đây là những điều cơ bản, một lần nữa hãy kiểm tra trang thử nghiệm của tôi để biết nhiều phiên bản cụ thể của Chrome, nhưng những phiên bản này bao gồm Chrome nói chung. Chrome là phiên bản 45, phiên bản Dev và Canary lên đến phiên bản 47 tại thời điểm này.

Bộ kết hợp truy vấn phương tiện cũ của tôi, tôi đã cài đặt trên trình duyệt vẫn hoạt động chỉ dành cho Chrome 29+:

/* Chrome 29+ */

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

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

    }
}

Truy vấn tính năng @supports hoạt động tốt cho Chrome 29+ cũng như ... phiên bản sửa đổi của phiên bản chúng tôi đang sử dụng cho Chrome 28+ bên dưới. Safari 9, các trình duyệt Firefox sắp tới và trình duyệt Microsoft Edge không được chọn với trình duyệt này:

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

    }
}

Trước đây, Chrome 28 và mới hơn rất dễ nhắm mục tiêu. Đây là một cái tôi đã gửi cho các trình duyệt sau khi thấy nó được bao gồm trong một khối mã CSS khác (ban đầu không nhằm mục đích hack CSS) và nhận ra nó làm gì, vì vậy tôi đã trích xuất phần có liên quan cho mục đích của chúng tôi:

[LƯU Ý:] Phương pháp cũ hơn này bên dưới bây giờ sẽ hiển thị Safari 9 và trình duyệt Microsoft Edge mà không cần cập nhật ở trên. Các phiên bản sắp tới của Firefox và Microsoft Edge đã thêm hỗ trợ cho nhiều mã -webkit- CSS trong lập trình của họ và cả Edge và Safari 9 đều có thêm hỗ trợ cho phát hiện tính năng @supports. Chrome và Firefox đã bao gồm @supports trước đây.

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

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

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

    }
}

Khối phiên bản Chrome 22-28 (Nếu cần để hỗ trợ các phiên bản cũ hơn) cũng có thể nhắm mục tiêu với một nút xoắn trên các bản hack kết hợp Safari của tôi, tôi đã đăng ở trên:

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

Giống như các bản hack định dạng Safari CSS ở trên, chúng có thể được sử dụng như sau:

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

Vì vậy, bạn không phải tìm kiếm nó trong bài viết này, đây là trang thử nghiệm trực tiếp của tôi một lần nữa:

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

[Hoặc Gương]

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

Trang thử nghiệm cũng có nhiều trang khác, đặc biệt dựa trên phiên bản để tiếp tục giúp bạn phân biệt giữa Chrome và Safari và cũng có nhiều bản hack cho trình duyệt web Firefox, Microsoft Edge và Internet Explorer.

LƯU Ý: Nếu có điều gì đó không phù hợp với bạn, trước tiên hãy kiểm tra trang thử nghiệm, nhưng cung cấp mã ví dụ và KHI hack mà bạn đang cố gắng để bất kỳ ai hỗ trợ bạn.


9
Chỉ muốn nói rằng trang thử nghiệm là tuyệt vời. Bây giờ tôi có thể duyệt đến trang web đó với bất kỳ thiết bị nào và xem quy tắc css nào được áp dụng!
duyn9uyen

1
Điều này sẽ áp dụng cho Safari trên iPhone hoặc iPad?
Greg Rozmarynowycz

1
thực ra, tôi chỉ giải quyết câu hỏi của riêng mình bằng cách sử dụng kết hợp ví dụ trên AND the (; property: value;); dưới đây và nó đã làm việc tuyệt vời!
mydoglixu

1
Việc hack cho Safari 6.1+ ở đầu câu trả lời này sẽ gây ra lỗi trong trình biên dịch Sass. Có cách nào để giải quyết nó?
Blackbird

2
@Blackbird Xin lỗi nhưng bạn không thể biên dịch hoặc lọc các bản hack, nó sẽ phá hỏng chúng. Chúng phải được sử dụng nguyên trạng. (Thêm chúng vào tệp css đã hoàn thành sau khi biên dịch.) Thực tế là chúng không chuẩn là lý do tại sao chúng hoạt động.
Jeff Clayton

89

Có một cách để lọc Safari 5+ từ 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/ trên - Tôi đã làm việc trên nhiều (tôi kiểm tra và tạo các bản hack css cho browserhacks.com) và trang thử nghiệm tại đây: browserstranguity.bitbucket.org/css_hacks.html#webkit
Jeff Clayton

Lưu ý: trong iOS [đã thử nghiệm trong iOS 7], phiên bản chrome thực sự đang chạy công cụ safari, vì vậy trên ipad hoặc iphones, bạn sử dụng các bản hack safari. Đối với các thiết bị khác, chúng là khác nhau.
Jeff Clayton

Vì vậy, về cơ bản mã trong câu trả lời hoạt động cho Safari 5.0 và 6.0 chứ không phải 6.1+?
Nic Cottrell

Để hoàn toàn chính xác, cấu trúc :: i-block-chrome, .myClass {} chỉ cho phép Safari 5.1-6.0, nhưng Chrome 10-24 (phiên bản Chrome cũ không thực sự được sử dụng nữa nên không hoàn toàn đáng nói) - Các bản hack Safari có xu hướng hoạt động như vậy: một lô xử lý 5.1-6.0, một xử lý khác 6.1-7.0 và các bản mới hơn xử lý 7.1-8.0. Họ dường như cập nhật mọi thứ rất nhiều cho đến khi họ quyết định chuyển sang phiên bản số tiếp theo rất gần với phiên bản '.1' trước đó.
Jeff Clayton

Tại thời điểm trả lời này vào năm 2013, Safari 6.1 mới được phát hành, vì vậy không đủ người đã thấy rằng trình duyệt đã thay đổi nên đây là trình duyệt chính xác nhất vào thời điểm đó. Nếu bạn cần những cái mới hơn kiểm tra câu trả lời của tôi dưới đây. Đây là một câu trả lời tuyệt vời tại thời điểm nó được cung cấp. Thời gian thay đổi tuy nhiên vì vậy tôi đã đăng công việc của mình dưới dạng cập nhật lên bản này. Phải mất vài tháng để tôi tạo ra các bản 6.1-7.0 và 7.1-8.0. Tôi hy vọng bạn thích kết quả. Nhiều khả năng khi một phiên bản 8.1 được phát hành nếu theo mô hình, nó cũng sẽ yêu cầu một bản hack khác. Một lần nữa chỉ có thời gian sẽ trả lời.
Jeff Clayton

21

Chỉ có Sarari

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

8
Quan tâm để thêm một số lời giải thích? Tôi có nghĩa đen là root: root?
Nubtacular

1
Điều này hoàn toàn chính xác cho Safari 3.x (và chỉ phiên bản Chrome 1.0 mặc dù không ai sử dụng Chrome 1.0 vì hiện tại nó đã ở tuổi 30 ...)
Jeff Clayton

Cái này hiện cũng nhắm vào Safari 9.0, vì vậy các số liệu thống kê đầy đủ đã được cập nhật: / * Chrome 1.0, Safari 3.X, Safari 9.0+ * /
Jeff Clayton

4
Bộ :not(:root:root)chọn không hợp lệ theo thông số CSS Selector 3 (trong đó chỉ :not()có thể chứa một bộ chọn đơn giản, tức là một bộ chọn loại hoặc một ID hoặc một lớp hoặc một lớp giả), nhưng hoàn toàn hợp lệ theo CSS Selector 4 (nơi :not()chấp nhận danh sách bộ chọn). Đúng là hiện tại chỉ có Safari hiểu cú pháp CSS Selector 4, nhưng giải pháp này không phải là bằng chứng trong tương lai.
Ilya Streltsyn 7/07/2016

2
Rất ít vụ hack không (và nhiều mã tiêu chuẩn thực tế không phải do thay đổi phiên bản) trong tương lai. Kế hoạch tốt nhất là nếu bạn định sử dụng hack css, chỉ sử dụng nó như một cách khắc phục tạm thời để mua thời gian thực hiện cập nhật trình duyệt chéo chính thức hơn.
Jeff Clayton

14

Bản hack này chỉ hoạt động 100% cho safari 5.1-6.0. Tôi vừa thử nó thành công.

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

3
Bản hack này thực sự dành cho cả Chrome và Safari ở các phiên bản khác nhau. Nó cho phép Chrome 10-24 (không ai sử dụng thêm nữa, đó là lý do tại sao mọi người liệt kê rằng Chrome đã chặn Chrome) và Safari 5.1-6.0. Tuy nhiên, nó không hoạt động cho Safari 6.1 và mới hơn. Tại thời điểm đó không có hack tốt hơn của loại hình này.
Jeff Clayton

1
@ veronica-lotti, điều này cũng làm việc cho tôi. Bạn thoát khỏi cơn đau đầu của tôi. Cảm ơn bạn
Andhi I Girls

Mọi người - hãy cẩn thận. Những gì các bình luận này mô tả là một phương pháp không hoạt động cho các phiên bản Safari trong vài năm qua và chỉ hoạt động cho các phiên bản cũ. Điều đó thực sự có nghĩa là hầu hết mọi người trên internet sẽ không có kết quả mà bạn đang tìm kiếm, mà chỉ những người có máy tính cũ. Điều này không hoạt động cho các hệ điều hành hiện tại. Tại thời điểm này, hầu hết mọi người đều có phiên bản 12 trở lên (không phải 6.0 và thấp hơn, chỉ có trong thời đại Windows XP.)
Jeff Clayton

8

Đối với những người muốn thực hiện hack cho Safari 7.0 trở xuống, nhưng không phải 7.1 trở lên - hãy sử dụng:

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

Tôi đã thử cái này trên Safari 7 và không thể làm cho nó hoạt động được. Bạn có thể cung cấp một ví dụ làm việc bằng bất kỳ cơ hội?
Juicy

@Juicy: Có các bài kiểm tra trực tiếp về những điều này tại browserhacks.com - Chúng hoạt động trên Safari 7 trở xuống và Chrome 28 trở xuống. (Như đã đề cập trong bài khác iOS 7 và 8 có lẽ những người khác cũng như sử dụng công cụ Safari dành cho Chrome, vì vậy Chrome và Safari trên iPad đều thực sự Safari)
Jeff Clayton

Bạn có thể đã thử nó trong Safari 7.1, không phải Safari 7.0. Nó có giá trị cho 7.0 trở về trước, không phải 7.1 và mới hơn. Khi câu trả lời này được đăng, 7.0 là phiên bản mới nhất của Safari nên nó đã đúng vào thời điểm đó.
Jeff Clayton

hoạt động cho Safari cho Windows (phiên bản 5.1.7 (7534.57.2))
jave.web

hoạt động cho Safari cho Mac (Phiên bản 6.0.2 (7536.26.17))
Merlin

6

Thay thế lớp của bạn trong (.myClass)

/ * Chỉ Safari * / .myClass: không (: root: root) { enter code here }


Đây là một ứng dụng tốt cho Safari - trình duyệt khác duy nhất mà nó nhắm đến là Chrome 1 (không ai sử dụng Chome 1 nữa)
Jeff Clayton

Thông số kỹ thuật chính xác cho những người không sử dụng máy Mac mới nhất: Chrome 1, Safari 3.X, Safari 9.0+ (không phải Safari 4-8)
Jeff Clayton

Điều này hoạt động với phiên bản mới nhất của Safari 7+ và theo như tôi có thể nói nên là câu trả lời được chấp nhận.
Jason Tham gia

Wow cảm ơn điều này cuối cùng đã làm việc cho tôi sau khi thử rất nhiều bản hack trình duyệt cho Safari !!!
FairyQueen

4

Nhân tiện, đối với bất kỳ ai trong số các bạn chỉ cần nhắm mục tiêu Safari trên điện thoại di động, chỉ cần thêm truy vấn phương tiện vào bản hack này:

@media screen and (max-width: 767px) {
    _::-webkit-full-page-media, _:future, :root .safari_only {
        padding: 10px; //or any property you need
    }
}

Và đừng quên thêm lớp .safari_only vào thành phần bạn muốn nhắm mục tiêu, ví dụ:

<div class='safari_only'> This div will have a padding:10px in a mobile with Safari  </div>

4

Tôi thích sử dụng phương pháp sau:

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

Phương pháp hack JavaScript này yêu cầu gói JQuery được cài đặt.
Jeff Clayton

Đây được coi là thực tế cực kỳ xấu, việc đánh hơi trình duyệt rất dễ bị lỗi và dẫn đến hàng đống lỗi tích cực. Đừng làm điều này, ngay cả việc đánh hơi truy vấn phương tiện cũng rất bẩn nhưng có thể chấp nhận được đối với những thay đổi rất nhỏ.
Wannes

3

Khi sử dụng bộ lọc chỉ dành cho safari này, tôi có thể nhắm mục tiêu Safari (iOS và Mac), nhưng loại trừ Chrome (và các trình duyệt khác):

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

2

Bước 1: sử dụng https://modernizr.com/

Bước 2: sử dụng lớp html .regions để chỉ chọn Safari

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

Modernizr sẽ thêm các lớp html vào DOM dựa trên những gì trình duyệt hiện tại hỗ trợ. Safari hỗ trợ các vùng http://caniuse.com/#feat=css-regions trong khi các trình duyệt khác thì không (dù sao đi nữa). Phương pháp này cũng rất hiệu quả trong việc lựa chọn các phiên bản IE khác nhau. Mạnh mẽ lên.


1
Modernizr là một addon javascript tuyệt vời cho các trang web để xác định trình duyệt, công cụ tuyệt vời! - bản hack này sẽ hoạt động (như những người khác) cho đến khi các trình duyệt khác quyết định hỗ trợ tính năng vùng
Jeff Clayton

1
Các vùng CSS không được hỗ trợ nữa.
1stthomas

2
Các khu vực cho phép tôi nhắm mục tiêu Safari 6.1 đến 11 và 7.1 đến 11.2 trên iOS và chỉ riêng điều đó đã rất tuyệt.
lowTechsun

@lowtechsun - tuyệt vời khi đăng số liệu thống kê của bạn về điều này, hack chỉ tốt khi biết kiến ​​thức về trình duyệt mà họ nhắm mục tiêu.
Jeff Clayton

2

xin chào tôi đã làm điều này và nó làm việc cho tôi

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

    }

}

Đây là một bộ đẹp, sử dụng tốt hack với nhiều cài đặt thiết bị cho các trang web sử dụng chế độ xem phản hồi.
Jeff Clayton

2

Lưu ý: Nếu chỉ dành cho iOS là đủ (nếu bạn sẵn sàng hy sinh máy tính để bàn Safari), thì điều này hoạt động:

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

1

Bạn có thể sử dụng hack truy vấn phương tiện để chọn Safari 6.1-7.0 từ các trình duyệt khác.

@media \\0 screen {}

Tuyên bố miễn trừ trách nhiệm: Bản hack này cũng nhắm vào các phiên bản Chrome cũ (trước tháng 7 năm 2013).


Nó không hoạt động trên Safari mới hơn, tuy nhiên các số liệu thống kê cho cái này là phẫu thuật: Safari 6.1-7.0, Chrome 22-28 nên vẫn tiện dụng.
Jeff Clayton

0

Những công việc này:

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

0

Cuối cùng, tôi sử dụng một ít JavaScript để đạt được nó:

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

sau đó trong CSS của tôi để nhắm mục tiêu công cụ trình duyệt Apple, bộ chọn sẽ là:

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

0

https://stackoverflow.com/a/17637937/3174065 nó được trả lời ở đây mặc dù phương thức này sử dụng một số JS. Nếu được sử dụng, hãy chắc chắn đặt js vào chân trang, cơ thể phải được nạp đầy đủ để điều này được bắn đúng cách, khi đặt vào đầu nó bị lỗi vì nó bắn trước khi cơ thể được tải.

sau đó nó thêm một lớp .safari vào cơ thể, nhưng chỉ trong safari, làm cho việc nhắm mục tiêu vào css rất dễ dàng.


-1

Nó hoạt động 100% trong safari..tôi đã thử

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

Điều này hoạt động trên các phiên bản Safari cũ hơn, không phải phiên bản hiện tại-- 6.1 và mới hơn.
Jeff Clayton

-1

Tôi đã thử nghiệm và nó đã làm việc cho tôi

@media only screen and (-webkit-min-device-pixel-ratio: 1) {
 ::i-block-chrome, .myClass {
    height: 1070px !important;
  }
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.