Safari にのみスタイルを適用する方法はありますか? 質問する

Safari にのみスタイルを適用する方法はありますか? 質問する

Safari にのみ CSS を適用する方法を見つけようとしていますが、見つけたものはすべて Chrome にも適用されます。現在、これらは両方とも WebKit ブラウザであることはわかっていますが、Chrome と Safari の div 配置に問題があり、それぞれ表示が異なります。

私はこれを使用しようとしましたが、Chrome にも影響します:

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

Safari にのみ適用される別の方法をご存知の方はいらっしゃいますか?

ベストアンサー1

  • SONOMA & SAFARI 17.0 向けに更新 (2023 年秋のアップデート) *

お願いします、お願いします --問題があり、本当に助けを得たい場合や、コメントを投稿して他の人を助けたい場合は、ブラウザとデバイス (MacBook/iPad など) をブラウザと OS のバージョン番号とともに投稿してください。

これらのどれも機能しないと主張するのは正確ではありません(実際には不可能です)。これらの多くは実際には「ハック」ではなく、Apple によって Safari のバージョンに組み込まれたコードです。さらに情報が必要です。あなたがここに来てくれたという事実を嬉しく思いますし、物事がうまくいくことを本当に願っています。

ここから何かを自分のサイトで動作させるのに問題がある場合は、以下のリンクからテスト サイトを確認してください。ハックがそこでは動作しているのに自分のサイトでは動作していない場合、ハックは問題ではありません。サイトで何か他のことが起こっています。多くの場合、以下で説明するように CSS の競合だけです。または、何も動作していないのに実際には Safari をまったく使用していないことに気づいていない可能性があります。この情報は、(願わくば) 短期的な問題を抱えている人々を助けるためにここにあることを忘れないでください。

テストサイト:

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

そして鏡!

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

注意: フィルターやコンパイラー (SASS エンジンなど) は、標準の「クロスブラウザー」コードを想定しています。このような CSS ハックは想定していません。つまり、ハックは書き換え、破壊、または削除することになります。これはハックが行うことではないからです。これらの多くは、単一のブラウザー バージョンのみを対象に苦労して作成された非標準コードであり、変更されると機能しません。これらを使用する場合は、フィルターまたはコンパイラーの後に、選択した CSS ハックをロードする必要があります。これは当然のことのように思えるかもしれませんが、このような目的のために設計されていないソフトウェアを介してハックを実行することでハックを元に戻していることに気付いていない人々の間で多くの混乱が生じています。

多くの人が気づいているように、Safari はバージョン 6.1 以降変更されています。

注意: iOS (少なくとも iOS バージョン 6.1 以降) で Chrome (および Firefox) を使用している場合、どのハックも Chrome と Safari を分離していないように見えるのはなぜかと疑問に思うかもしれませんが、それは iOS バージョンの Chrome が Safari エンジンを使用しているためです。Chrome のハックではなく、Safari のハックを使用しています。詳細については、こちらをご覧ください。https://allthingsd.com/20120628/googles-chrome-for-ios-is-more-like-a-chrome-plated-apple/iOS 版 Firefox は 2015 年秋にリリースされました。iOS Chrome と同様に、Safari Hacks には対応していますが、Firefox Hacks には対応していません。

また、1 つ以上のハックを試してもうまくいかない場合は、サンプル コード (できればテスト ページ)、試しているハック、使用しているブラウザー (正確なバージョン)、使用しているデバイスを投稿してください。その追加情報がなければ、私も他の誰もあなたを支援することができません。

多くの場合、単純な修正か、セミコロンの欠落です。CSS の場合、通常はそれが原因か、スタイル シートにコードがリストされている順序の問題、または CSS エラーだけの問題です。テスト サイトでハックをテストしてください。そこで機能する場合、ハックは実際にセットアップで機能していますが、解決する必要がある別の問題があります。ここの人々は、本当に喜んで手助けをしてくれます。少なくとも、正しい方向を指し示してくれます。

さて、ここでは、Safari の最新バージョンで使用できるハックを紹介します。

これは現在の Safari バージョンをカバーしており、純粋な Safari のみを対象としているため、最初にこれを試してください。

This one still works properly with Safari 17.0 (Fall-2023):

/* Safari 7.1+ */

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

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

}

6.1 以降のバージョンをカバーするには、現時点では次の CSS ハックのペアを使用する必要があります。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 年 3 月下旬の更新)

このハックは、他の複数のハックを組み合わせて、数か月にわたるテストと実験を経て作成しました。

注: 上記のように、二重メディア クエリは偶然ではありません。メディア クエリのネストを処理できない多くの古いブラウザーを除外します。-- 'and' の 1 つの後のスペースが欠落していることも重要です。結局のところ、これはハックであり、現時点で 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 CSS については、以下をお読みください。

/* 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 ハック:

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 以降用のもう 1 つ:

/* Safari 9+ */

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

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

}

また、別のサポート機能のクエリも:

/* Safari 9+, < 13.1 */

@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 デバイスのみをターゲットにします。前述のように、iOS 上の Chrome は Safari にルート化されているため、当然 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 デバイスをブロックする方法を指摘したので、iOS 以外のデバイスをターゲットにした Safari 6.1+ ハックの修正バージョンを次に示します。

/* 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 から Safari を分離することに関するものです (繰り返しますが、iOS ではありません)。代替案、つまり Safari とは別に Chrome をターゲットにする方法を投稿することが重要かもしれません。そのため、必要な場合に備えて、ここでそれを提供します。

基本的な内容は次のとおりです。Chrome のさまざまな特定のバージョンについては、私のテスト ページを確認してください。ただし、これらは Chrome 全般をカバーしています。Chrome はバージョン 45 で、Dev および Canary バージョンは現時点ではバージョン 47 までです。

私が browserhacks に載せた古いメディア クエリ コンボは、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 以降をターゲットにするのは簡単でした。これは、他の CSS コードのブロック内に含まれているのを見て (元々 CSS ハックとして意図されたものではなかった)、それが何をするのかを理解した後、browserhacks に送信したものであり、私たちの目的のために関連部分を抽出しました。

[注: ] 以下の古い方法では、上記の更新がなくても、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 Web ブラウザー用のハックなど、他にも多くのハックがあります。

注: 何かがうまくいかない場合は、まずテスト ページを確認してください。ただし、誰かがサポートできるように、サンプル コードと、試行しているハックの種類を提供してください。

おすすめ記事