2015-01-06 33 views
6

シンプルなボックスシステムを構築しようとしています。最初の子の右マージンを削除する必要があります。ファーストチャイルドセレクタが動作しない

私は第一子の型-最初に、まだ適切に意図されたクラスをターゲットにすることはできません両方を試してみました。

私は数多くの異なる例を読んだが、解決策を見つけることはできません。

このfiddleを参照して、最初の子から余白を削除してください。

.container { 
    position: relative; 
    width: 100%; 
    max-width: 960px; 
    margin: 0 auto; 
    padding: 0 20px; 
    box-sizing: border-box; 
    background-color: black; 
} 

.box { 
    margin: 1% 0 1% 0; 
    float: left; 
    background-color: gray; 
    box-sizing: border-box; 
    color:white; 
} 
.box.full { 
    width: 100%; 
    margin-left: 0; 
} 

.box.half { 
    width: 49%; 
    margin-left: 1%; 
} 

.half:first-child { 
    margin-left: 0; 
} 
+0

ありがとうございました。私は今、最初の子セレクタの使い方をよりよく理解しています。私の問題を解決するために、最初の子が実際に適切な要素をターゲットにするように、単に.rowクラスを導入しました。 – MrGood

答えて

4

最初の.halfクラス要素は.containerの最初の子ではありません。 2番目の子です。したがって、セレクタは機能しません。

私は.box.fullは、あなたが望む余裕を持った後、任意の.box.halfがすぐに来ていることを指定するには、

.box.full + .box.half { 
    margin-left: 0; 
} 

を使用してお勧めします。

+0

Exaclty。 w3schools経由で:「最初の子セレクタは、親の最初の子**であるすべての要素に一致します。 – lesssugar

+0

ありがとうございます。これは正しい軌道に乗った。 – MrGood

1

あなたは確かに第二子を標的にされています

.box.half:nth-child(2) { 
    margin-left: 0; 
} 

は、代わりにこれを試してみてください:)

.box.half { 
    width: 49%; 
} 

.box.half + .box.half 
{ 
    margin-left: 2%; 
} 

.box.half.box.halfが付け加え場合にのみmargin-left: 2%を持つことになります。

左余白がなくなり、右余白がなくなり、49 + 49 + 2 = 100、利益が得られます。

あなたのフィドルが更新を参照してください:http://jsfiddle.net/Lvd44upd/3/

0

私は

.box.half { width: 49%; } 

.box.half:last-child { margin-left: 1%; } 

を使用。仕事をしているようですhere

0

これは、前半のボックスが親の最初の子ではないため、2番目のボックスです。だから簡単な解決策は.box.half:nth-​​child(2)です。