【CSS】例えば、contentでp要素の前に入れた文字列の幅をwidth: 20%のように指定し、その後ろに入る文字(p要素に元々入っている文字)をwidth: 80%と指定することは可能でしょうか?
----- 表示させたい形 -----
見出し
カテゴリー1の題名:カテゴリー1カテゴリー1…
カテゴリー2の題名:カテゴリー2カテゴリー2…
…カテゴリー2
----- HTML -----
<h1>見出し</h1>
<p id="p1" class="p">カテゴリー1</p>
<p id="p2" class="p">カテゴリー2</p>
----- CSS -----
#p1:before {
content: "カテゴリー1の題名:";
}
#p2:before {
content: "カテゴリー2の題名:";
}
.p {
display: inline-block;
width: 20%;
}
p要素の中身が長くなる場合、上記のように題名を超えずに表示させたいです。
疑似クラスを用いてコンテンツ(題名)を追加した場合、このようなことは難しいでしょうか?
ご回答いただけるとありがたいです。
みんなの回答 5 件
すみません、一部コードミスがありました。
.p {
display: inline-block;
width: 20%;
}
ではなく、
.p:before {
display: inline-block;
width: 20%;
}
が正しいです。
こういうのは、dl使った方がいい気がします。
<dl class="clearfix">
<dt>カテゴリー1の題名</dt><dd>カテゴリー1...</dd>
<dt>カテゴリー2の題名</dt><dd>カテゴリー2...</dd>
</dl>
dl{
width: 100%;
}
dt{
width: 20%;
float: left;
clear: both;
margin-bottom: 5px;
}
dd{
margin-left: 20%;
float: left;
width: 80%;
margin-bottom: 5px;
}
確認してませんが、こんな感じでできませんかね。
:beforeをdisplay:blockにして、float:leftで20%指定ではどうでしょうか。
さらに高さを指定すればp要素のところで折り返してくれますが… これってどうなんでしょう。
コードが増えると言っても、HTMLの構成上必要な要素であれば適切にマークアップする必要があると思いますよ。
こんな感じでどうでしょう
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<style>
#p1:before {
content: "カテゴリー1の題名:";
width: 20%;
position:absolute;
left:-20%;
text-align:left;
background:#aaa;
text-overflow:ellipsis;/*折り返したい場合以下3行を削除*/
overflow:hidden;
white-space:nowrap;
}
#p2:before {
content: "カテゴリー2の題名:";
width: 20%;
position:absolute;
left:-20%;
text-align:left;
background:#aaa;
text-overflow:ellipsis;
overflow:hidden;
white-space:nowrap;
}
p {
position:relative;
margin: 0 0 10px 20% ;
background:#67A0CC;
}
</style>
</head>
<body>
<h1>見出し</h1>
<p id="p1" class="p">カテゴリー1</p>
<p id="p2" class="p">カテゴリー2カテゴリー2カテゴリー2カテゴリー2カテゴリー2カテゴリー2カテゴリー2カテゴリー2カテゴリー2カテゴリー2カテゴリー2カテゴリー2カテゴリー2カテゴリー2カテゴリー2カテゴリー2</p>
</body>
</html>
こういう場合に:beforeを使うのは、tableレイアウトにも劣るレイアウトだけできればなんでもいい的な明らなバッドノウハウだと思うな。
関連するトピックス