質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.35%
CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

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

Q&A

解決済

3回答

967閲覧

before要素を使用し、ボーダーを挿入したい

study_111

総合スコア82

CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

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

0グッド

0クリップ

投稿2020/09/08 05:18

編集2020/09/08 05:18

before要素を使用し、li要素のテキストの前に、ボーダーを挿入したいです。
形としては、PageSpeedInsightの以下のようにしたいです。
イメージ説明
自分が記述した該当部分のコードは以下になります。

html

1<div> 2 <ul class="score_list"> 3 <li class="low">0–49</li> 4 <li class="middle">50–89</li> 5 <li class="high">90–100</li> 6 </ul> 7</div>

css

1.low::before{ 2 content:""; 3 width: 10%; 4 height:10%; 5 background-color: #ff4e42; 6 border:solid 1px; 7 } 8 .score_list{ 9 display: flex; 10 justify-content: space-around; 11 width: 48%; 12 margin-left: 23%; 13 list-style: none; 14 margin-top: 2%; 15 border: solid 1px gray; 16 border-radius: 2rem; 17 padding: 1%; 18 }

現状の問題点として、ボーダーが縦になってしまい横に広がらなくなってしまっている為、ここの部分を改善したいです。
jsfiddleにて、動作確認可能な状態になっています為、こちらからご確認頂けましたら幸いです。
ご助言の程、よろしくお願いします。

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

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

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

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

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

guest

回答3

0

ベストアンサー

CSS

1.score_list li::before { 2 content: ""; 3 display: inline-block; 4 height: .5rem; 5 width: 1.5rem; 6 border-radius: 1rem; 7 margin-right: 1rem; 8 vertical-align: middle; 9} 10 11.low::before { 12 background-color: #ff4f42; 13} 14 15.middle::before { 16 background-color: #ffa400; 17} 18 19.high::before { 20 background-color: #0bce6b; 21} 22 23.score_list { 24 display: flex; 25 justify-content: space-around; 26 width: 48%; 27 margin-left: 23%; 28 list-style: none; 29 margin-top: 2%; 30 border: solid 1px gray; 31 border-radius: 2rem; 32 padding: 1%; 33} 34

投稿2020/09/08 06:11

root_jp

総合スコア4666

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

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

study_111

2020/09/08 07:04

ご回答ありがとうございます。 ご提示頂いたスタイルの適用で、解決できました。 シンプルで分かりやすいスタイリングであり、勉強になりました。
guest

0

サイズやマージンは適当ですので、お好みで微調整してください。

css

1.score_list > li { 2 width: 33%; 3 display: flex; 4 margin: 0 12px; 5 justify-content: center; 6 align-items: center; 7} 8.score_list > li::before{ 9 content:""; 10 display: block; 11 width: 20%; 12 height: 0.5em; 13 background-color: #ff4e42; 14 border-radius: 0.5em; 15 margin-right: 10px; 16 } 17.score_list > li.low::before { 18 background-color: #ff4e42; 19} 20.score_list > li.middle::before { 21 background-color: #ffa400;; 22} 23.score_list > li.high::before { 24 background-color: #0cce6b;; 25}

Codepenサンプル

投稿2020/09/08 06:08

hatena19

総合スコア34075

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

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

study_111

2020/09/08 07:01

ご回答ありがとうございます。 jsfiddleにて、該当のスタイルを貼り付けてみたのですが、ボーダーが3列の表示となっていました。 貼って頂きました、codepenとは違った挙動となっていたのは何故でしょう...?
hatena19

2020/09/08 08:05

.score_lis の部分は残しておいて、それ以外を上書きすれば横並びになります。
study_111

2020/09/08 08:33

ご返信ありがとうございます。 そういうことだったのですね。表示されること、確認できました。 こちらのスタイルの適用方法に関しましても、参考にさせて頂きます。
guest

0

サンプルとしてちょっと弄ったので修正は必要かと思いますが、以下のようにすれば良いかと思います。
キモはdisplay: inline-block;です。
こいつでinline-blockに変えることでWidthの設定が出来たり、Block要素と似たようなことが出来るようにします。
もちろん、inline要素の性格も持ち合わせるので、li要素が押し出されて崩れます。(Fiddle上だと二行になる)
このあたりの調整は別途がんばってもらうとして、一旦横に広げれるようにするところまでを回答とします。

.low::before{ content:""; width: 10%; background-color: #ff4e42; border:solid 2px #ff4e42; display: inline-block; vertical-align: middle; }

投稿2020/09/08 05:43

mikan_s4n

総合スコア377

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

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

study_111

2020/09/08 06:57 編集

ご回答ありがとうございます。 borderに対して、widthなどの幅指定をする為に「display: inline-block;」が必要だったという訳なのですね...
mikan_s4n

2020/09/08 08:25

borderに対してというよりは「befor要素に対して」ですね。 before要素はインライン要素に含まれます。 インライン要素は文字ベースでwidthが自動で決められるので基本的にwidthの指定ができないのです。 これに対するブロック要素は<div>などが代表的ですが『箱』的な扱いのため、widthが出来る感じです。 「display: inline-block;」はインライン要素をブロック要素のように取り扱うための指定ですね。 これを指定することでインライン要素でありながらブロック要素のようにふるまわせることが出来るようになります。
study_111

2020/09/08 08:38

ご返信ありがとうございます。 「li」要素について、調べていたのですが、li要素はブロック要素のようなのですが、こちらはもしかして、flexboxを使用しインライン要素になってしまっていた為に、「display:inline-block」と指定する必要があったということでしょうか...?
mikan_s4n

2020/09/11 02:28

flexboxを使用した場合は該当箇所はブロック要素として振舞います。 「display:inline-block」を使用した理由は「Before」をブロック要素として振舞わせるためです。 BeforeはHTMLには直接書かない疑似クラスですが、開発者ツールで生成された実際のコードを見ると以下のような例になります。 <li class="low">::before"0–49"</li> beforeの実態は「content:"";」のように『文字』であるため、インライン要素なのです。 そのため、Widthの指定が出来るブロック要素としての振る舞いを持たせるために「display:inline-block」を指定したというわけです。
study_111

2020/09/11 06:20

ご返信ありがとうございます。 大変分かりやすく教えて頂き、勉強になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問