下記のコードで要素が3つあります。
レスポンシブ対応にしたいため、ブラウザを縮めても中央寄せのまま縮まっていって、
max-widthが768になったらスマホ対応画面にします。
ところが、768になる前(もっと大きい段階)から、
中央寄せが崩れてしまいます。
中央寄せになったまま768のギリギリまで縮まっていくにはどうすればいいでしょうか?
html
1 2 <footer class="footer"> 3 <ul class="f-menu"> 4 5 <li class="f-list"> 6 <div class="circle"> 7 <i class="fas fa-dumbbell fa-6x" data-fa-transform="down-9.5 right-7.5"></i> 8 9 <div class="t-1">あいうえお</div> 10 <div class="t-2">かきくけこ</div> 11 </div></li> 12 13 <li class="f-list"> 14 <div class="circle"> 15 <i class="fas fa-chalkboard-teacher fa-6x" data-fa-transform="down-9.5 right-7.5"></i> 16 17 <p class="t-1">さしすせそ</p> 18 <p class="t-2">たちつてと</p> 19 </div></li> 20 21 <li class="f-list"> 22 <div class="circle"> 23 <i class="far fa-life-ring fa-6x" data-fa-transform="down-9.5 right-9.5"></i> 24 25 <p class="t-1">なにぬねの</p> 26 <p class="t-2">はひふへほ</p> 27 </div></li> 28 </ul> 29 30 31 </footer>
css
1.footer{ 2 height: 230px; 3 background-color: black; 4 display: flex; 5 6} 7 8.circle { 9 width: 225px; 10 height: 225px; 11 border-radius: 50%; 12 background: #fff;/*背景色*/ 13 border: 6px solid #121212; /*枠の設定*/ 14 margin-top: -192px; 15 margin:-192px 55px 0px 45px; 16 17 } 18 19.f-menu{ 20 display: flex; //3つのアイコンを横並びにするために設定 21 justify-content: space-between; 22 margin: 0 auto; 23 24} 25 26.f-list{ 27 28 z-index: 5; 29 30 width: auto; 31} 32.t-1{ 33 color: #fff; 34 margin: 125px 0px 0px 50px; 35 font-size: 23px; 36 font-weight: bold; 37} 38 39 40.t-2{ 41 color: #fff; 42 margin: 7px -2px 0px -14px; 43 font-weight: bold; 44} 45 46
コードを試してみましたが、「中央寄せ」になっていないように見えました。
ご提示いただいていない部分のコードが必要なのではないでしょうか。
margin: 0 auto;でなってませんか?
はい、なっていないですね。
すみませんが、質問に提示するコードで問題が再現することを、ご質問者の環境で確認してから質問をしてください。
それぞれが違うコードを見ながら違う現象について議論をするのは、お互いに時間の無駄ではありませんか?
https://twitter.com/lhankor_mhy/status/1169432868705075200
失礼しました。白い丸が3つあると思うのですが、それの幅をもっと100pxほどに広げたママ縮んでいってほしいのです
すみません、最初は100pxほどの余白が3つの丸には設定していて、縮めていくと、中央に寄ったままどんどん縮んでいってほしいのです。
言い方を間違えました。失礼しました。縮めていくと丸と丸の距離はもちろん中央寄せにしていくので縮んでいくようにしたいんです。
現状のコードでそのようになっているように見えます。
確認しましたが、ならないのです、、、
ああ、失礼しました。当方でいろいろ試していて混乱しました。
回答します。
ありがとうございます。ダメです・・・。全体的に広がり過ぎてしまいますし、ブラウザを縮めていっても、やはり途中から中央寄せじゃなくなってしまいます・・・難問ですね・・・
そもそも、margin:0 auto;って設定すると、その要素同士の余白は自由に設定できなくなるんでしょうか?中央寄せにするのと、自由に余白を設定することは、両方は出来ない?!
ちょっと、どうしたいのかがよくわからないです。
幅が768pxほど(スマホサイズ)に縮んでいくまで、中央寄せかつ3つの丸に幅100pxの余白を持たせた状態で縮小していきたいのです。
margin: 0 auto;を設定すると、3つがぴったりと並んでしまい、余白ができません。
それで、margin:0 auto;を設定しないで、余白を設定すると、今度は中央寄せができなくなります。できなくなるというか、途中まで中央寄せで進むのに、途中から中央寄せにならなくなってしまうんです
本当に困っています。誰も答えられる人が居ません
.circle の幅が225px、余白を100pxとすると、合計で875pxになり、768pxを超えますが……?
いずれにせよ、ちょっとご希望がわからなくなってきました。
質問を解読できたら、また回答します。
質問をかえます。3つの丸にmargin: 0 auto;を設定したら中央寄せになりますよね?中央寄せしたままその3つの要素に自由に余白を設定することはできますか?またそれはどうやればいいですか?
縮んでいくとかそういうことは考えなくていいのですね?
中央寄せ かつ 3つの丸が固定間隔で配置されていればいい、ということでいいですか?
考えたいです。
中央寄せにして、かつ3つの丸同士がある程度離れていて、中央寄せの状態で768PXまで縮んでいってほしいのです。イメージ湧きますでしょうか?
中央寄せのままブラウザを縮小させていくため、その3つの丸同士の余白はだんだん無くなってきます。
そして、768ぐらいの幅になったらほぼその3つの丸同士が横一列にくっついた感じになって、
スマホのレスポンシブ対応画面になるといった感じです
では、先の回答の通りではないですか?
3つの丸が離れていて、最終的にくっつきましたが。
いえ、下記のご返信させていただいたとおり、ダメなのです・・・↓
ありがとうございます。ダメです・・・。全体的に広がり過ぎてしまいますし、ブラウザを縮めていっても、やはり途中から中央寄せじゃなくなってしまいます・・・難問ですね・・・
あ、codepenでやったら、なりますね・・・。
なら、別のところが影響しているってことですかね・・・
一歩進めました。
ほんとうにありがとうございます
ただ、アドバイスいただいたコードですと、丸3つの要素が広がり過ぎているので、ここをなんとか、100pxの幅に設定できないでしょうか?
縮んでいくことは考えなくていいのですか?
いえ、レスポンシブ対応させるためさきほどのようにしたいです
最大100pxにしたいということですか?
最初の状態、縮めていない状態(デスクトップ対応ブラウザの幅)で100pxってことです
余白の最大が100pxで、そこから縮むのは成り行き、という理解で合っていますか?
それとも、たとえばスクリーンが1600pxの時に100pxで1400pxの時に80px、みたいな処理をしたいということですか?
デスです!そんなイメージじです。ただ、結果として768あたりで、ぴったりくっつくぐらいにはなります
ですです!は前者です!ってことです
下記のようにやったらできました。
```css
.footer{
height: 230px;
background-color: black;
//display: flex;
}
.circle {
/*width: 225px;*/
width: 225px;
box-sizing: border-box; /* 追加 */
height: 225px;
border-radius: 50%;
background: #fff;/*背景色*/
border: 6px solid #121212; /*枠の設定*/
margin-top: -192px;
//margin:-192px 55px 0px 45px;
}
.f-menu{
display: flex; /* //3つのアイコンを横並びにするために設定 */
justify-content: space-between;
margin: 0 auto;
max-width: 867px; /* 追加 */
}
.f-list{
z-index: 5;
width: auto;
}
.t-1{
color: #fff;
margin: 125px 0px 0px 50px;
font-size: 23px;
font-weight: bold;
}
.t-2{
color: #fff;
margin: 7px -2px 0px -14px;
font-weight: bold;
}
```
ポイントは、
```css
.f-menu{
display: flex; /* //3つのアイコンを横並びにするために設定 */
justify-content: space-between;
margin: 0 auto;
max-width: 867px; /* 追加 */
}
```
です。margin: 0 auto;で中央寄せにして、かつmax-width: 867px; をすることで、3つの円の余白も実質調整できました。
ただ、footerなどに、max-width:~pxなどの設定は何故不要なのでしょうか?
私の回答通りでしたね。お役に立てたようで何よりです。
footer に max-width を入れるとマージン分の余白がなくなると思います。
あと、
.footer{
height: 230px;
background-color: black;
//display: flex;
display: flex;を有効にしちゃうと、なぜ円同士が最初っからくっついちゃうのですか?
たとえば、footer に max-width:1078px と入れると、3つの円が全体的に左側に移動しました。
なぜ?!といった感じです
そうなんです、教えて頂いたとおりですが、max-width: 968px; /* 追加 */の部分だけ、幅を867pxに変えています。
いろいろと教えて下さい。
どのように考えて、アドバイスいただいたコードになったのか、知りたいです。
宜しくお願いします。
>display: flex;を有効にしちゃうと、なぜ円同士が最初っからくっついちゃうのですか?
フレックスアイテム(display:flexの子要素)の幅は内容物依存になるからです。
つまり、最小限まで小さくなるので、justify-content: space-between のための余白が残らないのです。
---
>footer に max-width:1078px と入れると、3つの円が全体的に左側に移動しました
.footer には、margin: 0 auto がないからです。
少しわかってきました。ありがとうございます。
内容物依存とはどこの内容物に依存?するのでしょうか?
.footer には、margin: 0 auto がないからです。
➡でもfooter自体にはもともと幅はあるものなのでは?
フレックスアイテムの子要素です。display:flex から見ると 孫要素ですね。
たとえば、
display:flex の要素
子要素(フレックスアイテム)
孫要素 = 幅500pxの画像
とあった時に、子要素の幅は500pxになります。
> でもfooter自体にはもともと幅はあるものなのでは?
まず、マージンの初期値は0です。これは何も指定しない場合、マージンはゼロになるということです。
つまり、margin-left: 0 なので左によります。
margin: 0 auto を指定した場合は、margin-left: auto なので、中央に寄ります。
いつもあなたさまほど親身になってくださる方はおらず本当に感謝してます、またへんしんします
どのように考えて、アドバイスいただいたコードになったのか、知りたいです。
宜しくお願いします。
まず、「結果として768あたりで、ぴったりくっつく」ということでしたので、768/3=256pxまで.f-listの幅を広げました。(そうしないと、ぴったりくっつかないはずなので)
そして、余白を開けるためには、.f-menu の幅が伸縮しないといけないので、.footer の flex を外しました。
最後に、余白が最大100pxということなので、768+100+100=968pxで .f-menu の幅を制限しました。