🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
HTML5

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

CSS

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

Q&A

解決済

1回答

4336閲覧

position:relativeを使った時にできる空白を埋められない件

ShinjiAsai

総合スコア51

HTML5

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

CSS

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

0グッド

0クリップ

投稿2019/10/18 08:17

position:relativeを使った時にできる空白が埋められない件

初めてのサイト模写の途中で行き詰まってます。
「position:relative」を使って、プロフィール画像の横に、名前とSNSアイコンを配置しました。するとプロフィール画像とプロフィール文との間に、空間が・・・。
marginなどをいじってもうまくいかなくて困っています。どうしたらいいか教えていただけないでしょうか?

以下に関係がありそうな部分のHTMLとCSSを貼っておきます。よろしくお願いします。

HTML

1<low-wrapper> 2 <div class="container"> 3 <div class="infomation profile"> 4 <img src="images/profile.png" alt=""> 5 <h3>John Michels</h3> 6 <div class="sns-icon"> 7 <span class="fab fa-twitter"></span> 8 <span class="fab fa-facebook-f"></span> 9 <span class="fab fa-instagram"></span> 10 </div> 11 <p class="text-content">これはプロフィールウィジェットです。ここにはプロフィール画像・名前・自己紹介文・ソーシャルリンク(最大7つ)を設定することができます。</p> 12 </div> 13 <div class="infomation latest-post"> 14 <h4>最近の投稿</h4> 15 <div class="post"> 16 <a href="#">書くためのテーマ</a> 17 <p>2018年9月1日</p> 18 </div> 19 <div class="post"> 20 <a href="#">画像付きの投稿</a> 21 <p>2018年3月5日</p> 22 </div> 23 <div class="post"> 24 <a href="#">引用付きの投稿</a> 25 <p>2018年3月5日</p> 26 </div> 27 </div> 28 <div class="infomation category"> 29 <h4>カテゴリー</h4> 30 <a href="#">サンプル投稿</a> 31 <a href="#">投稿フォーマット</a> 32 <a href="#">普通の投稿</a> 33 </div> 34 <form id="form1" action="自分のサイトURL"> 35 <input id="sbox" id="s" name="s" type="text" placeholder="キーワードを入力" /> 36 <input id="sbtn" type="submit" value="検索" /> 37 </form> 38 </div> 39 </low-wrapper>

CSS

