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

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

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

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

3回答

313閲覧

absolute(下揃え)したdivの高さを、内包した列に応じて変えるには?

Cystidia

総合スコア16

CSS3

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

1クリップ

投稿2018/01/19 05:16

編集2018/01/20 04:54

お世話になります。

ヘッダの一部(下記"div#description")を、1~2行程度の文章を「表示画面の下から24px」の位置に表示したいと考えています。

HTML

1<body> 2<header> // 高さ48px(PC)・108px(スマホ); CSS Gridで指定; position:relative(子要素nav/divの基点) // 3 <h1>タイトルロゴ</h1> 4 <nav id="headerNavi"> // PC・スマホとも右上; absolute // 5 <ul> 6 <li><a href="#!">検索</a></li> 7 <li><a href="#!">English</a></li> 8 <li><a href="#!">お問い合わせ</a></li> 9 </ul> 10 </nav> 11 <nav id="openMenu"> // PCとスマホで表示位置が違う; 共にabsolute // 12 <a href="#!">メニュー</a> 13 </nav> 14 <div id="description"> // 写真の説明文へのリンク; スマホはヘッダ下端・PCは下記#left下端にabsolute // 15 <a href="./写真の説明文へ"><p>写真タイトル&nbsp;&nbsp;&raquo; 解説</p></a> 16 </div> 17</header> 18<section id="left"> // 高さ(100vh - 108px -24px); CSS Grid(左40%); PCだと画像が出てスマホだとdisplay:none; // 19</section> 20<section id="main"> // 高さ(100vh - 108px -24px); CSS Grid(右60%); overflow-y:scroll; // 21 <div id="banners">各種固定ページのバナー</div> // flexbox // 22 <div id="whatnew">新着情報をカードで</div> // flexbox // 23 <div id="aboutme">会社説明概要等</div> // flexbox // 24</section> 25<footer> 26 <div>ここは高さ24pxのフッタ</div> 27</footer> 28</body>

といった感じのHTMLで、
PC | ヘッダが上48px固定、左40%が画像(背景)とそのタイトル(下端)、右60%がサイト本体、フッタが下24px固定
スマホ | ヘッダが上108px固定で、PCだと#leftに表示される画像(背景)とタイトルを表示、その下が本体、フッタが下24px固定
になっています。
ここで、PC用サイトだけ、header#descriptionを#left下端に表示したいのですが(スマホ用はヘッダ下端に小さい文字で表示しているので問題は生じない)、ブラウザを開くサイズによってheader#descriptionの中身が1行~3行になります。

CSS

1header div#description{ 2 position:absolute; 3 width:40%; 4 height:auto; /* 文字が1行で収まるとき、高さは2emになる */ 5 top:calc(100vh - 24px - 2em); /* 2emは文字が1行だったときのdivの高さ */ 6 left:0; 7 border:0; 8 margin:0; 9 padding:0; 10 background-color:rgba(0,0,0,0.5); 11 overflow:hidden; 12 z-index:9500; 13 text-align:right; 14} 15header div#description p{ 16 color:#fff; 17 font-size:90%; 18 border:0; 19 margin:0; 20 padding:0.5em 1em; 21 text-indent:0; 22}

このようなCSSを書いたところ、#description内の文字が1行に収まるうちはよいのですが、2行になると#descriptionが「下に」伸びてしまいます。
この#descriptionを下ではなく上に伸びるようにしたいのですが、何か良い方法はありますでしょうか。
CSSのみで実現できるのが理想ですが、jQuery等を使っても構いません。

[追記]
なんでこんな面倒なことを言っているかというと、上記headerと#leftを「写真とそのタイトル」というくくりで1つのインクルードファイルにしていて、数個ある「写真と解説の組み合わせ」をランダムでインクルードしています。その写真の表示位置を、PC版では#leftの背景に、スマホ版ではヘッダの背景にしており、共に「写真の下端」にタイトル(と説明文へのリンク)を出したいのです。
PC版とスマホ版でソースを同一にしたい(≒ソース読み込みで極力条件分岐させたくない)ので、上記のような作りにしています。

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

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

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

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

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

sousuke

2018/01/19 08:18

htmlのソース出したほうがいいと思います。
Cystidia

2018/01/20 04:09

すみません、今から準備します!
guest

回答3

0

topじゃなくてなんとかbottomを指定できません?

css

1bottom:calc(100vh - 50px - 2em);

投稿2018/01/19 08:34

sousuke

総合スコア3828

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

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

0

Diff

1- top:calc(100vh - 24px - 2em); 2+ bottom: 24px;

普通にbottomでいいのではと思いましたが、こういうことではなかったでしょうか?

投稿2018/01/19 06:13

sii_side

総合スコア849

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

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

Cystidia

2018/01/19 06:22

説明不足で申し訳ありません。 ヘッダがcss gridで上端108px固定となっており、中央にcalc(100vh - 108px - 24px)のスクロールする領域があり、フッタが下端に24px出ています。 今回「何行になっても下端から24pxのところに出したいdiv」は、訳あってヘッダ(<header></header>)に内包されており、bottom指定してしまうとヘッダの下端から24pxのところに表示されてしまいます。
sii_side

2018/01/19 07:11

祖先にstaticではない要素があるということでしょうか。ではabsoluteではなくfixedにするとか。
sii_side

2018/01/19 10:19 編集

absoluteのまま、bottomを負の数にするという方法もあるかもしれません。
Cystidia

2018/01/19 09:47

bottomを負の数、ひょっとしたらいけるかも?という気がしてきました。 試してみます!
Cystidia

2018/01/20 04:09

bottomを負の数にしてもダメでした。bottomが負≒始点が下がるだけで実質top指定と同じのようです。
guest

0

ベストアンサー

本来は「header」から出した方がやりやすいと思いますが、1つの案として、先にもうひとつ入れ子を作って、bottom設定で固定しておくと高さが無くても基準になるので、その中に#descriptionを設定ではどうですか?

投稿2018/01/20 04:36

yoshinavi

総合スコア3523

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

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

Cystidia

2018/01/20 04:48

申し訳ありません、もう少し詳し目に教えて下さい。 「もう一つの入れ子」はheaderを内包する感じで(高さ100vh?)作るということでしょうか?
yoshinavi

2018/01/20 05:02

headerを内包するのでなく、今の#descriptionの位置を「A」として、divでさらに入れ子を作れば、「A」が基準になるので、そこにbottom設定掛ければ良いのかなと、思います。上手く説明できずスミマセン。
Cystidia

2018/01/20 05:16

・今の#descriptionの位置をtopで下から24pxに固定 ・その中にheight:autoなdivを1つ噛ませて、#descriptionからabsoluteでbottom:0に指定 でしょうか? なんかいける気がしてきたので、今から書いてきます!
Cystidia

2018/01/20 05:50

できました!!! ありがとうございました!! cssは下記のようにしました。 header div#description{ top:calc(100vh - 24px - 10em); height:10em; background:none; } に設定 /* 10em=あり得ない高さ */ header div#description div#inner{ /* div#descriptionの中にdivを1つ置く */ width:100%; height:auto; position:absolute; bottom:0; background-color:rgba(0,0,0,0.5); } header div#description div#inner p{ text-align:right; }
Cystidia

2018/01/20 05:52

追記: レイアウト目的のdivが邪魔くさいので、pをdisplay:block指定して、pにbottomかけたら....とも思いましたが、div入れないとダメみたいでした。
yoshinavi

2018/01/20 06:42

解決されて何よりです。(^^)
Cystidia

2018/01/20 07:28

勉強になりました。ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問