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

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

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

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

CSS

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

Q&A

解決済

2回答

5897閲覧

positionを使うとtext-align: centerが効かなくなる気がする

退会済みユーザー

退会済みユーザー

総合スコア0

HTML5

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

CSS

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

1グッド

1クリップ

投稿2019/02/10 09:39

編集2019/02/10 11:21

前提・実現したいこと

六角形のマークの上に、言語名を載せたい。

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

cssファイルの一番した辺りの .lesson icon p{ ・・・ }の近くに質問を書きましたのでそちらをご覧ください。 cssファイルの、一番した辺りの .lesson-wrapper において text-align: centerをすることで 子要素の pの中身 とか img が lesson-icon 内で中央に配置(センタリング)と思います。 で、言語名をマークに載せるために position を使うところ、position: relativeを書いたところ、までは センタリングは維持されているのですが、position: abusolute を書くとなぜか言語名が左に寄ります。 基準点(lesson-iconの左上)の近く、例えば画像の左上近くに移動するならまだしも、なんで左に寄るのかわかりません。 また、width: 100%もわかりません。もともとpはブロック要素なので、lesson-icon内いっぱいに広がっているのでは ないですか?

該当のソースコード

html

1<!--ファイル名: index.html --> 2<!DOCTYPE html> 3<html> 4 <head> 5 <meta charset="utf-8"> 6 <title>Progate</title> 7 <link rel="stylesheet" href="stylesheet.css"> 8 <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css"> 9 </head> 10 <body> 11 <header> 12 <div class="container"> 13 <div class="header-left"> 14 <img class="logo" src="https://prog-8.com/images/html/advanced/main_logo.png"> 15 </div> 16 <div class="header-right"> 17 <a href="#" class="login">ログイン</a> 18 </div> 19 </div> 20 </header> 21 <div class="top-wrapper"> 22 <div class="container"> 23 <h1>LEARN TO CODE.</h1> 24 <h1>LEARN TO BE CREATIVE.</h1> 25 <p>Progateはオンラインプログラミング学習サービスです。</p> 26 <p>初心者にもやさしいスライドとレッスンで、ウェブサービスを作りながらプログラミングを学んでいきましょう。</p> 27 <div class="btn-wrapper"> 28 <a href="#" class="btn signup">新規登録はこちら</a> 29 <p>or sign up with</p> 30 <a href="#" class="btn facebook"><span class="fa fa-facebook"></span>Facebookで登録</a> 31 <a href="#" class="btn twitter"><span class="fa fa-twitter"></span>Twitterで登録</a> 32 </div> 33 </div> 34 </div> 35 <div class="lesson-wrapper"> 36 <div class="container"> 37 <div class="heading"> 38 <h2>Learn Where to Get Started!</h2> 39 </div> 40 <div class="lessons"> 41 <div class="lesson"> 42 <div class="lesson-icon"> 43 <img src="https://prog-8.com/images/html/advanced/html.png"> 44 <p>HTML & CSS</p> 45 </div> 46 <p class="txt-contents">ウェブページの作成に使用される言語です。HTMLとCSSを組み合わせることで、静的なページを作り上げることができます。</p> 47 </div> 48 <div class="lesson"> 49 <div class="lesson-icon"> 50 <img src="https://prog-8.com/images/html/advanced/jQuery.png"> 51 <p>jQuery</p> 52 </div> 53 <p class="txt-contents">素敵な動きを手軽に実装できるJavaScriptライブラリです。 アニメーション効果をつけたり、Ajax(エイジャックス)を使って外部ファイルを読み込んだりと色々なことができます。</p> 54 </div> 55 <div class="lesson"> 56 <div class="lesson-icon"> 57 <img src="https://prog-8.com/images/html/advanced/ruby.png"> 58 <p>Ruby</p> 59 </div> 60 <p class="txt-contents">オープンソースの動的なプログラミング言語で、 シンプルさと高い生産性を備えています。大きなWebアプリケーションから小さな日用ツールまで、さまざまなソフトウェアを作ることができます。</p> 61 </div> 62 <div class="lesson"> 63 <div class="lesson-icon"> 64 <img src="https://prog-8.com/images/html/advanced/php.png"> 65 <p>PHP</p> 66 </div> 67 <p class="txt-contents">HTMLだけではページの内容を変えることはできません。PHPはHTMLにプログラムを埋め込み、それを可能にします。</p> 68 </div> 69 </div> 70 </div> 71 </div> 72 <div class="message-wrapper"> 73 </div> 74 <footer> 75 </footer> 76 </body> 77</html> 78

css

