1

このネストされた混乱は、私の少ないスタイルシートのレイアウトがどのように見えるかです (実際のスタイルを差し引いたもの):

#branding {
    h1 {

    }
    #tagline {

    }
    .ticker {

    }
    nav {
        ul {
            li {
                a {

                }
            }
        }
    }
    #search-form {
        input {

        }
        button {

        }
    }
}
#masthead {
    #store-locator {

    }
    #slider {
        ul {
            li {

            }
        }
    }
    #events {
        article {
            img {

            }
            h4 {

            }
            p {

            }
        }
    }
}
#main {
    #buckets {
        ul {
            li {
                img {

                }
                h3 {

                }
                .description {
                    .author {
                        a {

                        }
                    }
                    p {

                    }
                    blockquote {

                    }
                }
                .more {

                }
            }
        }
    }
    #social-feed {
        hgroup {

        }
        #filters {
            ul {
                li {

                }
            }
        }
        #feeds {
            .feed-column {
                > div {
                    img {

                    }
                    h3 {
                        span {

                        }
                    }
                    .description {
                        p {

                        }
                        .author {
                            a {

                            }
                        }
                    }
                }
            }
        }
        #feed-amount {
            a {
                &:before {

                }
                &:after {

                }
            }
        }
    }
}
#summary {
    nav {
        ul {
            li {
                a {

                }
            }
        }
    }
    #newsletter-form {
        h4 {

        }
        input {

        }
        button {

        }
    }
    #stay-connected {
        h4 {
            a {

            }
        }
    }
    #donation {

    }
    #contact-info {
        #contact-number {
            span {
                strong {

                }
            }
        }
        #contact-details {
            address {
                strong {
                    a {

                    }
                }
            }
            p {

            }
        }
    }
}

これは、マークアップのレイアウトを模倣しているため、いくつかの点で私には理にかなっていますが、過度に具体的なセレクター、IE などのいくつかの重大な欠点があります。

#main #social-feed #feeds .feed-column > div .description p {}

私の質問は、このドキュメントをレイアウトするより良い方法は何でしょうか?

ここでLESSを悪用していますか?「LESS スタイルシートの例」などを検索しましたが、less スタイルシート全体の例を 1 つも見つけることができませんでした。

4

2 に答える 2

2

LESSがセレクターのネストを許可している場合でも、必ずしもそうしなければならないという意味ではありません。通常の CSS で行うのと同じことを行うだけです。

目的が単なる視覚的な階層である場合は、実際のネストなしでこれを行うことができます。

#social-feed {
    /**/
}
    #feeds {
        /**/
    }

通常、id セレクター ( など) をネストすることは意味がありません#foo #bar(要素の階層が異なるページ間で永続的である限り)。

また、該当する場合は子コンビネータを使用することも理にかなっています。

nav {
    & > ul {
        & > li {
            & > a {

            }
        }
    }
}

結果のセレクター ( ) は、コンテキスト セレクター (または)NAV > UL > LI > Aよりも潜在的に高速に動作する可能性があります。NAV UL LI ANAV A

于 2013-01-04T21:14:30.983 に答える
1

あなたが「深刻な欠点」の1つとして示しているようなセレクターの肥大化は、セレクターのネストを慎重に使用する理由です。私にとっては、CSS をマークアップのレイアウトと正確に一致させることはそれほど重要ではありません。いくつかのまばらなコメントを使用して、CSS のどの「セクション」にいるのかを知ることができます。それでは、どうすれば物事を変えることができるかについて、いくつかの考えを説明しましょう。

必ずしも入れ子にせず、近くに保つ

/* branding */

#branding {
    h1 { }

    .ticker { }

    nav {
        ul { }
        li { }
        a { }
    }
}

#tagline { }

#search-form {
    input { }
    button { }
}

討論

