1行以上のタイトルがあります。
テキストを垂直方向に揃えるにはどうすればよいですか?常に1行の場合は、行の高さをコンテナの高さに設定できます。
JavaScriptを使用してそれを行うことはできますが、私はそれがあまり好きではありません。純粋なCSSの方法を探しています。
また、コンテナが線で拡張できれば完璧なので、常に上下に同じパディングを付けることができます。
回答:
これには、display:table-cell
プロパティを使用できます。
.inline {
display: inline-block;
margin: 1em;
}
.wrap {
display: table;
height: 100px;
width: 160px;
padding: 10px;
border: thin solid darkgray;
}
.wrap p {
display: table-cell;
vertical-align: middle;
}
<div class="inline">
<div class="wrap">
<p>Example of single line.</p>
</div>
</div>
<div class="inline">
<div class="wrap">
<p>To look best, text should really be centered inside.</p>
</div>
</div>
ただし、IE8以降では動作します。詳細については、この記事をお読みください:CSSの秘訣:複数行のテキストを垂直方向に中央揃えにします。
.wrap
持っているマジックナンバーをするためにheight
そしてwidth
、あなたはそれらのそれぞれを設定することができます100%
。次に、要素の親にwidth
とheight
を適用します.wrap
。
display:table
トリックが気に入らない場合(私は気に入らないことはわかっています)、それなしの解決策は次のとおりです。
.cen {
min-height:5em; width:12em; background:red; margin:1em 0;
}
.cen p {
display:inline-block; vertical-align:middle;
margin:0 0 0 1em; width:10em;
}
.cen::after {
display:inline-block; vertical-align:middle; line-height:5em;
width:0; content:"\00A0"; overflow:hidden;
}
HTML付き
<div class="cen">
<p>Text in div 1</p>
</div>
これにより、コンテンツがより重い場合を除いて、divの高さが5emになり、大きくなります。ここに
実例があります。
編集:ああ、これはどのブラウザで動作するはずですか?IE8は協力しません。
(後の編集:Chromeの問題を処理するためにCSSを更新しました)
<br>
例に示されているタグではなく)それ自体でラップされたときに、Chromeの各要素の下部にかなりの余分な空白ができてしまったことです。疑似要素が新しい行に折り返されているようです。それを軽減する方法はありますか?
::after
ブロックは(その内容のために)幅があると考えているので、の後には収まりませんp
。残念ながら、コンテンツが必要です。そうしないと、完全に崩壊して機能しなくなります。しかし、なぜこれが折り返し行だけで行われ、単一行では行われないのかはわかりませんp
。
p
、divよりも幅を狭くすること::after
です。そのため、その右側にゼロ幅ブロック用のスペースがあります。お役に立てれば!
<div>
として分類しないでtable-item
ください。スクリーンリーダーと、もちろんユーザーを混乱させることになります。
私はこのソリューションが本当に好きです:
<div>
<span style="display: inline-block; vertical-align: middle; height: --The height of your box here--"></span>
<span style="display: inline-block; vertical-align: middle;">Put your multi-line content here</span>
</div>
スタイルシートを自由に使用し、高さは100%...
また、これらはインラインブロックであるため、スパンタグ間のスペースをコメントアウトする必要がある場合があります
<div style="outline:thin solid red;">
<span style="display: inline-block; vertical-align: middle; height: 60px;"></span>
<span style="display: inline-block; vertical-align: middle;">Put your multi-line content here.</span>
</div>
<div style="outline:thin solid red;">
<span style="display: inline-block; vertical-align: middle; height: 60px;"></span>
<span style="display: inline-block; vertical-align: middle;">Put your multi-line content here. Put your multi-line content here. Put your multi-line content here. Put your multi-line content here. Put your multi-line content here.</span>
</div>
注:これは、複数行のコンテンツでは機能しないようです。
vertical-align: center
andを使用する代わりに、CSS displayflexdisplay: table-cell
と呼ばれるはるかに単純な新しいメソッドを確認することをお勧めします。
.box {
width: 200px;
height: 50px;
padding: 10px;
margin-bottom: 20px;
background-color: red;
/* Only add these 2 lines */
display: flex;
align-items: center;
}
<div class="box">Lorem ipsum dolor</div>
<div class="box">Lorem ipsum dolor sit amet ipsum dolor</div>
このような何か
<div>
<p>
Lorem Ipsum is simply
</p>
</div>
div {
display: table;
}
p {
display:table-cell;
vertical-align: middle;
}
テキストをレスポンシブにしたい場合は、幅が動的に変化するため、単語を1行から複数行に折り返します。 inline-block
折り返す必要があります。ヘルパーを使用した(ここで最高の互換性があります)では、.inlinehelper
折り返しテキストを下に押し下げるだけでは不十分です。
このような単純なタスクの完全なソリューションは次のとおりです。
HTML:
<div id="responsive_wrap">
<span class="inlinehelper"><span id="content">
</div>
CSS:
#responsive_wrap {
display: block;
height: 100%; //dimensions just for
width: 100%; //example's sake
white-space: nowrap;
}
#content {
display: inline-block;
white-space: initial;
}
.inlinehelper {
height: 100%;
width: 0;
vertical-align: middle;
display: inline-block;
}
注意してくださいwhite-space:nowrap
防止財産、.inlinehelper
および#content
相互に関連してラップするが。
white-space:initial
オン#content
span
自分でラップする機能をリセットます。
別のオプション:
個人的な好みの問題。の代わりに疑似要素を使用できます.inlinehelper
。を削除します.inlinehelper
cssルールと要素を次の疑似要素cssセレクターを追加します。
#responsive_wrap:before {
content: "";
display: inline-block;
vertical-align: middle;
height: 100%;
width: 0px;
}
PS:これは本当に古い質問では遅すぎることがわかったので、この答えを聞かせてください。誰かにとって役立つかもしれません。
スタイリングに関しては、テーブルがコンテンツをレイアウトするための最良の方法です(CSSにスタイルタグを配置します)。
<table style="border:1;collapse;width:300px;padding:5px;background-color:red;">
<tr>
<td style="width:250px;vertical-align:middle;">Lorem ipsum dolor sit amet ipswum dolor</td>
<td style="width:50px;vertical-align:top;color:white;">1 Line</td>
</tr>
行数にはJSスクリプトが必要です。こちらをご覧ください:
http://www.webdeveloper.com/forum/archive/index.php/t-44333.html
私はそのような解決策が好きです。私はstackoverflowのどこかでこのトリックを見ましたが、正確にどこを覚えていません。非常に便利です!:)
ul {
background: #000;
padding-left: 0;
}
ul li {
height: 130px;
position: relative;
-webkit-box-sizing: border-box;
box-sizing: border-box;
border-bottom: 3px solid #F7F7F7;
}
ul li:last-of-type {
border-bottom: none;
}
ul li:after {
color: #333;
position: absolute;
right: 35px;
font-size: 40px;
content: ">";
top: 50%;
margin-top: -24px;
color: #FFDA00;
-webkit-transition: 0.25s all ease;
transition: 0.25s all ease;
}
ul li a {
font-size: 35px;
font-family: Arial;
color: #fff;
-webkit-box-sizing: border-box;
box-sizing: border-box;
padding-left: 40px;
height: 100%;
line-height: 38px;
display: inline-block;
width: 100%;
text-align: left;
text-decoration: none;
}
ul li a:before {
display: inline-block;
vertical-align: middle;
content: " ";
height: 100%;
}
ul li a span {
display: inline-block;
vertical-align: middle;
}
<ul>
<li class="dn">
<a href="kapec.ru.php"><span> Lorem ipsum 1 LINE</span></a>
</li>
<li>
<a href="varianti.ru.php"><span>Lorem ipsum <br> 2 lines </span></a>
</li>
</ul>