-
ID:j9XBaw さんの質問

CSS好きの方がいれば、教えてください。
CSSでリボン型のタイトルを制作したいと考えております。
タイトル背景に色があり右側が逆三角形に切れているスタイルです。
タイトルが1行であれば、borderの高さを合わせればできますが、
2行以上になっても対応できるようにしたいんです。
三角形の高さを相対で指定できれば解決しますが、私のスキルでは解決策が思いつきません。
CSSだけでこのようなスタイルを実現するのは難しいでしょうか?
CSS以外にjQueryを使用すれば実現できますか?
アドバイス頂けると助かります。

#hoge h1 {
width:672px;
height:100%;
padding:12px 0 12px 25px;
margin:0 0 15px -24px;
background:#0068b7;
font-size:115%;
line-height:140%;
color:#fff;
font-weight:bold;
position:relative;
box-shadow:-5px 1px 3px #CCC;
}
#hoge h1:after {
content:"";
/* borderとborder-rightの高さを相対で指定できれば(´;ω;`) */
border:25px solid transparent;
border-right:20px solid #fff; /* 背景色を指定 */
position:absolute;
right:0;
top:0;
}

みんなの回答 3 件

ID:fwNy0v さんの回答

CSSだけに固執しないなら、h1の高さを取得して、borderの高さをその値を用いて代入しては?

ID:fwNy0v

追記:Javascriptでの話です。

ID:j9XBaw

トピ主です。
回答ありがとうございます。
やはりJSで取得するしかないですよね。

ID:hUzF7. さんの回答

試しに作ってみたけど、CSSはやっぱり無理でした・・・
三角がborderじゃなければ%表示いけるから何とかなるかもですが。

リボンぽいタイトルをjQueryで可変にしてみる - jsdo.it - Share JavaScript, HTML5 and...

http://jsdo.it/Ituki/oOY5
ID:j9XBaw

トピ主です。
わざわざ試していただき、ありがとうございます。
やはり、三角がborder以外じゃないと難しいですよね。
boxをtransformでごにょごにょするか、画像を表示して高さをごにょごにょするとかですかね。
特にCSSのみの縛りプレイではないので、試していただいたjQueryのコードを参考にさせていただきます。
ありがとうございました。

ID:EBf/i5

なら右端に大きめの画像で解決するやん

ID:uRNWaV

トピ主です。
思いつく方法がそれぐらいで、できれば画像は使いたくないんですよね。

ID:ue2AH7 さんの回答

CSSだけでできるで。JSも画像もいらんし追加タグも要らん。
「CSS好きの方」って指名があるから教えないけど。俺CSS嫌いだからさ。笑
(ヒント:before,after使う)

ID:ue2AH7

おおっと。afterだけでもできるわ。すまんすまん。
(ヒント2: top:50%;)

ID:uRNWaV

トピ主です。
ヒントありがとうございます。
嫌よ嫌よも好きのうちと言いますし、CSS嫌いと言う人でも歓迎ですよ^^
頂いたヒントを参考に試してみます。

ID:ue2AH7

好きじゃないけど仕事だから頑張ってんのよ~~!!
んでだ、でかい白三角を縦の真ん中にあわせて(top:50% と負のmargin-top)、overflow:hidden; ではみ出しを切る、てことね。
見栄え上のリボン長が行数によって可変になるんで希望通りじゃないかもしれんが、こんなことでJSとか画像使うよりはええやろ?

ID:uRNWaV

トピ主です。
なるほど!下記のようにすれば行数が変わっても同じようなスタイルになるということですね。
この考え方は他のスタイルを記述するときにも、応用できるかもしれないですね。
素晴らしい発想ですね、勉強になりました!
お付き合いいただき、ありがとうございました。

#hoge h1 {
width:670px;
padding:12px 0 12px 25px;
background:#0068b7;
font-size:115%;
line-height:140%;
color:#fff;
font-weight:bold;
position:relative;
overflow:hidden;
}
#hoge h1:after {
content:"";
border:50px solid transparent;
border-right:30px solid #fff; /* 背景色を指定 */
position:absolute;
right:0;
top:50%;
margin-top: -50px;
}

ID:ue2AH7

俺もおかげで勉強になったのよ。最初は負のマージン思いつかなくて三角を上下2つに分けたアホな方法だった。どうもありがとう。
ますますCSSが嫌いになったが、それでも生き延びるため仕方なく学び続けるわけよ~~~

最終更新日:2014-04-11 (4,487 views)

関連するトピックス

ページ上部に戻る