• ベストアンサー

box の左端と右端に書いた文字の下端を揃えるにはどうすれば

box の左端と右端に書いた文字の下端を揃えるにはどうすれば よいでしょうか。 <div style="width:200px;"> <span style="float:left;font-size:80%;">左端</span> <span style="float:right;font-size:150%;">右端</span> </div> float を指定しなければ下端は揃っているのですが、 float をつけると下端ではなく上端が揃います。

  • CSS
  • 回答数3
  • ありがとう数6

質問者が選んだベストアンサー

  • ベストアンサー
  • naokita
  • ベストアンサー率57% (1008/1745)
回答No.3

NO.1.2 naokita です。お礼拝見済み。 -------------------------- floatするって事は、上揃えになるのは仕様上当然の結果です。 ただ、その代わりにpadding-topでスペースを作れば下線で揃う計算。 例: 50% と 200%の場合は、padding-top: 3em;となる。 これなら簡単だと思ったのですが。 図で計算すればわかるでしょう(添付画参照) 考え方ですが、 元になる親font-sizeが 14pxだとして (デフォルトで16pxでも12ptでも良いのですが・・・)、 この行の高さは高い方(大きい方)を基準として、 この場合の高さは、14px×150%=21px 低い方(小さい方)の文字は、14px×80%=11.2px 差し引き、9.8px 低い方の文字上部に9.8pxのpading-topがあれば、 下部の文字を押し下げて必ず下線で揃う。 ところが、 px指定を拡大縮小ズーム出来ないブラウザがあったり %指定でもブラウザにより表示が違うので、 ここでは、em指定に設計する事。 そうすると、9.8pxをem変換すると、 本来は、9.8px/14px=0.7emとなるはずですが、 この親で既に80%としている為に ここでの親font-sizeは、14px×80%=11.2pxになる。 ですから、 この11.2pxでの9.8pxの割合は、 9.8px/11.2px=0.875em  つまり、およそ 0.9em って事です。 詳しくは、こんな感じですが、 計算するよりも大体の感覚で算出し表示確認した方が早いでしょう。 フォントファミリーによっても多少の誤差があるので注意。

t-okura
質問者

お礼

図までつけていただいてありがとうございます。 おかげさまで、計算方法が理解できました。 80% に縮んだサイズが 1em になるので、padding-top の サイズも元のサイズではなく 80% に縮んだサイズを元に 計算するということですね。 何度もお付き合いいただきありがとうございました。 これでこの質問を終わらせていただきます。

その他の回答 (2)

  • naokita
  • ベストアンサー率57% (1008/1745)
回答No.2

NO.1 です。お礼拝見済み。 以下、時間があれば色々とお試し下さい。 -------------------------- まず、質問上では <div style="width:200px;"> と幅固定されていますので、 ブラウザで文字サイズのみを変更された場合にレイアウト崩れに対応する指定ではありませんね・・・ 対応したいのなら、width:200px;を pxなどで指定しない事。 ブラウザによって微小の誤差はありますが、 一応は、主要ブラウザ対応でフォントサイズ変更も考慮した記述のはずです。 そのために padding-top が em 指定ですから。 制作時に「例」の font-size: % を変更して公開する場合には、 高い方150%なら、その行のMAXの高さになると考えるので、 低い方の高さを高い方の高さに計算して設定しないといけません。 今回の回答NO.1は、質問内容にあわせて、 150%から80%を差し引いた隙間分を1emに対して0.9emをpadding-topにしてあげたのです。 (本当なら 0.875em と計算になりますが およそ 0.9em だったので) 意味わかりますか? つまり、 ご自分で150%や80%を変更するのなら0.9emの部分を1em換算でfont-size変更に合わせて自分で変更してあげなければ隙間が合わずに当然ズレてしまうのです・・・ 質問内容が150%と80%のfont-sizeだったので0.9emとしたってだけの事なので、 font-size変更指定する場合には、 この0.9emを制作段階でご自分で計算・換算して算出するように。 そうすれば、ブラウザでフォントサイズのみ変更されてもほぼ同じ下部の位置に表示されます。 ---------------------------- 例: 50% と 200%の場合は、padding-top: 3em;となる。 <div style="width:200px; color: blue;"> <p style="float:left;font-size:50%; width: 2.1em; margin:0; padding-top: 3em;">左端</p> <p style="float:right;font-size:200%; width:70%; margin:0; text-align:right;">右端</p> <hr style="clear:both"> </div> このpadding-top:の部分はブラウザで表示確認後に微調整しましょう。 (計算数値よりも見た目で調整って事です。) ※ ついでに他所も少々変更。(あくまで今回は単語2文字表示の場合)   他の文字数なら各width:を調整する事。 表示文字数が多い場合には注意。 float:が落ちない範囲に設定。 ------------------------- positionは、ブラウザや文字サイズに耐えられない環境があるので

