CSSをインラインで書く方法。:afterや:beforeをhtmlにそのまま書く【Blogger】
ブログをデザインするときCSSを使いますよね。
CSSを使うときは見やすくするためにhtmlとCSSに別々に分けて書くことが多いです。
その方がコードが読みやすくなったり、使いまわすときにコードの量を減らすことができます。
しかしBloggerなどの無料ブログではhタグ以外基本的にCSSは各ページに書くと思います。たぶん。
hタグは確実に使い、多用するのでブログ本体に入れたほうがいいですよね。
でもCSSで文字を囲う枠のデザインとか使うとき、ずっと同じ枠を使うとは限りません。
数回しか使わない枠をブログ本体に書き込むのはコードの乱雑さの原因となります。
それに色とかも毎回変えられた方が便利ですよね。
そこでインラインで入力することが求められます。
インラインで入力すれば毎回書くコードの量は増えますが使うときだけ使う分だけ使えます。
またデザインを毎回自分で簡単にいじることもできます。
方法
今回は文字を囲う吹き出しを例に取り上げます。
吹き出しの中身です
こんな感じのものですね。
疑似要素
この吹き出しのコードはCSSの疑似要素を使うことでhtmlとCSSを分けてすっきりさせて書くことができます。
それが以下のコードです。
<div class="hukidasi"> <p>吹き出しの中身です。</p> </div>CSS
.hukidasi{ position: relative; display: inline-block; margin: 1.5em 0 1.5em 15px; padding: 7px 10px; min-width: 120px; max-width: 100%; color: #555; font-size: 16px; background: #FFF; border: solid 3px #555; box-sizing: border-box; } .hukidasi:before { content: ""; position: absolute; top: 50%; left: -24px; margin-top: -12px; border: 12px solid transparent; border-right: 12px solid #FFF; z-index: 2; } .hukidasi:after { content: ""; position: absolute; top: 50%; left: -30px; margin-top: -14px; border: 14px solid transparent; border-right: 14px solid #555; z-index: 1; } .hukidasi p { margin: 0; padding: 0; }これについては前に紹介しました。
これをインラインで書くにはどうすればよいでしょうか。
インライン
疑似要素をインラインで書く、すなわちhtmlの中で1つにまとめるには疑似要素に対応させた<div>を使います。
疑似要素とは対象のタグに装飾を付け加えるものです。
今回は「hukidasi」クラスにあとから装飾を付け加えています。
CSSをhtmlの中に書くときはstyle="CSSのコード"という風に書きます。
まず最初の.hukidasiではそのhukidasiクラスの要素の中にそのまま書き加えています。
そのためインラインに直すには「class="hukidasi"」の部分を「style=".hukidasiの{}の中身"」に変えるだけです。
次の.hukidasi:beforeではさっきと異なりbeforeというものがついています。
このbeforeはそのhukidasiクラスの<div>の中の一番最初に追加するという意味です。
すなわちその<div>の直後に追加するという意味です。
どのように追加するかというと
<div style="さっきのコード">
<div style=".hukidasi:beforeの{}の中身">
<p>~
という感じです。
<div>の中の最初に追加されるため、<p>よりも前に記述されます。
ではその次のafterはというと、hukidasiクラスの<div>の一番最後に追加するという意味です。
すなわち</div>の手前ですね。
最後の.hukidasi pはそのままpタグの中に追加するだけです。
このようにして追加したのが以下の通りです。
<div style="position: relative; display: inline-block; margin: 1.5em 0 1.5em 15px; padding: 7px 10px; min-width: 120px; max-width: 100%; color: #555; font-size: 16px; background: #FFF; border: solid 3px #555; box-sizing: border-box;"> <div style="content: ""; position: absolute; top: 50%; left: -24px; margin-top: -12px; border: 12px solid transparent; border-right: 12px solid #FFF; z-index: 2;"></div> <p style="margin: 0; padding: 0;">吹き出しの中身です。</p><div style=" content: ""; position: absolute; top: 50%; left: -30px; margin-top: -14px; border: 14px solid transparent; border-right: 14px solid #555; z-index: 1;"></div> </div>
このようにしてインライン化できます。
しかし実際はこれでは動きません。
実はcontent=""の部分のcontentというものは疑似要素の中でしか使えません。
そのためcontent=""の部分を削る必要があります。
また、無料ブログであるBloggerではcontentを削っただけだと吹き出しの三角の部分が消えてしまいます。
bloggerでは勝手にコードが補完されるようで、上のコードを入力して何か変更して保存するとafterとbeforeの三角形を構成するborder全体が透明になるようにコードが補完されてしまいます。
これを防ぐにはborder-rightだけではなく、left,top,bottomについても自分で記述する必要があります。
吹き出しの三角形の作り方
吹き出しの三角形はborderを重ねるとその境界が斜めになることを利用しています。
ここでtopの方を透明にすればleftだけの三角形を描画することができます。
しかし、bloggerでは指定していないものを補完しようとし、rightとbottomについて記述されていないとborder全体を透明にするコードが勝手に入るのです。
そのため、bloggerではrightだけの三角形を描画する場合でもtop,bottom,left,rightすべて書かないといけません。
以上のことを踏まえてBlogger用に吹き出しをインラインに直すと以下のようなコードとなります。
<div style="background: rgb(255, 255, 255); border: 3px solid rgb(85, 85, 85); box-sizing: border-box; color: #555555; display: inline-block; font-size: 16px; margin: 1.5em 0px 1.5em 15px; max-width: 100%; min-width: 120px; padding: 7px 10px; position: relative;"> <div style="border-bottom: 12px solid transparent; border-color: transparent rgb(255, 255, 255) transparent transparent; border-left: 12px solid transparent; border-right: 12px solid #FFF; border-style: solid; border-top: 12px solid transparent; border-width: 12px; left: -24px; margin-top: -12px; position: absolute; top: 50%; z-index: 2;"></div> <p style="margin: 0px; padding: 0px;">吹き出しの中身です</p> <div style="border-bottom: 14px solid transparent; border-left: 14px solid transparent; border-right: 14px solid; border-top: 14px solid transparent; left: -30px; margin-top: -14px; position: absolute; top: 50%; z-index: 1;"></div></div>
コメント
0 件のコメント :
コメントを投稿