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

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

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

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

Q&A

1回答

1500閲覧

positionを使って等間隔に素材を置きたい

kana0701

総合スコア28

CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

0グッド

0クリップ

投稿2018/12/08 10:28

編集2018/12/08 13:16

前提・実現したいこと

イメージ説明

この画像のように等間に●を置きたいです。
グレーの背景の素材自体は900pxで●は250pxです。

発生している問題・エラーメッセージ

イメージ説明

なぜだか画像がかぶってしまい、どの●も同じ大きさなのに一部の●が大きくなってしまっている。
left:0%;にしてみたのに左端にくっつかないで中途半端な位置にいます。

該当のソースコード

css

1 .box{ 2 width: 100%; 3 position: relative; 4 margin:auto auto; 5 6 } 7 8 #a{ 9 animation: float2 2s ease-in-out infinite; 10 position: absolute; 11 left:0%; 12 top:35%; 13 margin:auto auto; 14 } 15 #b{ 16 animation: float2 2s 0.2s ease-in-out infinite; 17 position: absolute; 18 left:20%; 19 top:35%; 20 margin:auto auto; 21 } 22 #c{ 23 animation: float2 2s ease-in-out infinite; 24 position: absolute; 25 left:50%; 26 top:35%; 27 margin:auto auto; 28 } 29 30 #a:hover img{ 31 transform: scale(1.2,1.2); 32 } 33 #b:hover img{ 34 transform: scale(1.2,1.2); 35 } 36 #c:hover img{ 37 transform: scale(1.2,1.2); 38 }

html

1  <div class="box"> 2 <div class="cf" ><img src=testbg.jpg" alt="" width="100%"></div> 3 <div class="cf" id="a"><a href="#1"><img src="<test.png" alt="" width="50%"></a></div> 4 <div class="cf" id="b"><a href="#2"><img src="<test.png" alt="" width="50%"></a></div> 5 <div class="cf" id="c"><a href="#3"><img src="<test.png" alt="" width="50%"></a></div> 6 </div>

試したこと

widthやleftからの位置を調整したのですが変わりませんでした。
パソコンで見るようのコーディングはうまくいったのですが、
スマホように作っているところで表示が崩れてしまいました。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

yoshinavi

2018/12/09 03:14

症状が再現するコードをご提示ください。
kana0701

2018/12/09 04:35

上記のコードでなってしまいます。
yoshinavi

2018/12/09 04:47

誤記述がありますが再現しますか?
kana0701

2018/12/09 05:14

どこが間違っているのか自分ではわからないのですが、記載のコードで二枚目の画像のようになってしまいました。
x_x

2018/12/13 09:16

少なくとも<test.pngは間違いだと思うのですが大丈夫でしょうか? また、@keyframes float2 も提示してください。
guest

回答1

0

逆に等間隔にならなかったのですが。。。●がくっついてしまう件については、ウィンドウ幅を狭めると再現できました
https://codepen.io/xyuno0717/pen/QzjdaO

まず等間隔にすることについては置いておいて、●を重ならないようにすることについて結論から書きます

●を重ならないようにするには、画像のwidthを33.333333...%以下にする必要があります。(3つの●を合計して100%以下にする)
%指定することによって、ウィンドウ幅によってwidthが変わるようになります。

質問者さんのコードを踏襲するなら、以下のコードを追加していただくと実現できると思います。

css

1#a,#b,#c { 2 width: 100%; 3} 4a { 5 width: 100%; 6 display: block; 7}

html

1imgタグのwidthをすべて33.333333...%以下にする

この回答上部の再現コードを画面幅530pxにしてみた場合の解説
ID#a,#b,#cのimgの幅は50%に指定されているため、親のaタグの幅の50%がimgの幅の数値となる
→親のaタグはinline要素のためimgの幅の計算に使われず、更にaタグの親のdivタグがimgの幅の計算に使用される。
→画面幅530pxではdivタグの幅は250px。250pxの50%は125pxのため、imgタグの幅は125pxに決定。(なぜこの状況でdivタグが250pxになるのか?それについてはちょっと説明できないです。すみません)

ID#b(2個目の●)はleft: 20%の指定
→基準としているrelative要素(.box)のwidthの20%がleftの数値になる(514px*0.2=102.8px)

以上により、imgタグの幅が125pxなのに、
2個目の●のleftの値は102.8pxのため、1個目の●と22.2px被ってしまうことになります。

最後に等間隔については、上記のことを踏まえてimgのwidthとID#a,#b,#cのleftを調整すれば実装できます。

ちなみに個人的にですが、可能であれば position: abosoluteを使わずに、flexでimgを横並びにしてimgの左右にmarginをとったほうがわかりやすく等間隔が実現できるかなと思います

投稿2018/12/12 18:20

編集2018/12/13 01:16
xyunow

総合スコア122

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

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

kana0701

2018/12/16 03:08

まだ解決していないのですが、おそらく使用しているシステム上の不具合のようでした。 私では思いつかなかった方法を提示してくださってありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問