1.infomation { 2 margin-top: 70px; 3} 4 5.profile h3 { 6 position: relative; 7 top: -95px; 8 left: 140px; 9 10} 11 12.profile img { 13 position: relative; 14 border-radius: 50%; 15 width: 100px; 16 height: 100px; 17 top: 0px; 18 left: 0px; 19} 20 21.sns-icon { 22 color: #999; 23 display: inline-block; 24 position: relative; 25 top: -100px; 26 left: 160px; 27 font-size: 20px; 28} 29 30.fab { 31 padding: 0px 5px; 32} 33 34.text-content { 35 padding-top: 0px; 36 display: block; 37} 38 39.latest-post h4, .category h4 40 { 41 color: #333; 42 font-size: 14px; 43} 44 45.post a, .category a { 46 color: #666; 47 font-size: 17px; 48} 49 50.post a:hover, .category a:hover { 51 color: #ffd700; 52 transition: all 0.15s ease-in-out; 53} 54 55.post p { 56 color: #999; 57 font-size: 15px; 58} 59 60.category a { 61 display: block; 62 margin: 15px 0px; 63} 64 65.infomation input { 66 display: inline-block; 67} 68 69low-wrapper .container { 70 padding-bottom: 60px; 71 border-bottom: 1px solid #999; 72}

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

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

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

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

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

guest

回答1

0

ベストアンサー

やりたいことはこういうことですか?

イメージ説明

CSS

1.profile { 2 position:relative; /* div要素を基準にする */ 3} 4 5.profile h3 { 6 position: absolute; /* 基準となったdiv要素の位置を参考にして絶対位置を決める */ 7 top: 30px; /* div要素の上から30px */ 8 left:140px; /* div要素の左から140px */ 9} 10 11.profile img { /* relative必要なさそうだったから削除 */ 12 border-radius: 50%; 13 width: 100px; 14 height: 100px; 15 top: 0px; 16 left: 0px; 17}

position系の参考サイト


コメントから追記

CSS

1 2.profile { 3 position:relative; 4} 5 6.profile h3 { 7 position: absolute; 8 top: 30px; 9 left:140px; 10} 11 12.profile img { 13 border-radius: 50%; 14 width: 100px; 15 height: 100px; 16 top: 10000px; 17 left: 100000px;  /* 別に効いてない */ 18}

さきほどの回答したコードは手抜きでtop,leftを消してなかっただけです。

imgタグにもし position:absoluteをつけるとどうなるかわかりますでしょうか。

position:absolute をすると、その要素の高さが無視されるので、こうなります。

CSS

1.profile { 2 position:relative; 3} 4 5.profile h3 { 6 position: absolute; 7 top: 30px; 8 left:140px; 9} 10 11.profile img { 12 position:absolute; /* 絶対位置を指定してみた*/ 13 border-radius: 50%; 14 width: 100px; 15 height: 100px; 16 top: 0px; 17 left: 00px; 18} 19

イメージ説明


こうなってしまう理由は、position:absoluteを使うと他の要素は absoluteを指定した要素の高さの影響を受けなくなるからです。
⇒だから横に重ねられるんですねー。 まぁabsoluteを使うと要素が『浮く』んだと思ってもらうのがわかりやすいかもしれません。

では、逆に今回質問者さんが困っていた position:relativeの隙間問題を応用するとこんなこともできます。

CSS

1.profile { 2 position:relative; 3} 4 5.profile h3 { 6 position: absolute; 7 top: 30px; 8 left:140px; 9} 10 11.profile img { 12 position:relative;  /* relativeを指定してみた */ 13 border-radius: 50%; 14 width: 100px; 15 height: 100px; 16 top: 150px; /* 元居た位置から150pxずらす */ 17 left: 150px; /* 元居た位置から150pxずらす */ 18}

イメージ説明

要素(imgタグ)の高さを維持したまま場所が移動してうさちゃんが移動しましたーカワイイー

自分でいろいろ変えてみると理解が深まると思います。

興味があるうちに色々いじってみましょうー

投稿2019/10/18 09:13

編集2019/10/18 10:03
azuapricot

総合スコア2341

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

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

azuapricot

2019/10/18 09:18

position relativeだと隙間がどうしても埋まらなかった理由としては、 F12を押すとでてくるディベロッパーツールを使えばわかるのですが、 <h3>タグ分の高さがそのまま残ってしまっているからですね。 relative は使い方を理解していないで適当に使うとまずうまくいかないので きっちり理解してから使いましょう
ShinjiAsai

2019/10/18 09:22

そうです、ありがとうございます!あれー・・・シンプルなコードですね。 うーむむ…「div要素を基準にする」っていうのは、relativeで基準にできるってことですもんね。 はー、profileを基準にすれば良いってことですか!なるほど、やってみます!
azuapricot

2019/10/18 09:25

position関係ちょっといじっただけですからねー。 要素をどこかの横に配置したいときは、position:relativeじゃなくて、position:absoluteを使った方がやりやすいと思います。 (複数横に並べたりするときはdisplay:flexとかの方がいい場合もありますけれども)
ShinjiAsai

2019/10/18 09:33

ちょっとわからないのが、なんでimgの方にabsoluteが入らないんですかね? imgタグもh3タグもprofileの要素だから、どっちもabsolute指定しないと、って思うんですけど、違いますか? imgタグのtopとleftがなんで効くのかなって思いました。ごめんなさい、たくさん聞いてしまって!
ShinjiAsai

2019/10/18 09:34

とりあえず、もう一度relativeとabsoluteの使い方を調べたいと思います!ありがとうございます!
azuapricot

2019/10/18 10:03

参考になるかはわかりませんが追記しましたので暇なときにでも眺めておいてください
ShinjiAsai

2019/10/18 12:43

うわー、丁寧にすいません、ありがとうございます!また見させてもらいます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問