2017-11-18 5 views
-1

シンプルなCSSとHTMLコードがあり、なぜ最後の垂直イメージが機能しないのか不思議です。私は国境を意味し、余白は最後の要素に追加されるべきではない。CSS:nth-​​child(even)が正しく動作しない

これはなぜ機能しないのですか?

https://jsfiddle.net/st2Lwrgj/

* {margin: 0; padding: 0;} 
.wrap {width: 250px; border: 1px solid red;overflow:hidden;} 

img { 
    display: block; 
    width: 100%; 
    height: auto; 
    margin-bottom: 10px; 
} 
img.vertical { 
    width: 45%; 
    float: left; 
    margin-right: 10px; 
} 
img.vertical:nth-child(even) { 
    margin-right: 0px; 
    border: 2px solid blue; 
} 
+0

これは、水平イメージが ':nth-​​child(even)'を破るためです。 – agrm

+0

あなたのコードでは、すべてのevens ':nth-​​child(even)'に適用されるので、6番目最後の画像ではなく2番目の最後の画像です – Aaqib

+2

[私のWebサイト上の何かが動作しません。リンクを貼り付けることはできますか?](http://meta.stackoverflow.com/questions/125997/something-on-my-web-site-doesnt-work-can-i-just-paste-a-link -to-it)です。理解されるべき外部リソースに依存する質問は、外部リソースが去ったり修正されたりすると、役に立たなくなる。 [MCVE]を作成し、**その質問自体**に入れてください。 (あなたのMCVEは、このCSSが動作しているHTMLを含む必要があります)。 – Quentin

答えて

2

:nth-child(even)が毎秒画像(第二、第四など)に適用されるで見ます。 .verticalクラスなしで水平イメージを挿入すると、この順序が破られます。

以下は回避策の1つですが、ロジックはかなりシンプルです。

  1. まず、私たちは、その後、私たちは、次の画像を選択し、img.vertical:nth-child(odd)代わりのevenを使用して順序を元に戻すgeneral sibling selectorを使用:not(.vertical)
  2. を使用して.verticalクラスなしで画像を検索img.vertical:nth-child(even)
  3. を使用して、すべての第2の画像を選択します。
  4. 今度は、奇数と偶数の両方の境界線にimg.verticalを適用したので、ポイント1で選択した画像からスタイリングを削除する必要があります。これはポイント3で設定したセレクタで行いますが、evenoddimg:not(.vertical) ~ img.vertical:nth-child(even)

TLDR;以下の中に、

img.vertical:nth-child(even) { 
    margin-right: 0px; 
    border: 2px solid blue; 
} 

:この部分を変更

img.vertical:nth-child(even), 
img:not(.vertical) ~ img.vertical:nth-child(odd) { 
    margin-right: 0px; 
    border: 2px solid blue; 
} 
img:not(.vertical) ~ img.vertical:nth-child(even) { 
    margin-right: 10px; 
    border: 0; 
} 

あなたは、これがthis fiddleでどのように機能するかを確認することができます。

関連する問題