2013年4月23日 星期二

CSS Attribute Selector Part II

自從上回從 Wiki 發現 CSS Attribute Selector 強大之處之後 又過了一段時日 CSS Attribute Selector

但是其實 CSS 還有一些小祕密 就讓我們來瞧瞧

1.複數class

這個應該還算常見 比如我有兩個樣式 .borderStyle .colorStyle

如果我需要某元素同時具有這兩種樣式的效果 我可以這麼寫


    <style>
        .borderStyle
        {
            border: 1px solid #999;
        }

        .colorStyle
        {
            color: blue;
        }
    </style>
    <div>
        <input value="aaa" class="borderStyle" type="button" />
        <input value="bbb" class="colorStyle" type="button" />
        <input value="ccc" class="borderStyle colorStyle" type="button" />
    </div>

但是如果我想要第三個按鈕再做些變化的話該怎麼寫? 咦? .borderStyle colorStyle 好像沒辦法 因為對 CSS 而言 空格是下一層物件的意思了 =3=

想想 Attribute Selector

我們的 HTML 是一種 XML 所以我們的 class 也是一種 Attribute

所以我們可以使用 Attribute Selector


    <style>
        .borderStyle
        {
            border: 1px solid #999;
        }

        .colorStyle
        {
            color: blue;
        }

        [class='borderStyle colorStyle']
        {
            padding: 10px;
            font-size: 16pt;
        }
    </style>
    <div>
        <input value="aaa" class="borderStyle" type="button" />
        <input value="bbb" class="colorStyle" type="button" />
        <input value="ccc" class="borderStyle colorStyle" type="button" />
    </div>

值得注意的是 我們仍需要小心 CSS 的順序性 如果有覆寫之前設定過的屬性 會以最後指定的為準





2.複數attribute

我們之前已經會了 使用 Attribute Selector 來設定樣式


    <style>
        [data-hasBorder='true']
        {
            border: 1px solid #999;
        }

        [data-hasBorder='false']
        {
            border: none;
        }

        [data-isBig='true']
        {
            font-size: 16pt;
        }

        [data-isBig='false']
        {
            font-size: 9pt;
        }
    </style>
    <div>
        <input value="aaa" data-hasborder="true" data-isbig="true" type="button" />
        <input value="bbb" data-hasborder="false" data-isbig="true" type="button" />
        <input value="ccc" data-hasborder="true" data-isbig="false" type="button" />
        <input value="ddd" data-hasborder="false" data-isbig="false" type="button" />
    </div>

如過這回我們想要在 同時符合兩項 Attribute 的元素 做變化該怎麼辦?

答案很簡單沒人說 [] 只能有一個


    <style>
        [data-hasBorder='true']
        {
            border: 1px solid #999;
        }

        [data-hasBorder='false']
        {
            border: none;
        }

        [data-isBig='true']
        {
            font-size: 16pt;
        }

        [data-isBig='false']
        {
            font-size: 9pt;
        }

        [data-hasBorder='true'][data-isBig='true']
        {
            color: red;
        }

        [data-hasBorder='false'][data-isBig='false']
        {
            color: green;
        }
    </style>
    <div>
        <input value="aaa" data-hasborder="true" data-isbig="true" type="button" />
        <input value="bbb" data-hasborder="false" data-isbig="true" type="button" />
        <input value="ccc" data-hasborder="true" data-isbig="false" type="button" />
        <input value="ddd" data-hasborder="false" data-isbig="false" type="button" />
    </div>





大會串一下


    <style>
        input#btn1.btn[data-hasborder='true'][data-isbig='false']
        {
            color: orange;
            font-size: 24pt;
        }
    </style>
    <div>
        <input id="btn1" class="btn" value="aaa" data-hasborder="true" data-isbig="false" type="button" />
    </div>

TagName#Id.Class[Attribute1='value'][Attribute2='value']