2016-04-08 9 views
2

できるだけ効率的にLessを使用しようとしています。今私は、私は通常、CSSで次のように行うだろうプレースホルダの色を置き換えたい:ネストしたLessセレクタ内のベンダープレフィックス

input::-webkit-input-placeholder /* WebKit, Blink, Edge */ 
{ 
    color: #000000; 
} 

input:-moz-placeholder /* Mozilla Firefox 4 to 18 */ 
{ 
    color: #000000; 
} 

input::-moz-placeholder /* Mozilla Firefox 19+ */ 
{ 
    color: #000000; 
} 

input:-ms-input-placeholder /* Internet Explorer 10-11 */ 
{ 
    color: #000000; 
} 

は、今私は、私が使用することができ以内にネストされたセレクタを使用して考えた:

input{ 

&::-webkit-input-placeholder, /* WebKit, Blink, Edge */ 
&:-moz-placeholder, /* Mozilla Firefox 4 to 18 */ 
&::-moz-placeholder, /* Mozilla Firefox 19+ */ 
&:-ms-input-placeholder /* Internet Explorer 10-11 */ 
{ 
    color: #000000; 
} 
} 

残念ながらないこと私は期待どおりに動作しません。私は1つのセレクタ(カンマなし)を使用するとうまくいきますが、これは各プレフィックスに対して4つのネストされたセレクタを作成する必要があることを意味しますが、これは効率的ではありません。可能性の低い行でLessで最初のCSSブロックの効果をどのように達成できますか?

注:フルコードブ​​ロックは、より多くのネストされたルールで、より広範囲です。もちろん、この例ではCSSだけですべてのセレクタをカンマにすることができますが、ネストしたLessセレクタで動作させたいと思っています。

+1

私はこれらのベンダープレフィックスは、あなたのコードを減らすために何らかのプリプロセッサを使うと自動的に追加できると思います。そうでない場合、これはかなり興味深い質問です。 +1 –

+1

私は、オートプレフィクサーがこれらのプレフィックスを自動的に追加しないことを確認しました。私はあなたのレッスンコードを試しました。それはあなたが期待していた正しい出力を生み出すようです。 –

+1

@LiXinyangご回答いただきありがとうございます。私はそれをさらに深く掘り下げ、実際には望ましい出力を生み出すようです。セレクタが別々に定義されるまで、ブラウザだけが適切な色を解析しません。問題はブラウザーにあるように見えますが、正しくない構文ではありません。 – BasC

答えて

3

免責事項:いつものように私は、ベンダー接頭辞のものにはあまりミックスインを使用することはお勧めしません。彼らは、プレフィックスフリーや自動プレフィックスのようなライブラリに残すのが最善です。この答えは、Lessを使って似たようなことをどのように扱うことができるかを示すことです。

すでに判明(とコメントで述べた)きたようにそれはそれは理解していないことをセレクタに遭遇するとき、ユーザーエージェントは、ルール全体をドロップしますので、ベンダー接頭辞セレクタのグループ化は動作しません。 this answerで詳細を読むことができます。

これは、Lessコンパイラでは問題ありません。期待どおりにコードをコンパイルして出力します。

4つのセレクタブロックを何度も書くのを避ける方法の1つは、ベンダーのプレフィックス付きセレクタを引数としてルールセットを受け入れるミックスインに入れ、必要に応じて呼び出すことです。以下は参考用のサンプルコードです。

.placeholder(@rules){ /* no need to repeat, just copy paste this once in your code */ 
    &::-webkit-input-placeholder /* WebKit, Blink, Edge */ 
    { 
    @rules(); 
    } 
    &:-moz-placeholder /* Mozilla Firefox 4 to 18 */ 
    { 
    @rules(); 
    } 
    &::-moz-placeholder /* Mozilla Firefox 19+ */ 
    { 
    @rules(); 
    } 
    &:-ms-input-placeholder /* Internet Explorer 10-11 */ 
    { 
    @rules(); 
    } 
} 

/* call it wherever required */ 
input{ 
    .placeholder({ 
       color: red; 
       }) 
} 
input.somethingelse{ 
    .placeholder({ 
       color: black; 
       padding: 4px; 
       }) 
} 
+2

はい、私でした。私の立場を説明するだけです。私は通常、プレフィックスQ/Asをdownvoteしませんが(効率的に自分の時間を使う方法を学ぶのはSOの目的ではないので)しかし、この特定のケースではちょっとばかげているのですが、オペレーターがLessの新しいことを学ぶのは全く別のベンダープレフィックス・ミックスイン・ライブラリーを書くことが大変貴重ですが、そのような答えはすべて「プレフィックスに時間を無駄にしないでください。ビッグレッド。しかし、もう一度、彼、あなた、私、そして皆を救うために(将来の読者は、これが*仕事を達成する方法ではないことを知る必要があります)。 –

関連する問題