特定のCSSルールをChromeのみに適用する方法は?


102

次のCSSをdivGoogle Chromeの特定のものにのみ適用する方法はありますか?

position:relative;
top:-2px;


1
これを迫られているどの問題に直面していますか?特定のブラウザーのCSSルールを対象とすることは優れた設計ではなく、ほとんどの場合、今日ではもはや必要ありません。
Pekka

@Pekkaこれは私の問題ですstackoverflow.com/questions/9311965/…、そして私は唯一の解決策はそれらを追加することですが、クロムのためだけであることがわかりました、助けてください:(
user1213707

元の質問の答えは役に立ちませんでしたか?
Pekka

2
個人的に私はChrome(Firefoxにコピーする傾向がある)向けに開発し、最後にIEについて心配しています。
SpaceBeers

回答:


196

CSSソリューション

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

JavaScriptソリューション

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

16
このルールは、サファリとクロムの両方に適用されます
ミウランガ2013年

1
@AlirezaNooriは、Chrome だけでなく、Chrome Safariの両方に適用されるためと考えられます。
thom_nic 2014年

2
IE Edgeでも機能します。このjeffclayton.wordpress.com/2015/08/10/1279を
llamerr

1
data-ng-classはangular に使用.chromeし、JS式のクラスを追加しました。魅力のように働いた。ありがとう
クラーケン

1
メディアクエリが一番下にあると助かった。
ブラウンライス2016

27

ご存知のように、ChromeはWebkitブラウザであり、SafariもWebkitブラウザであり、Operaでもあるため、メディアクエリやCSSハックを使用してGoogle Chromeをターゲットにすることは非常に困難ですが、JavaScriptの方が効果的です。

これは、Google Chrome 14以降をターゲットとするJavascriptコードです。

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

以下は、影響を受けるブラウザを含むGoogleクロムで利用可能なブラウザハックのリストです。

WebKitハック:

.selector:not(*:root) {}
  • Google Chromeすべてのバージョン
  • Safariすべてのバージョン
  • Opera :14以降
  • Androidすべてのバージョン

ハックをサポート:

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

Google Chrome 28、およびGoogle Chrome> 28、Opera 14およびOpera> 14

  • Google Chrome28以降
  • Opera :14以降

プロパティ/値ハック:

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

7.よりGoogle Chromeの28、およびGoogle Chromeの<28、オペラ座14とオペラ> 14、およびSafari 7と少ない- Google Chromeの28と前 - サファリ7と前 - オペラ:14以降

JavaScriptハック:1

var isChromium = !!window.chrome;
  • Google Chromeすべてのバージョン
  • Opera :14以降
  • Android4.0.4

JavaScriptハック:2 {Webkit}

var isWebkit = 'WebkitAppearance' in document.documentElement.style;
  • Google Chromeすべてのバージョン
  • Safari3以降
  • Opera :14以降

JavaScriptハック:3

var isChrome = !!window.chrome && !!window.chrome.webstore;
  • Google Chrome14以降

メディアクエリハック:1

@media \\0 screen {}
  • Google Chrome22から28
  • Safari7以降

メディアクエリハック:2

@media all and (-webkit-min-device-pixel-ratio:0) and (min-resolution: .001dpcm) { .selector {} }
  • Google Chrome29以降
  • Opera16以降

詳細については、このウェブサイトをご覧ください。


セバスチャンが言ったように、@ supports(-webkit-appearance:none){}はv.10でテストされたSafariに影響します
Dmitrii Malyshev

1
@supports (-webkit-appearance:none) { }現在、MS Edgeで機能しています。
Vadim Ovchinnikov 2017

@media allおよび(-webkit-min-device-pixel-ratio:0)および(min-resolution:.001dpcm){.selector {}}もFirefoxに影響を与える
Joe Salazar

13

chrome> 29およびSafari> 8のアップデート:

Safari @supportsもこの機能をサポートしています。つまり、これらのハックはSafariでも有効です。

私がお勧めします

@ 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
FireFoxでは、テキストも赤です。
Kerry7777

9

この CSSブラウザーセレクターが役立つ場合があります。見てください。

CSSブラウザーセレクターは、CSSセレクターを強化する1行だけの非常に小さなJavaScriptです。それはあなたに各オペレーティングシステムと各ブラウザのための特定のCSSコードを書く能力を与えます。


「cssブラウザーセレクター」の宣言は、単純なjavascriptには少し混乱します。CSS自体は、ブラウザによる選択をサポートしていません。
アーミン

申し訳ありませんが、それはその作成者がそれを呼んだものです。私はちょうど彼を引用した:(
tarashish

著者の非常に面白いフレーズ;-)
Armin

1
あなたがたは、本当にこれだけのために、JSの全体の負荷を追加したくない:(それ以外は有用である可能性があります。
ジェイミーHutber

主な問題は、1人のプログラマが専任であることに依存しているため、脆弱な単一障害点になり、最新の状態に保つために変更を追跡し続ける必要があることです。基本的に、進行中の問題に対処するための疑わしい方法です。短期的には役立つかもしれませんが、問題は解決しません。
パタンジャリ

7

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

.selector:not(*:root)セレクターを使用してのみ、特定のCSSルールをChromeに適用します。

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


2
このハックは私のために働いた。画面解像度に依存するソリューションは、Firefoxにも影響を与えました。
Steve Breese

@stevebreeseそれに気づいた、私はそれが現代のブラウザのみのためだと思う。
シャシャ

3

これまで、Chromeのみのcssハックを実行する必要があったインスタンスに遭遇したことはありません。ただし、これはコンテンツをスライドショーの下に移動して、clear:bothであることがわかりました。Chromeでは何も影響を受けませんでした(ただし、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

必要に応じて、特定のブラウザにクラスを追加できます。[フィドルリンク] [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

私はクロムスタイルにsassミックスインを使用しています。これは、Chrome 29+上記のMartin Kristianssonからソリューションを借用するためのものです。

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

次のように使用します。

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

5
Firefoxはこのルールも読み取るようになったため、Chromeのみをターゲットにする場合は、もはや適切ではありません。
Mahn

0

Chromeは、CSS定義を設定するための独自の条件を提供していません。これを行う必要はありません。Chromeがw3c標準で定義されているようなWebサイトを解釈するためです。

したがって、2つの意味のある可能性があります。

  1. JavaScriptで現在のブラウザを取得しますこちらをご覧ください
  2. 現在のブラウザをphp / serversideで取得します(ここを見てください

2
Chromeに適用したいがSafariやFirefoxには適用したくない理由は確かにあります。例えば、ブラウザが<select>要素をレンダリングする方法の違いです。CSSのみのソリューションは、サーバー側またはクライアント側のコードを必要とするよりもはるかにクリーンです。
thom_nic 2014年

1
Chromeは完璧ではありません。他のソフトウェアと同様に、レンダリングエンジンにもバグがあり、数年後には修正されないものもあります。したがって、これらのバグの影響に対抗するためにChromeを検出できることが重要です。bugs.chromium.org/p/chromium/issues/...
ジョー・サラザール

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

this.itが動作することを確認してください。


0

とても簡単。読み込み時に2番目のクラスまたはIDを要素に追加して、どのブラウザーかを指定します。

したがって、基本的にはフロントエンドで、ブラウザーを検出してからID /クラスを設定すると、ブラウザー固有の名前タグを使用してCSSが定義されます

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.