#branding最初に、単にすべてをグループ化するのではなく、セクションの見出しとしてコメントを付ける方法に注意してください。これは、html のようないくつかの「構造」の保持です。主要な「ラッパー」見出しごとにグループ化し、それらを互いに近くに保持します。

第 2 に、ページに固有の ID を維持するために HTML を正しく構成idしていると仮定すると、タグには独自のトップ レベルのネスト グループが必要です。私の頭の中の唯一の例外は、要素のクラスを使用してページの外観を切り替える場合であり、その外観の変更の一部に、選択された要素のスタイルの変更が含まれます(ただし、それでもトップ レベル。下の「のパワーを利用する」を参照してください)。ということで、 の下の巣からあなたのとを引き抜きました。bodyidid&#tagline#search-form#branding

3 番目に、肥大化を最小限に抑えるための設計とコードについて考えます。たとえば、navページに他の要素 (サイドバーのサブナビゲーションなど)がある場合は、 navinをネストする#branding価値があります。同様に、そのラッパーの外側に他のh1または使用がある場合。.tickerしかし、私が軽蔑する一般的な巣はul li a巣です。内部の唯一のリストが である場合、navすべての がそこに配置されていることが前提であるためul、内部に をネストしてセレクター文字列でli終了する理由はありません。同様に、リスト内のタグのみがリスト内にある場合は、それをネストする必要はありません。このcssを持っている...ul lilianav

#branding nav ul { }
#branding nav li { }
#branding nav a { }

...完全なネストバージョンと同じくらいクリーンで、セレクター文字列がはるかに肥大化していません。

& の力を利用する

を使用し&てキーの親をコードに追加するというアイデアが気に入っています。bodyページ全体でテーマ (または外観) を制御するために要素にクラスを追加するという上記の例外を思い出してください。テーマクラスにネストするか、次のようにすることができます。

#branding {
    .theme1 & { }
    .theme2 & { }

    h1 { }

    .ticker { }

    nav {
        ul { }
        li { }
        a { }
    }
}

討論

次に、テーマ クラスによって.theme1 #brandingの外観を変更するようなセレクターを生成します。#brandingネストされたアイテムのプロパティを変更するためにこれが必要な場合は、さまざまな方法があります (最終出力をどのような構造にしたいかによって異なります)。1 つの方法は、必要なものだけに追加することです。

#branding {
    .theme1 & { }
    .theme2 & { }

    h1 { 
      .theme2 & { //special code only for theme2 here }
    }

    .ticker { }

    nav {
        ul { 
          //main code here
          .theme1 & { //special code here }
          .theme2 & { }
        }
        li { }
        a { }
    }
}

討論

欠点.themeは、コード内のクラスの余分な繰り返しですが、これの利点はエンドポイントターゲットがグループ化されたままになるため、たとえばul上記のコードは次のようなコードを生成します...

#branding nav ul {}
.theme1 #branding nav ul {}
.theme2 #branding nav ul {} 
#branding nav li {}
#branding nav a {}

...さまざまなulコードをすべて並べて保持します。ここで、liとの要素もテーマで変更する必要がある場合は、特定のテーマのとがテーマごとにグループ化されるように、テーマを1レベルa上に移動するか、それとも維持するかを決定する必要があります。上記のように最下位レベルで、 、、およびが実際にスタイル設定されているエンドポイント タグによってグループ化されたままになるようにします。ulliaullia

もちろん、&通常どおり追加するために使用することは、入れ子にする場合にも役立ちます。

a {
  &:hover {}
}

...a:hover {}どれだけ深くネストされていても情報を生成することは、ネストと組み合わせaの優れた使用法です。&

結論

確かに、この件に関して言えることは他にもあります。重要なのは、プリプロセッサが利用可能であるという理由だけでなく、必要な場所でプリプロセッサの能力を利用することです。私にとって、ネスティングとは対照的に、ミックスインはプリプロセッサのより有用な部分です。

于 2013-01-04T21:22:40.723 に答える