1/* ファイル名: stylesheet.css */ 2body { 3 margin: 0; 4 font-family: "Hiragino Kaku Gothic ProN"; 5} 6 7a { 8 text-decoration: none; 9} 10 11.container { 12 width: 1170px; 13 padding: 0 15px; 14 margin: 0 auto; 15} 16 17.top-wrapper { 18 padding: 180px 0 100px 0; 19 background-image: url(https://prog-8.com/images/html/advanced/top.png); 20 background-size: cover; 21 color: white; 22 text-align: center; 23} 24 25.top-wrapper h1 { 26 opacity: 0.7; 27 font-size: 45px; 28 letter-spacing: 5px; 29} 30 31.top-wrapper p { 32 opacity: 0.7; 33} 34 35.btn-wrapper { 36 margin: 20px 0; 37} 38 39.btn-wrapper p { 40 margin: 10px 0; 41} 42 43.signup { 44 background-color: #239b76; 45} 46 47.facebook { 48 background-color: #3b5998; 49 margin-right: 10px; 50} 51 52.twitter { 53 background-color: #55acee; 54} 55 56.btn { 57 padding: 8px 24px; 58 color: white; 59 display: inline-block; 60 opacity: 0.8; 61 border-radius: 4px; 62} 63 64.btn:hover { 65 opacity: 1; 66} 67 68.fa { 69 margin-right: 5px; 70} 71 72header { 73 height: 65px; 74 width: 100%; 75 background-color: rgba(34, 49, 52, 0.9); 76} 77 78.logo { 79 width: 124px; 80 margin-top: 20px; 81} 82 83.header-left { 84 float: left; 85} 86 87.header-right { 88 float: right; 89 background-color: rgba(255, 255, 255, 0.3); 90 transition: all 0.5s; 91} 92 93.header-right:hover { 94 background-color: rgba(255, 255, 255, 0.5); 95} 96 97.header-right a { 98 line-height: 65px; 99 padding: 0 25px; 100 color: white; 101 display: block; 102} 103 104 105.heading { 106 padding-top: 60px; 107 padding-bottom: 30px; 108 color: #5f5d60; 109} 110 111.heading h2 { 112 font-weight: normal; 113} 114 115.lesson-wrapper { 116 height: 500px; 117 padding-bottom: 80px; 118 background-color: #f7f7f7; 119 /* text-alignをcenterに指定してください */ 120 text-align: center; 121} 122 123.lesson { 124 float: left; 125 width: 25%; 126} 127 128/* lesson-iconクラスのCSSを指定してください */ 129.lesson-icon{ 130 position: relative; 131} 132 133/*ここより上は変更しません。で、/* */の箇所を表示させた時の動きの違いを理解できません。 134position: absoluteだけ表示させた時にHTML & CSSという文字が左に行く理由がわからない。 135text-alignで、p内で中央に移動していたはずでは? 136 137追加でtop: 90pxを表示させた時、上(というか、基準点であるlesson-iconの左上から90pxの箇所)に移動はわかる。 138 139さらに追加でwidth: 100%を表示させたときにHTML & CSSという文字が右に移動する理由がわからない。 140そもそもpは指定しない場合widthは元から100%なので、lesson-iconの中で横いっぱいに広がっていたはずでは? 141 142color: whiteを//によって消しているのは黒文字の方が変化がわかりやすいため。*/ 143 144/* lesson-iconの中の<p>のCSSを指定してください */ 145.lesson-icon p{ 146 /*position: absolute;*/ 147 /*top: 90px;*/ 148 /*width: 100%;*/ 149 /*color: white;*/ 150} 151 152 153/* txt-contentsクラスのCSSを指定してください */ 154/*.txt-contents{ 155 width: 80%; 156 display: inline-block; 157 margin-top: 20px; 158 font-size: 12px; 159 color: #b3aeb5; 160}*/
bochan2👍を押しています

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

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

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

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

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

m.ts10806

2019/02/10 11:04

コードはファイルが別であればコードブロックをわけてください。 「コピペで誰でもそのまま再現できること」が原則なのでコメントは外にだすか、きちんと言語にのっとったコメント対応してください。
退会済みユーザー

退会済みユーザー

2019/02/10 11:22

ご指摘ありがとうございました。 以後気をつけます。
guest

回答2

0

そもそも position: absolute である必要が無いような。(横幅も固定だし)

CSS

1.lesson-icon p { 2 margin-top: -116px; 3 margin-bottom: 100px; 4} 5```**動くサンプル:**[https://jsfiddle.net/xeswa6ng/](https://jsfiddle.net/xeswa6ng/) 6 7--- 8 9`position: absolute`を指定すると要素の幅/高さがなくなります(内包要素の幅/高さになる)。左に寄ったのはデフォルトの基点が左だから。デベロッパーツールで状況を確認してみるとよいです。 10 11 12【ChromeデベロッパーツールでCSSをチェックする方法 | なんでものびるWEB】 13[https://nandemo-nobiru.com/2944/](https://nandemo-nobiru.com/2944/) 14 15【初心者向け!Chromeの検証機能(デベロッパーツール)の使い方】 16[https://saruwakakun.com/html-css/basic/chrome-dev-tool](https://saruwakakun.com/html-css/basic/chrome-dev-tool)

投稿2019/02/10 15:52

kei344

総合スコア69398

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

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

退会済みユーザー

退会済みユーザー

2019/02/11 01:13

回答とデベローッパーツールのリンク、ありがとうございます。 書いていただいたコードを使うと、たしかにマークの真ん中に言語名が乗りましたので、 そういう意味ではabsoluteは不要ですが、「横幅が固定だし」という意味が分かりません。 実際にDTを使ってみると、画像や言語名の要素の高さやmarginの値が分かりましたが、margin-topを負にしたときの動きが意味がわかりません。ggりましたが意味がわからなかったので教えていただけないでしょうか。 ~~~~~~~ position: absoluteを指定すると要素の幅/高さがなくなり、左によるというのは、 僕が載せたコードの .lesson-icon p内で position: absolute; top: 90px; box-sizing: border-box; background-color: red; border: solid 2px black; を書くと確かめられました。
kei344

2019/02/11 02:58

> 「横幅が固定だし」という意味が分かりません。 「レスポンシブ」とか聞いたことありますか?横幅にあわせて幅やレイアウトを変えたりするものなのですが、私の提示したものは「.lesson-icon p」直前のimg要素の高さがわかっているからできる書き方です。img要素の幅を例えば50%に指定してみてください。「文字が中央」より上になりませんか? > margin-topを負にしたときの動きが意味がわかりません。 意味とは。「ネガティブマージン(マイナスマージン)」あたりで探せば説明しているサイトも有るとは思いますが、要素をマイナス方向に動かすだけです。(たくさん使いすぎるとわけがわからなくなるので注意しましょう) >DT 略して使う人をはじめてみました。あるていど一般化した略しかた以外は伝わらない可能性があるので止めておきましょう。私はそれを見て何のことか少し考えてしまいました。
退会済みユーザー

退会済みユーザー

2019/02/11 06:11

回答ありがとうございます。 >文字が中央になりましたが、質問の意図?がわかりませんでした。 >検証してもマイナス方向に動くというのがよくわかりませんでした。 >申し訳ありませんでした。
guest

0

ベストアンサー

position: abusolute を書くとなぜか言語名が左に寄ります。

「top」「left」等の位置指定がなければ「左上が基準」となるからです。


-回答を修正しました-

position: absoluteだけ表示させた時にHTML & CSSという文字が左に行く理由がわからない。

「position: abusolute」により、「左上」に移行しようとしますが、明確なtop指定がないため、初期値「auto」により、「imgの高さ」を確保した状態でそのまま「左」に移行します。

※「top」の初期値は「auto」であり、通常は「0」と同様の位置に来ますが、imgが先行されていると、高さを確保するので、「top指定」が必要になります。または、imgにも「position: abusolute」を設定する必要があります。


そもそもpは指定しない場合widthは元から100%なので、lesson-iconの中で横いっぱいに広がっていたはずでは?

「position: abusolute」により、width指定がないので、インライン要素的な範囲になります。


-追記-
「float」や「position:abusolute」による「要素の高さ0」が、いくつかありますので、HTML・CSS等見直される事をオススメします。

投稿2019/02/11 02:10

編集2019/02/11 02:50
yoshinavi

総合スコア3523

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

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

退会済みユーザー

退会済みユーザー

2019/02/11 06:09

回答ありがとうございます。 ※の上まではそうなんだなという感じでした(知識というか)。 ※の下の、imgにも[position: abusolute]のところは、imgだけabsoluteするとlessonの枠を 超えて右に移動したのですが、どういう意味だったのでしょうか...。 borderの間の説明は確かめるとそうでしたので納得できました。 追記の要素の高さ0というのがなんのことかggっても分かりませんでした。 progateで一通りやっただけで知識が全然まとまってないので本を買ってもう一度やってみます。
yoshinavi

2019/02/11 21:09

>imgだけabsoluteするとlessonの枠を超えて右に移動したのですが、どういう意味だったのでしょうか...。 → 「.lesson」のCSS設定「width: 25%;」の範囲で、「.lesson-wrapper」のCSS設定「text-align: center;」によるもので、結果的に「右に寄った」ようにみえるだけです。各数値を任意調整すると理解出来るかと思います。 >追記の要素の高さ0というのがなんのことかggっても分かりませんでした。 → これは私の説明不足ですね。スミマセン。「親要素の高さ」のことで、子要素が「float」や「position: abusolute」のみのばあい、親の高さが確保できず「0」になってしまう事で、下側の要素が繰り上げられて、レイアウトに支障をきたす原因になる場合もあります。 この対策は検索するといくつか出てきますので「親要素 高さ float(またはposition:abusolute)」等で検索してみてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問