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

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

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

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

Q&A

解決済

5回答

12440閲覧

flex:wrap;のときに、左右の幅を調整する方法

退会済みユーザー

退会済みユーザー

総合スコア0

CSS

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

1グッド

1クリップ

投稿2018/04/10 09:27

編集2018/04/11 01:15

###やりたいこと
下記のHTMLがあるとき、

➀数字の要素(.flex > div)
→左に寄せたい。

➁その要素全体(.flex)
→.warpの左右真ん中に置きたい。

という2つを満たしたいです。

html

1<section class="section1"> 2 3<div class="wrap"> 4 5<div class="flex"> 6<div>1</div><div>2</div><div>3</div><div>4</div><div>5</div><div>6</div><div>7</div><div>8</div><div>9</div><div>10</div> 7</div> 8 9</div> 10 11</section>

###やってみたこと
次のCSSでは、各数字は左に来るものの、その要素全体は真ん中に来てくれません。

図のように、グレーの範囲の右側が大きくなってしまうのです。
イメージ説明

css

1/*数字の要素全体をグレーの左右真ん中にしたいCSS*/ 2.wrap { 3 text-align: center; 4 margin: 0 auto; 5} 6 7/*特に問題がないと思われるCSS*/ 8.section1 { 9 background: #888; 10 padding: 10px; 11} 12.flex { 13 display: flex; 14 justify-content: start; /*ビミョーなところ*/ 15 flex-wrap: wrap; 16} 17.flex div { 18 background: pink; 19 width: 50px; 20 margin: 10px; 21 text-align: center; 22} 23

上のCSSの/*ビミョーなところ*/justify-content: start;centerにすれば、数字の要素全体はグレーの真ん中には来るのですが、すると今後は数字の各要素が左寄せになってくれず、9や10まで真ん中に来てしまうのです。

なんとか冒頭の2つを両立させる方法をご教示いただけませんでしょうか?

table-cellなども試したのですが、どうしてもできず質問させて頂きました。

よろしくお願いいたします。

defghi1977👍を押しています

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

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

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

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

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

defghi1977

2018/04/10 09:48

/*ビミョーなところ*/の前に全角スペースがあるので, 削除して下さい.
退会済みユーザー

退会済みユーザー

2018/04/11 01:15

ご指摘ありがとうございます。質問文を修正いたしました。
guest

回答5

0

列数が数パターンならlast-childでmargin-right計算すればメディアクエリである程度ゴリ押し出来るかな…。

css

1.flex { 2 display: flex; 3 justify-content: center; 4 flex-wrap: wrap; 5} 6.flex div:last-child{ 7 margin-right: calc((10px + 50px + 10px) * 2 + 10px); 8}

例えばこれだとdivが10個なら4列と3列が対応出来ます。

投稿2018/04/10 14:38

sousuke

総合スコア3828

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

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

退会済みユーザー

退会済みユーザー

2018/04/11 01:18

なるほど。最後の子の右側に、他の子たちの幅を追加してあげるのですね。考えておりませんでした。ありがとうございます。
guest

0

恐らくこういった配置にしたいのだと思うのですが、この例では数字をspanで囲って隙間を作っています。
親要素をwidth25%で均等に4つ横並びに配置し、paddingで隙間を作っています。

質問者様がされたいレイアウトは、Flexboxよりもgridの方が向いていると思いますので、検討されてはいかがでしょうか?

投稿2018/04/10 10:51

shaak

総合スコア607

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

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

退会済みユーザー

退会済みユーザー

2018/04/11 01:15

ありがとうございます。まさに仰るとおりですね。使い分け方を知りませんでしたので参考にさせて頂きます。
guest

0

ベストアンサー

子ノードの幅(width)が固定値ですとなかなかにうまく行かないようです. 代替案として親要素に対する比率で設定するのは如何でしょうか?

HTML

1<div class="flex"> 2<div>1</div><div>2</div><div>3</div><div>4</div><div>5</div><div>6</div><div>7</div><div>8</div><div>9</div><div>10</div> 3</div>

CSS

1.flex { 2 background-color: gray; 3 display: flex; 4 justify-content: left; 5 flex-wrap: wrap; 6 padding: 10px; 7} 8.flex div{ 9 --margin: 10px; 10 background: pink; 11 width: calc(25% - var(--margin) * 2); 12 margin: var(--margin); 13 text-align: center; 14}

NOTE:
Gridレイアウトでも考えてみましたが, 全く同じ状況になります.
NOTE:
あくまで固定幅に拘るのであれば, スクリプトで子ノードの偏り幅を計算しtransform属性で右にずらすといった方法が考えられます.

投稿2018/04/10 10:34

defghi1977

総合スコア4756

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

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

退会済みユーザー

退会済みユーザー

2018/04/11 01:16

「--margin」という指定方法をはじめて知りました。またこちらの方法でもきちんとできました。ありがとうございます。感謝です。
退会済みユーザー

退会済みユーザー

2018/04/11 01:20

へぇ~!どう検索したらいいものか迷っていたので、リンク先、うれしいです。 解決+変数のご指導ということで、ベストアンサーにさせて頂きました。 どうもありがとうございますっ!!
guest

0

ちょっと前に同じような質問があったので

Flex boxで左右均等配置しつつ回り込んだ要素を左寄せにしたい
https://teratail.com/questions/117116

やはりgridがいいでしょうねえ

投稿2018/04/11 07:50

x_x

総合スコア13749

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

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

0

CSS

1.flex { 2 display: flex; 3 justify-content: flex-start; /*ビミョーなところ*/ 4 flex-wrap: wrap; 5}

これでどうでしょう

投稿2018/04/10 10:08

編集2018/04/10 10:46
Atsushi_Okumura

総合スコア355

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

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

defghi1977

2018/04/10 10:20

これだと, 改行後のboxの左寄せがうまく行っていません.
defghi1977

2018/04/10 10:50

それだと今度は左右の隙間幅が均等になりません. 私も悩んだのですが, これ結構出来そうで出来ない厄介なパターンに該当していそうです.
defghi1977

2018/04/10 11:02

多分 <div class="wrap" style="width: 300px;"> この"幅"が重要で, 何か一つ取っ掛かりがないとうまく中央揃えにならないんでしょうね. 幅や列数などの縛りを入れないとうまく行かないのだと思います.
Atsushi_Okumura

2018/04/10 11:05

あーなんも考えずに入れてしまいましたけど、そうですね margin:0 auto; を有効にするには幅を指定しないと .wrap の幅がautoで100%になってしまって中央寄せはできないですね。
退会済みユーザー

退会済みユーザー

2018/04/11 01:17

質問で幅の件を明確にしておりませんでしたので、当然の誤解だと思います。失礼いたしました。でも、ご回答誠にありがとうございます。参考になりました。
defghi1977

2018/04/11 01:20

むしろ「flex/grid」レイアウトの弱点が明確化されたことで良い質問となったと思います.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問