Làm cách nào để chỉ áp dụng các quy tắc CSS cụ thể cho Chrome?


102

Có cách nào để áp dụng CSS sau đây cho một divchỉ cụ thể trong Google Chrome không?

position:relative;
top:-2px;


1
Bạn đang phải đối mặt với vấn đề gì buộc bạn phải làm điều này? Các quy tắc CSS nhắm mục tiêu cho các trình duyệt cụ thể không phải là thiết kế tuyệt vời và trong hầu hết các trường hợp, ngày nay không cần thiết nữa.
Pekka

@Pekka đây là vấn đề của tôi stackoverflow.com/questions/9311965/... , và tôi phát hiện ra rằng giải pháp duy nhất là thêm những nhưng chỉ cho chrome, xin vui lòng giúp đỡ :(
user1213707

Câu trả lời trong câu hỏi ban đầu của bạn có giúp ích được gì không?
Pekka

2
Cá nhân tôi phát triển cho Chrome (có xu hướng sao chép sang Firefox) và lo lắng về IE ở cuối.
SpaceBeers

Câu trả lời:


196

Giải pháp CSS

từ https://jeffclayton.wordpress.com/2015/08/10/1279/

/* Chrome, Safari, AND NOW ALSO the Edge Browser and Firefox */
@media and (-webkit-min-device-pixel-ratio:0) {
  div{top:10;} 
}

/* Chrome 29+ */
@media screen and (-webkit-min-device-pixel-ratio:0)
  and (min-resolution:.001dpcm) {
    div{top:0;} 
}

/* Chrome 22-28 */
@media screen and(-webkit-min-device-pixel-ratio:0) {
  .selector {-chrome-:only(; 
     property:value;
  );} 
}

Giải pháp JavaScript

if (navigator.appVersion.indexOf("Chrome/") != -1) {
// modify button 
}

16
Quy tắc này sẽ được áp dụng cả Safari và Chrome
Miuranga

1
@AlirezaNoori có lẽ vì nó áp dụng cho cả Chrome Safari, không chỉ Chrome.
thom_nic

2
Nó cũng làm việc trong IE Edge, kiểm tra này jeffclayton.wordpress.com/2015/08/10/1279
llamerr

1
Tôi đã sử dụng data-ng-classcho góc và thêm một .chromelớp với biểu thức JS. Làm việc như người ở. Cảm ơn
Kraken

1
Tôi thấy nó hữu ích khi có các truy vấn phương tiện ở dưới cùng.
Brownrice

27

Như chúng ta biết, Chrome là một Webkit trình duyệt , Safari cũng là một trình duyệt Webkit, và cả Opera, vì vậy rất khó để nhắm mục tiêu Google Chrome, bằng cách sử dụng truy vấn phương tiện hoặc hack CSS, nhưng Javascript thực sự hiệu quả hơn.

Đây là đoạn mã Javascript sẽ nhắm mục tiêu Google Chrome 14 trở lên,

  var isChrome = !!window.chrome && !!window.chrome.webstore;

và dưới đây là danh sách các bản hack Trình duyệt có sẵn, dành cho Google chrome, bao gồm cả trình duyệt bị ảnh hưởng, bởi vụ hack đó

Hack WebKit:

.selector:not(*:root) {}
  • Google Chrome : Tất cả các phiên bản
  • Safari : Tất cả các phiên bản
  • Opera : 14 trở lên
  • Android : Tất cả các phiên bản

Hỗ trợ Hacks:

@supports (-webkit-appearance:none) {}

Google Chrome 28 và Google Chrome> 28, Opera 14 và Opera> 14

  • Google Chrome : 28 trở lên
  • Opera : 14 trở lên

Hack tài sản / giá trị:

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

Google Chrome 28 và Google Chrome <28, Opera 14 và Opera> 14 và Safari 7 và nhỏ hơn 7. - Google Chrome : 28 trở về trước - Safari : 7 trở về trước - Opera : 14 trở lên

Hacks JavaScript: 1

var isChromium = !!window.chrome;
  • Google Chrome : Tất cả các phiên bản
  • Opera : 14 trở lên
  • Android : 4.0.4

JavaScript Hacks: 2 {Webkit}

var isWebkit = 'WebkitAppearance' in document.documentElement.style;
  • Google Chrome : Tất cả các phiên bản
  • Safari : 3 trở lên
  • Opera : 14 trở lên

Hacks JavaScript: 3

var isChrome = !!window.chrome && !!window.chrome.webstore;
  • Google Chrome : 14 trở lên

Hack truy vấn phương tiện: 1

@media \\0 screen {}
  • Google Chrome : 22 đến 28
  • Safari : 7 trở lên

Hack truy vấn phương tiện: 2

@media all and (-webkit-min-device-pixel-ratio:0) and (min-resolution: .001dpcm) { .selector {} }
  • Google Chrome : 29 trở lên
  • Opera : 16 trở lên

Để biết thêm thông tin vui lòng truy cập trang web này


như Sebastian nói @supports (-webkit-xuất hiện: none) {} ảnh hưởng đến Safari, thử nghiệm trên V.10
Dmitrii Malyshev

1
@supports (-webkit-appearance:none) { }hiện đang làm việc cho MS Edge.
Vadim Ovchinnikov

@media all và (-webkit-min-device-pixel-ratio: 0) và (min-Resolution: .001dpcm) {.selector {}} hiện cũng ảnh hưởng đến Firefox
Joe Salazar

13

Bản cập nhật cho chrome> 29 và Safari> 8:

Safari hiện hỗ trợ @supports tính năng này. Điều đó có nghĩa là những bản hack đó cũng có hiệu lực với Safari.

Tôi muốn giới thiệu

@ http://codepen.io/sebilasse/pen/BjMoye

/* Chrome only: */
@media all and (-webkit-min-device-pixel-ratio:0) and (min-resolution: .001dpcm) { 
  p {
    color: red;
  }
}

4
Văn bản cũng có màu đỏ trong FireFox đối với tôi.
Kerry7777

9

Bộ chọn trình duyệt css này có thể giúp bạn. Hãy xem.

Bộ chọn trình duyệt CSS là một javascript rất nhỏ chỉ với một dòng giúp trao quyền cho bộ chọn CSS. Nó cung cấp cho bạn khả năng viết mã CSS cụ thể cho từng hệ điều hành và từng trình duyệt.


Khai báo "css browser selector" hơi khó hiểu đối với một javascript đơn giản. Bản thân CSS không hỗ trợ bất kỳ lựa chọn nào của trình duyệt!
Armin

Xin lỗi nhưng đó là những gì người tạo ra nó đã gọi nó. Tôi vừa mới trích dẫn anh ấy :(
tarashish 17/02/12

Cụm từ rất ngớ ngẩn của tác giả ;-)
Armin

1
các bạn, không thực sự muốn thêm toàn bộ js chỉ cho việc này :( nhưng nếu không thì có thể hữu ích.
Jamie Hutber

Vấn đề chính là nó trở thành một điểm thất bại mong manh vì nó phụ thuộc vào một lập trình viên duy nhất tận tâm và người đó sẽ cần phải theo dõi các thay đổi của họ để cập nhật. Về cơ bản, một cách đáng ngờ để đối phó với một vấn đề đang diễn ra, vì nó có thể hữu ích trong ngắn hạn, nhưng nó không giải quyết được vấn đề.
Patanjali

7

http://www.templatemonster.com/help/how-to-create-browser-specific-css-rules-styles.html

Chỉ áp dụng các quy tắc CSS cụ thể cho Chrome bằng cách sử dụng .selector:not(*:root)với các bộ chọn của bạn:

div {
  color: forestgreen;
}
.selector:not(*:root), .div1 {
  color: #dd14d5;
}
<div class='div1'>DIV1</div>
<div class='div2'>DIV2</div>


2
Hack này đã làm việc cho tôi. Các giải pháp dựa trên độ phân giải màn hình cũng ảnh hưởng đến Firefox.
Steve Breese

@stevebreese Nhận thấy nó, tôi nghi ngờ nó chỉ dành cho các trình duyệt hiện đại.
Shasha

3

Chưa bao giờ gặp trường hợp mà tôi phải thực hiện một cuộc tấn công css chỉ dành cho Chrome cho đến bây giờ. Tuy nhiên, tôi thấy điều này để di chuyển nội dung bên dưới trình chiếu ở nơi rõ ràng: cả hai; không ảnh hưởng gì trong Chrome (nhưng hoạt động tốt ở mọi nơi khác - ngay cả IE!).

@media screen and (-webkit-min-device-pixel-ratio:0) { 
    /* Safari and Chrome, if Chrome rule needed */
    .container {
     margin-top:100px;
    }

    /* Safari 5+ ONLY */
    ::i-block-chrome, .container {
     margin-top:0px;
    }

1

nếu bạn muốn, chúng tôi có thể thêm lớp vào brwoser cụ thể, xem [fiddle link] [1] [1]:

var BrowserDetect = {
        init: function () {
            this.browser = this.searchString(this.dataBrowser) || "Other";
            this.version = this.searchVersion(navigator.userAgent) || this.searchVersion(navigator.appVersion) || "Unknown";
        },
        searchString: function (data) {
            for (var i = 0; i < data.length; i++) {
                var dataString = data[i].string;
                this.versionSearchString = data[i].subString;

                if (dataString.indexOf(data[i].subString) !== -1) {
                    return data[i].identity;
                }
            }
        },
        searchVersion: function (dataString) {
            var index = dataString.indexOf(this.versionSearchString);
            if (index === -1) {
                return;
            }

            var rv = dataString.indexOf("rv:");
            if (this.versionSearchString === "Trident" && rv !== -1) {
                return parseFloat(dataString.substring(rv + 3));
            } else {
                return parseFloat(dataString.substring(index + this.versionSearchString.length + 1));
            }
        },

        dataBrowser: [
            {string: navigator.userAgent, subString: "Edge", identity: "MS Edge"},
            {string: navigator.userAgent, subString: "MSIE", identity: "Explorer"},
            {string: navigator.userAgent, subString: "Trident", identity: "Explorer"},
            {string: navigator.userAgent, subString: "Firefox", identity: "Firefox"},
            {string: navigator.userAgent, subString: "Opera", identity: "Opera"},  
            {string: navigator.userAgent, subString: "OPR", identity: "Opera"},  

            {string: navigator.userAgent, subString: "Chrome", identity: "Chrome"}, 
            {string: navigator.userAgent, subString: "Safari", identity: "Safari"}       
        ]
    };

    BrowserDetect.init();


    var bv= BrowserDetect.browser;
    if( bv == "Chrome"){
        $("body").addClass("chrome");
    }
    else if(bv == "MS Edge"){
     $("body").addClass("edge");
    }
    else if(bv == "Explorer"){
     $("body").addClass("ie");
    }
    else if(bv == "Firefox"){
     $("body").addClass("Firefox");
    }


$(".relative").click(function(){
$(".oc").toggle('slide', { direction: 'left', mode: 'show' }, 500);
$(".oc1").css({
   'width' : '100%',
   'margin-left' : '0px',
   });
});
.relative {
  background-color: red;
  height: 30px;
  position: relative;
  width: 30px;
}
.relative .child {
  left: 10px;
  position: absolute;
  top: 4px;
}
.oc {
  background: #ddd none repeat scroll 0 0;
  height: 300px;
  position: relative;
  width: 500px;
  float:left;
}
.oc1 {
  background: #ddd none repeat scroll 0 0;
  height: 300px;
  position: relative;
  width: 300px;
  float:left;
  margin-left: 10px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/modernizr/2.8.3/modernizr.min.js"></script>
<div class="relative">
<span class="child"></span>
</div>
<div class="oc">
<div class="data"> </div>
</div>
<div class="oc1" style="display: block;">
<div class="data"> </div>
</div>


1

Tôi đang sử dụng một hỗn hợp sass cho phong cách chrome, đây là để Chrome 29+mượn giải pháp từ Martin Kristiansson ở trên.

@mixin chrome-styles {
  @media screen and (-webkit-min-device-pixel-ratio:0)
    and (min-resolution:.001dpcm) {
      @content;
  }
}

Sử dụng nó như thế này:

@include chrome-styles {
  .header { display: none; }
}

5
Firefox hiện cũng đọc quy tắc này, vì vậy sẽ không còn tốt nếu bạn chỉ muốn nhắm mục tiêu duy nhất Chrome.
Mahn

0

Chrome không cung cấp các điều kiện riêng để đặt định nghĩa CSS chỉ dành cho nó! Không cần thiết phải làm điều này, vì Chrome diễn giải các trang web như được xác định trong tiêu chuẩn w3c.

Vì vậy, bạn có hai khả năng có ý nghĩa:

  1. Nhận trình duyệt hiện tại bằng javascript ( xem tại đây )
  2. Tải trình duyệt hiện tại bằng php / serveride ( xem tại đây )

2
Chắc chắn có những lý do tại sao bạn muốn áp dụng cho Chrome nhưng không phải là Safari hoặc Firefox, ví dụ: sự khác biệt trong cách trình duyệt hiển thị các phần tử <select>. Một giải pháp chỉ CSS sẽ gọn gàng hơn nhiều so với việc phải liên quan đến mã phía máy chủ hoặc phía máy khách.
thom_nic

1
Chrome không hoàn hảo. Cũng giống như bất kỳ phần mềm nào khác, nó có một số lỗi trong công cụ kết xuất và một số lỗi không được sửa sau một vài năm. Vì vậy, việc có thể phát hiện Chrome để chống lại tác động của những lỗi đó là rất quan trọng. bug.chromium.org/p/chromium/issues/…
Joe Salazar

0
/* saf3+, chrome1+ */
@media screen and (-webkit-min-device-pixel-ratio:0) {
     /*your rules for chrome*/
     #divid{ 
         position:relative;
         top:-2px; 
     }
}

kiểm tra cái này. nó hoạt động cho tôi.


0

Quá đơn giản. Chỉ cần thêm lớp thứ hai hoặc id vào phần tử của bạn tại thời điểm tải chỉ định trình duyệt đó là.

Vì vậy, về cơ bản ở giao diện người dùng, hãy phát hiện trình duyệt sau đó đặt id / class và css của bạn sẽ được xác định bằng cách sử dụng các thẻ tên cụ thể của trình duyệt đó

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.