t-okura
質問者

お礼

重ねての回答ありがとうございます。この質問のきっかけは、font-size を 変えて <span> を並べただけであれば下端が揃うのに float で両サイドに よせるとなぜ下端ではなく上端が揃ってしまうのだろうということでした。 align や text-align, vertical-align を試してもどうしても下端が そろいませんでした。しかし、使い方が悪いだけできっと下端を揃える 方法があるはずだと考えました。 そのような方法があれば文字サイズを変更した場合やブラウザの設定で 文字を拡大縮小した場合もきれいに揃うだろうと期待しました。 いただいた回答から残念ながらそのような方法はなさそうです。 それでもう少し教えていただきたいのですが、padding-top で下げる 量はどのように計算するのでしようか。回答していただいた例で きれいに位置があっているのですが、下げる量をいっぱつで計算できると とても助かります。 font-size:80% と 150% だと、0.8em と 1.5em の差で 0.7em になり そうな気がするのですが、0.9em とのこと、この計算方法を教えてい ただけないでしょうか。 参考URL でも結構です。 よろしくお願いします。

  • naokita
  • ベストアンサー率57% (1008/1745)
回答No.1

<div style="width:200px;"> <p style="float:left;font-size:80%; width:2.1em; margin:0; padding-top: 0.9em;">左端</p> <p style="float:right;font-size:150%; width:2.1em; margin:0; ">右端</p> <hr style="clear:both"> </div> 表のセルでも vertical-align:bottom; とか色々。  

t-okura
質問者

お礼

回答ありがとうございます。 padding-top: 0.9em で位置を下げることでうまくあいました。 しかし、左右の文字の font-size を変えたり、ブラウザのメニューで 文字の大きさを変えると、ずれてしまいます。 vertical-align:bottom のように自動的にあわせることはできない のでしょうか。 ちなみに前の質問で四隅を position:absolute であわせる 方法を教えてもらいました。同じやり方でできそうです。 ただ、やってみると微妙にずれている感じではあります。

