負のインデント-汎用性への道

同じインデントと共通コンテナを持つ一連のブロックで、最初または最後のブロックにインデントがないか、他のブロックと異なる場合によく遭遇します。 しばらくの間、この「問題」を解決するために、ネガティブインデントを使用する手法を習得するまで、最初または最後のクラスのように「クランチ」を使用しました。


負のインデントを使用すると、幅広い可能性が広がり、レイアウトをより普遍的にすることができます。 すべてを理解するために、ギャラリーのようなブロックで満たされた小さなコンテナを作成しましょう。

ブロック充填コンテナ

たとえば、私は最も困難な状況を選択しようとしました。 この場合、最初の行の上部のインデントだけでなく、最初の列の左側のインデントも無効にし、divコンテナーのブロックを3列にきれいに収める必要があります。

HTML:

  1. <div>
  2. <ul>
  3. <li> 1</li>
  4. <li> 2</li>
  5. <li> 3</li>
  6. <li> 4</li>
  7. <li> 5</li>
  8. <li> 6</li>
  9. <li> 7</li>
  10. <li> 8</li>
  11. </ul>
  12. </div>


CSS:

  1. div {
  2. border: 2px solid #CCC;
  3. overflow: hidden;
  4. width: 640px;
  5. }
  6. ul {
  7. margin: -20px 0 0 -20px;
  8. overflow: hidden;
  9. padding: 0;
  10. }
  11. ul li {
  12. background: #C06;
  13. float: left;
  14. height: 100px;
  15. list-style: none;
  16. margin: 20px 0 0 20px;
  17. width: 200px;
  18. }
  19. *html ul {
  20. width: 660px;
  21. }
  22. *html ul li {
  23. display: inline;
  24. }


問題は解決されたので、ここで主要なポイントに焦点を当てましょう。 中心点は、ulタグの負のマージンプロパティ、およびdivタグの非表示値を持つoverflowプロパティです。 彼らの助けを借りて、ulブロックをdivブロックに対して20pxだけ左上に移動し、オーバーフローの助けを借りて、不要なインデントを切り取ります。 これら2つのプロパティはメソッドの本質です。

コンテナを超えるネガティブパディング

しかし、常に1つまたは3つも存在するため、これはulタグのオーバーフロープロパティとIE 6.0ブラウザーの2つの個別のプロパティです。 最初のプロパティは、親ブロックのfloatプロパティの効果を中和するために使用されます。 IE 6.0では、IEが子ブロックに対して自分で計算できないため、ulブロックのwidthプロパティと、floatプロパティがブロックに適用されたときにインデントの2倍化を排除するdisplayプロパティを個別に使用しました。

提示された例はブラウザでテストされました:IE 6.0 +、Firefox 2.0、Opera 9.0、Safari 2.0+。 繰り返しになりますが、この手法は普遍的であり、必要に応じてさまざまなバリエーションであらゆる場所に適用できます。 実験して、経験を共有してください:)

Source: https://habr.com/ru/post/J23748/


All Articles