🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

3回答

2218閲覧

CSS class定義ではなく、style直書きで同じものを作りたい

退会済みユーザー

退会済みユーザー

総合スコア0

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2021/02/10 00:51

編集2021/02/10 01:18

前提・実現したいこと

現在class定義で動作しているものを、style=""に直書きして同じものを作ろうとしています
1がclass定義したものです
2がstyle直書きしてみたものです

1と同じものを2の書き方で再現したいのですが、うまく同じにできません
beforeとafter部分の書き方が間違ってるのかと思いますが、
分かる方いらっしゃいましたらよろしくお願いいたします

style直書き以外の回答は受け入れません

該当のソースコード

css

11 2 3<style> 4 body,html { 5width:100%; 6height:100%; 7 } 8 9 .block { 10position: relative; 11 } 12 13 .block:before { 14 content: ""; 15 position: absolute; 16 } 17 18 .block::after { 19 content: "ラベル"; 20 position: absolute; 21 font-weight: bold; 22 color: #0082D2; 23 24 } 25 26 .block.top-right:before { 27 top: 0; 28 right: 0; 29 border-bottom: 4.5em solid transparent; 30 border-right: 4.5em solid #fff; 31 } 32 33 .block.top-right::after { 34 top: 13px; 35 right: 0; 36 transform: rotate(45deg); 37 } 38</style> 39 40<div style="width:50%;height:30%;border-radius:5px;background:red" class="block top-right"></div> 41

該当のソースコード

css

12 2 3<style> 4 body,html { 5width:100%; 6height:100%; 7 } 8</style> 9 10<div style="width:50%;height:30%;border-radius:5px;position:relative;background:red"> 11<div style="position:absolute;top:0%;right:0%;transform: rotate(45deg);border-bottom: 4.5em solid transparent;border-right: 4.5em solid #fff;"> 12<div style="position:relative;top:13px;right:0;">ラベル</div> 13</div> 14</div> 15

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

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

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

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

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

m.ts10806

2021/02/10 00:58

あえてそうする理由はなんでしょう。あと、表示上何がどう違ったのでしょう
退会済みユーザー

退会済みユーザー

2021/02/10 01:01

あえてする理由は動的にcontentの部分を書き換えたいからです いずれJavaScriptでdivを生成し、content部分をinnerTextで動的に変更したいと考えております 表示上の違いは実行していただければわかりますが、表示位置が合いません
退会済みユーザー

退会済みユーザー

2021/02/10 01:06 編集

classで定義してしまうとcontentの部分を書き換えることは不可能です divを100個(個数は固定ではない)生成して、100個それぞれの内容でcontent書き換えできないと考えました
m.ts10806

2021/02/10 01:07

質問本文に追記願います。 >classで定義してしまうとcontentの部分を書き換えることは不可能です 全体の構成分かりませんけど、class自体を動的に生成するか、変わるところだけstyle上書きしては?
退会済みユーザー

退会済みユーザー

2021/02/10 01:09

そのやり方もあるかと思いますが、より複雑になると思います class定義せずHTMLで実現できたら、よりスマートになると考えました
m.ts10806

2021/02/10 01:15

質問本文に追記願います。前提や経緯や背景は質問本文に必要です。 可能なら「html直書き以外の回答は受け入れません」と書いておいたほうが良いかもしれませんね。 こちらとしては「メンテナンス性や可読性も加味した提案」のつもりだったのですが、要らないようなので。
m.ts10806

2021/02/10 01:16

インラインのみならタグは「HTML」必須ですね
guest

回答3

0

classで定義してしまうとcontentの部分を書き換えることは不可能です

いえ、可能です。CSSの側でcontent: attr(data-xxx)のように書いておけば、あとからdata-xxx属性を書き換えることで中身を自由に設定できます(MDN)。

投稿2021/02/10 01:22

maisumakun

総合スコア145975

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

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

0

こんにちは。

誤解されているようですが、::before ::after 疑似要素は、その要素の子要素になります。ですので、元々の子要素やコンテンツとは兄弟要素になります。
つまり、イメージとしてはこんな構造です。

html

1<div> 2 <div>::before</div> 3 <div>::after</div> 4</div>

ところが、ご提示のコードはこのような構造になっています。

html

1<div> 2 <div> 3 <div>ラベル</div> 4 </div> 5</div>

まずはそこからではないでしょうか。

投稿2021/02/10 03:06

Lhankor_Mhy

総合スコア36946

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

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

guest

0

ベストアンサー

::befor疑似要素と::after疑似要素は子要素になります。つまり2つは兄弟関係です。
style直書きのHTMLは2つが子要素と孫要素になってます。

あと、スタイルの設定箇所も間違っています。

html

1<div style="width:50%;height:30%;border-radius:5px;position:relative;background:red"> 2 <div style="position:absolute;top:0;right:0;border-bottom: 4.5em solid transparent;border-right:4.5em solid #fff;"> 3 </div> 4 <div style="position:absolute;top:13px;right:0;font-weight: bold;color:#0082D2;transform:rotate(45deg);">ラベル</div> 5</div>

投稿2021/02/10 01:26

hatena19

総合スコア34073

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問