関連するQ&A

  • 上端、下端、右端、左端

    ある矩形領域を用意して、その上端、下端、右端、左端に それぞれ隠しボタンを配置しています。ボタンは上端の場合は 左端から右端まで伸びたものです。右端の場合は、上から下に 伸びています。 右上、右下、左上、左下の場合、これらをまとめて4 cornersと 言えそうですが、 上記の4つをまとめて英語ではどのように 言えるのでしょうか? 4 ??? of the rectangle(region)

  • float: leftで横に並べたら、サファリだけ

    float: leftで横に並べたら、サファリだけ隙間が空いてしまいます。 IEやファイヤーフォックスではピッタリ表示できています。 問題の箇所は以下です。 <div style="float: left;"> <p style="position: relative;"> <img src="./img/img-001.png" width="240" height="150" /> <br /> <span style="font-size: 12px; padding: 2px 5px 2px 5px; position: absolute; top: 130px; left: 0px; width: 230px; height: 16px; color: white ; background-color: black; opacity: 0.6;">テストテスト1</span> </p> </div> <div style="float: left;"> <p style="position: relative;"> <img src="./img/img-002.png" width="240" height="150" /> <br /> <span style="font-size: 12px; padding: 2px 5px 2px 5px; position: absolute; top: 130px; left: 0px; width: 230px; height: 16px; color: white ; background-color: black; opacity: 0.6;">テストテスト2</span> </p> </div> <div style="float: left;"> <p style="position: relative;"> <img src="./img/img-003.png" width="240" height="150" /> <br /> <span style="font-size: 12px; padding: 2px 5px 2px 5px; position: absolute; top: 130px; left: 0px; width: 230px; height: 16px; color: white ; background-color: black; opacity: 0.6;">テストテスト3</span> </p> </div> どうすればサファリの隙間を消せるでしょうか?

    • ベストアンサー
    • HTML
  • (CSS)画像が完全に右端に寄りません・・・

    CSS勉強中でソースの不備が多々あると思いますがどうかみていただけますでしょうか・・。 <div class="bar">の画像の一番端の右下に<p class="px">の画像を隙間無く持ってきたいのですがどうしても<p class="px">の右側が空いてしまいます・・。対処方法がございますでしょうか。 根本からソースが違うかもしれません・・何卒お願いいたします! .pattern_box { width:708px; padding:0px 26px; text-align:right; } .pattern_box .bar { width:708px; margin:0px; } .pattern_box .px { float: right; display: inline; margin: 0px 0px 10px auto; text-align:right; } .pattern_box .inner { margin:10px 0px 0px 0px; text-align:left; font-size:12px; line-height:18px; } ★HTML <div class="pattern_box"> <div class="bar"> <img src="h2_bar01.gif" alt="" width="708" height="20"> </div> <p class="px"><img width="145" height="62" src="h2_bar01_ill.gif"></p> <div class="inner">テキストテキストテキスト</div> </div><!--pattern_box-->

    • ベストアンサー
    • CSS
  • ボーダースタイルがうまく表示できない

    #content { width:525px; } div.box { width:525px; margin-top: 20px; border-bottom:dotted 1px #ccc; } div.left { width:140px; float: left; font-weight: bold; margin-left: 5px; } div.right { width:380px; float: left; line-height: 20px; height: 20px; } <div id="content"> <div class="box"> <div class="left">Address</div> <div class="right">住所<br>東京都</div> </div> </div> クラス名boxというボックスのボトムにボーダー指定をしましたが、ボックスのズレ?によりボーダーがトップになっているように見えてしまいます。 どこが間違っておりますか? アドバイスを宜しくお願いします。

    • ベストアンサー
    • HTML
  • スマホ画面で長い文章が、左端に短い幅で片寄る。

    スマホ画面で長い文章の部分だけ折り返され、左端に短い幅で片寄ってしまいます。 これはどのように修正すれば良いのでしょうか。PCではいろんなブラウザで問題なく表示されています。 #header { width:100%; background:#cccc99; } #container { width:950px; margin-left:auto; margin-right:auto; text-align:left; } #col1 { width:740px; float:left; margin-left:20px; background:#383838; } #col2 { width:190px; float:left; } #footer { clear:left; width:100%; border-top:1px solid #8f8472; } 左側にメニュー(190px)を配置したレイアウトです。 h1,h2,P,liタグなど、とにかく長い文章の部分だけ、画面幅ではなく、短い幅で折り返され 左側に片寄っています。下記のxxxxxxxxの部分もそのようになります。 ul.abc { list-style:none; width:100%; margin: 0; padding: 0; } ul.abc li { float:left; margin-right:1em; padding: 0; } ul.abc a { float:left; line-height:85px; } ul.abc img { float:left; margin-right:.5em; vertical-align:middle; } <ul class="abc"> <li><a href="..." target="_blank"><img src="..." width="115" height="85" alt=""/><img src="..." height="1px" width="1px" border="0"> xxxxxxxxxxxxxxxxxxxxx</a></li> </ul><div style="clear: left;"></div> よろしくお願い致します。

    • 締切済み
    • CSS
  • div#left {width:50%;

    div#left {width:50%; float:left; border:1px solid black;} div#right {width:30%; border:1px solid red;} がfloatされません。なぜでしょうか? <html> <head> <title>a</title> <style type="text/css"> <!-- div#left {width:50%; float:left; border:1px solid black;} div#right {width:30%; border:1px solid red;} --> </style> </head> <body> <div id="left"> left </div> <div id="right"> right </div> </body> </html> これでなぜならないのでしょうか?

  • IEとその他のブラウザの表示

    よろしくお願いします 現在、2段落の段組をCSSで行っています 但し、1段落目と2段落目にはマージンを指定しています そこで質問なのですが どこかのサイトでfloatとmarginは一緒に指定しないほうが良いというのを見たので --------------------------------- style.css --------------------------------- div.box_left_outer{ width: 300px; background-color: #FFF9E5; float: left; } div.box_left{ width: 260px; margin: 20px 20px 20px 20px; } div.box_right_outer{ width: 310px; float: left; } div.box_right_outer2{ width: 300px; margin-left: 10px; background-color: #FFF9E5; } div.box_right{ width: 260px; margin: 20px 20px 20px 20px; } --------------------------------- test.html --------------------------------- <html> <head> <meta http-equiv="Content-Style-Type" content="text/css"> <link rel="stylesheet" href="./style.css" type="text/css"> </head> <body> <div class="box_left_outer"> <div class="box_left"> テキスト </div> </div> <div class="box_right_outer"> <div class="box_right_outer2"> <div class="box_right"> テキスト </div> </div> <body> </html> という風に書いているのですが IEだと意図した表示になるのですが Firefoxやその他のブラウザだと右側の段組のマージンの箇所が 1つ上のdivについている感じになります Firefoxなどでも同じ表示にするにはどうしたらいいでしょうか? よろしくお願いします

    • ベストアンサー
    • HTML
  • このタグですが、ページを右端から左へ縮めても、常に中央に位置させたいのですが、、

    このタグですが、ページを右端から左へ縮めても、常に中央に位置させたいのですが、、、 <BODY> <DIV style="top : 56px;left : 95px; position : absolute; z-index : 1; width : 336px; height : 21px; " id="Layer1" align="center"><FONT size="+4">テキスト</FONT></DIV> </BODY>

    • ベストアンサー
    • HTML
  • ホームページビルダーでスタイルシートを使ったのですが?

    今、ホームページビルダーで簡単な2カラム(右メニュー)のテンプレートを作っています。 質問ですが、メニューバー(サイドバー)に色を付けたくて、画像を使う事にしました。 <div class="main">に画像(background.gif)を入れ属性で繰り返す(垂直方向)にチェックをいれたのですが、IEやfirefoxでプレビューでは反映されていないです。 色々いじってみたのですがどうしても解りません。どこが間違っているのか教えていただけないでしょうか? よろしくお願いします。 HTML <body> <div class="box"> <div class="header"> <span class="site_name">ここにサイト名を入れる</span> <h1>ここにh1</h1> <div class="description_1">ここに簡単な説明文</div> </div> <div class="main"> <div class="contents">コンテンツ部分<br /> </div> <div class="menu"> メニュー部分 </div> </div> <div class="footer"> フッター部分 </div> </div> </body> スタイルシート * { margin:0; padding:0; } .box{ width : 750px; margin: 0 auto; border-left-width : 1px; border-left-style : solid; border-left-color : black; border-right-width : 1px; border-right-style : solid; border-right-color : black; border-bottom-width : 1px; border-bottom-style : solid; border-bottom-color : black; } .header { width : 726px; height : 96px; background-color : #b9b9ff; padding-top : 12px; padding-left : 12px; padding-right : 12px; padding-bottom : 12px; border-bottom-width : 2px; border-bottom-style : solid; border-bottom-color : black; } .main { width : 750px; background-image : url(file:///C:/Documents and Settings/※※※/img/background.gif); background-repeat : repeat-y; background-position : 0px 0px; margin-top : 0px; margin-bottom : 0px; margin-left : auto; margin-right : auto; background-color : #ffffff; } .menu { float: left; width : 180px; padding-top : 10px; padding-left : 10px; padding-right : 10px; padding-bottom : 10px; margin-left : auto; margin-right : auto; } .contents { float: left; width : 526px; padding-top : 12px; padding-left : 12px; padding-right : 12px; padding-bottom : 12px; } .footer { clear: both; width : 726px; height : 26px; background-color : #b9b9ff; padding-top : 12px; padding-left : 12px; padding-right : 12px; padding-bottom : 12px; text-align : center; } .menu ul { list-style: none; } .site_name{ font-size : 21px; font-weight : bold; margin-left : 12px; } h1{ font-size : 15px; margin-top : 12px; margin-left : 24px; } .description_1{ font-size : 12px; font-weight : normal; margin-left : 24px; }

  • CSS:floatを使っての段組で困っています

    図のような段組をしたいのですが、ソースはあっているでしょうか? サイトを作成しているとズレたりするので、根本的な段組が間違っているのか見て頂けると助かります。 ■HTML <body> <div id="container"> <div id="box-2">box-2</div> <div id="box-3">box-3</div> <div id="box-4">box-4</div> <div id="box-5">box-5</div> <div id="box-6">box-6</div> <div id="box-7">box-7</div> <div id="box-8">box-8</div> </div> </body> ■CSS body { margin: 0 auto 0 auto; padding: 0px; height:100%; } #container { width: 800px; } #box-2 { float: left; width: 800px; height: 30px; } #box-3 { float: left; width: 400px; height: 300px; } #box-4 { float: left; width: 400px; height: 300px; } #box-567 { clear:left; float: left; width: 800px; } #box-5 { float: left; width: 300px; height: 200px; } #box-6 { float: left; width: 300px; height: 200px; } #box-7 { float: left; width: 200px; height: 200px; } #box-8 { clear:left; width: 800px; }

    • ベストアンサー
    • HTML

専門家に質問してみよう