2016-04-22 10 views
1

重複を避けるためにLessでいくつかのネストされたスタイルを再利用する最良の方法を理解しようとしていますが、私は最良の方法を見つけたかどうかはわかりません。今、私は.action-linkにアウタースタイルを適用せず、セレクタ.action-link aに、同じ内部リンクのスタイルを適用したいネストされたスタイルでアブソリュートセレクタを追加する

.category-link, 
.caption-link { 
    background-color: @linkColour; 
    font-family: @linkFont; 
    max-width:2em; 
    a { 
     /* INNER LINK STYLES */ 
     text-decoration:none; 
     white-space:nowrap; 
     /* ...INNER LINK STYLES CONTINUE... */ 
    } 
} 

は今、私のようなものを持っています。

私はこのようにそれを行う場合、私は私の意図した出力を得る:任意の重複を必要としませんが、私は彼らが関連している彼らの現在の場所でこれらのスタイルを維持することを好むだろう

.inner-link-styles() { 
    /* INNER LINK STYLES */ 
    text-decoration:none; 
    white-space:nowrap; 
    /* ...INNER LINK STYLES CONTINUE... */ 
} 
.category-link, 
.caption-link { 
    background-color: @linkColour; 
    font-family: @linkFont; 
    max-width:2em; 
    a { 
     .inner-link-styles; 
    } 
} 
.action-link a { 
    .inner-link-styles; 
} 

、それらをmixins.lessに移動し、次の開発者がトラブルシューティングを行うために複雑さを増やすよりも、

何を直感的に感じたが、明らかに間違っている、このようなものだった:

.category-link, 
.caption-link { 
    background-color: @linkColour; 
    font-family: @linkFont; 
    max-width:2em; 
    & a, 
    .action-link a { 
     /* INNER LINK STYLES */ 
     text-decoration:none; 
     white-space:nowrap; 
     /* ...INNER LINK STYLES CONTINUE... */ 
    } 
} 

が、他のいくつかの私は、それは絶対に基づいて、持っているセレクタに適用することができ接頭辞ではなく、それはネストレベルだと相対があります?

+0

私はそれはできないと思います。あなた自身が与えた解決策はただ一つです。 –

+0

私はそのような気分を抱いていたかもしれません...私はたぶん私が少しでも慣れていれば、私はそれでゲル化しない方法でそれを使いたくないと感じています。 '.inner-link-styles()'の定義が他のより機能的なミックスインを別のファイル( 'mixins.less')に入れるべきかどうかに関する個人的な/コーディングスタイルの考え方をあなたや他の誰かが持っていますか?自分自身の別ファイル( 'reusable.less')に入れたり、実際にそれらを使うスタイルの近くに置いたりしますか? (経験に基づく自分の好みや正式に定義されたベストプラクティスかどうかにかかわらず) –

+0

「他のより機能的なミックスインを別のファイル(mixins.less)に入れてください。絶対にない。どんなミックスインでも、あなたが所属していると感じる場所、「ミックスインはミックスイン」、「変数」の変数などのような機械的構造になっているはずです。少なくともダムと反生産的です。有名なフレームワークの特定のアプローチを盲目的にコピーすることは決してありません(現代のフレームワークのほとんどは小規模チーム(1人まで)によって設計され、多くの反パターンがあります)。 –

答えて

1

アブソリュートセレクタはネストされたブロック内に追加することはできません。別のブロックの下にネストした後は、&.をセレクタに追加しない限り(インテルセレクタはDOMのように)その場合、内側のものは親自体の別のクラスになる可能性があります)。あなたが複数の要素に共通のプロパティのセットを割り当てているので、ミックスインまたは:extend機能を使用して

は、あなたのケースのための最高のオプションです。


親セレクタは、(それが.category-link a又は.caption-link aのいずれかである)が知られているので、あなたも.action-link aにそのセレクタのプロパティを拡張することができます。これは、内側のリンクのプロパティだけを拡張し、その親のプロパティは拡張しません。

元の.category-link aのプロパティを変更すると、.action-link aのプロパティも変更されるため、次の開発者がトラブルシューティングを行うための複雑さが増すとは思われません。

.category-link, 
.caption-link { 
    background-color: blue; 
    font-family: Arial; 
    max-width:2em; 
    a { 
     /* INNER LINK STYLES */ 
     text-decoration:none; 
     white-space:nowrap; 
     /* ...INNER LINK STYLES CONTINUE... */ 
    } 
} 
.action-link { 
    a { 
    &:extend(.category-link a); 
    } 
} 
+1

これは私が探していたものとまったく同じように見えます!私は今、この機能のドキュメントを探しています。それが他の誰にも役立つ場合は、私の啓示の概念は[css-tricks](https://css-tricks.com/the-extend-concept/) 「経験則は、パラメーターを指定しないでミックスインを使用すると、いつでも拡張が効率的になる」ということです。私はそれを行うパラメータのないミックスインの方法を見つけましたが、それは洗練されていないと感じました - これは洗練されたソリューションです。ありがとう –

関連する問題