質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

4回答

8669閲覧

横並びさせた要素の最後の行全部のmargin-bottomを無効化したい

gasuko

総合スコア27

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2016/09/28 01:05

編集2016/09/28 02:24

横並びにした要素が複数行になった場合、最後の行のmargin-bottomは0にしたいです。

※リセットは省略します。

【HTML】

<div class="itemBox"> <div class="item"></div> <div class="item"></div> <div class="item"></div> <div class="item"></div> <div class="item"></div> <div class="item"></div> </div>

【css】

.itemBox{ width:100px; text-align:center; } .item{ display:inline-block; width:30px; margin-right:10px; margin-bottom:10px; } .item:nth-child(2n){ margin-right:0; }

そこで最後の行を

【HTML】

<div class="itemBox"> <div class="item"></div> <div class="item"></div> <div class="item"></div> <div class="item mb0"></div> <div class="item mb0"></div> <div class="item mb0"></div> </div>

このようにして

【CSS】

.mb0{ margin-bottom:0; }

とすれば解決できたのですが、これだと微妙なので、cssもしくはjQuery等で、行を指定してmargin-bottomをとるもしくは指定した行にクラスを付与することができないのかと考えたのですが、解決方法がみつかりませんでした。
ご存知の方、アドバイスをいただけますと幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/09/28 01:17

「最後の行」とは具体的に何ですか? 常に div 要素が 6 つあって、最後から 3 つの div 要素のことですか? そうじゃなさそうな気がしますが、であれば「最後の行」定義を明確にしてください。 
gasuko

2016/09/28 01:23

失礼いたしました。 要素が2行になった場合、2行目の要素すべてという意味です。
退会済みユーザー

退会済みユーザー

2016/09/28 01:52

そうすると、今のソースでは、ブラウザの解像度が変わったり、画面のサイズを広げたりした時、「最後の行」の div 要素の数は変わってきませんか? 画面を広げたら全部の div 要素が 1 行目(最後の行?)になるということはありませんか?
退会済みユーザー

退会済みユーザー

2016/09/28 02:10

見落としてました。親の div 要素の幅は 100px と指定してありましたね。それは固定でいいのでしょうか? 100px 固定でいいとして子の div 要素の数は 6 で固定ですか?
gasuko

2016/09/28 02:23

そうですね。とりあえず100pxにしてみました。子要素(.item)は30pxなので、3つならばないですね。。。.item:nth-child(3n)は.item:nth-child(2n)でした。子要素も自動で追加するものではないので固定ということになります。
kei344

2016/10/03 15:44

まだ質問が「受付中」になっていますが、いったん「解決済」にされてはいかがでしょうか。また、解決されていないなら状況をお教えください。
guest

回答4

0

こうとか。(widthを可変にしても対応できる)

CSS

1.itemBox { 2 margin-right: -10px; 3 margin-bottom: -10px; 4 width: 110px; /* 100px + 10px 可変のときはcalc(100% + 10px)とか。 */ 5 text-align: center; 6} 7.item { 8 display: inline-block; 9 width: 30px; 10 margin-right: 10px; 11 margin-bottom: 10px; 12}

投稿2016/09/28 02:19

kei344

総合スコア69407

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gasuko

2016/09/28 02:25

親要素にネガティブマージンですかなるほど!
guest

0

ベストアンサー

こちらでいけると思います。
後ろから数えてn番目ってやつです。

css

1.item:last-child, 2.item:nth-last-child(2), 3.item:nth-last-child(3) { 4 margin-bottom: 0; 5}

投稿2016/09/28 01:22

gin

総合スコア2722

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gasuko

2016/09/28 02:26

last-childはよくつかいますが、nth-last-child(2)などの使い方はしりませんでした。勉強になりました。ありがとうございます!
guest

0

親の div 要素の width, margin や、その中に入る子の div 要素の数、個々の子の div 要素の width, margin は全て固定ということでよければ、個人的には、質問者さんのやり方が一番分かりやすくてよいと思います。後で保守する人のためにも分かりやすい方がよさそうです。

でも、将来的には動的に変えることも考えているのでは?

もし動的にそれらがいろいろ変わるのであれば、自力でスクリプトを書いて対応するか、Bootstrap などのライブラリに使えるものがあればそれを使って対応するという話になると思いますが。

投稿2016/09/28 02:41

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

JavaScript

1//ページ読み込み時に実行 2$(document).ready(function() { 3 //id='itemBox'のdiv要素の中の子div要素で、最後のモノのmargin-bottomを0pxにする 4 $('div#itemBox div:last-child').css('margin-bottom', '0px'); 5 //行の中、という事であれば、この最後のdivの子要素となっているdivに対して適用になるので 6 //$('div#itemBox div:last-child div').css('margin-bottom', '0px'); 7 //等のように、ネストさせていけばよい 8});

jQueryで実装すると楽な気がします。

投稿2016/09/28 01:23

kunai

総合スコア5405

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gasuko

2016/09/28 02:25

jQueryがサクッとかけると便利かもしれませんね!ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問