CSSでバッジ入れた囲み枠の作り方

@ハクト 2023-08-23 11:51:31に投稿

今回は囲み枠の一部にバッジを配置したCSSを紹介します。

before,after疑似要素を使用し、バッジを配置しています。

以下、ソースを見ていきましょう。

円形バッジを左上に配置

「border-radius: 50%;」で円形にし、「box-shadow: 0 0 5px #333;」で少しぼかしを入れてます。

<div class="card new-badge">
    <p>ここにカードの画像やテキストが入ります</p>
</div>

 

.card.new-badge::before {
    position: absolute;
    top: -25px; left: -25px;
    width: 50px; height: 50px;
    line-height: 50px;
    box-shadow: 0 0 5px #333;
    border-radius: 50%;
    background: #333;
    color: white; font-size: 0.8rem;
    text-align: center;
    text-transform: uppercase;
    content: 'new';
}

全てのソース

コードを表示

<div class="card new-badge">
    <p>ここにカードの画像やテキストが入ります</p>
</div>
.card {
    position: relative;
    padding: 1.5rem 1rem 1rem;
    width: 300px;
    height: 100px;
    border: 1px solid #333;
}

.card.new-badge::before {
    position: absolute;
    top: -25px;
    left: -25px;
    width: 50px;
    height: 50px;
    line-height: 50px;
    box-shadow: 0 0 5px #333;
    border-radius: 50%;
    background: #333;
    color: white;
    font-size: 0.8rem;
    text-align: center;
    text-transform: uppercase;
    content: 'new';
}

.card p {
    color: #333;
    line-height: 1.5;
}

斜めにしたバッジを左上に配置

before疑似要素の「linear-gradient」で左上から青➛透過で色を入れ、after疑似要素でテキストを入れてます。

.card.new-badge::before {
    position: absolute;
    top: 0; left: 0; bottom: 0; right: 0;
    background-image: linear-gradient(135deg, 
          #3998db 0 1.8rem, 
          transparent 1.8rem);
    content: '';
}
.card.new-badge::after {
    position: absolute;
    top: 0.35rem; left: 0;
    color: white; font-size: 0.8rem;
    transform: rotate(-45deg);
    text-transform: uppercase;
    text-align: center;
    content: 'new';
}

全てのソース

コードを表示

<div class="card new-badge">
    ここにカードの画像やテキストが入ります
</div>
.card {
    position: relative;
    padding: 1rem 1.5rem;
    box-shadow: 0 0 10px #ccc;
    width: 300px;
    height: 100px;
    line-height: 1.5;
}

.card.new-badge::before {
    position: absolute;
    top: 0;
    left: 0;
    bottom: 0;
    right: 0;
    background-image: linear-gradient(135deg, #3998db 0 1.8rem, transparent 1.8rem);
    content: '';
}

.card.new-badge::after {
    position: absolute;
    top: 0.35rem;
    left: 0;
    color: white;
    font-size: 0.8rem;
    transform: rotate(-45deg);
    text-transform: uppercase;
    text-align: center;
    content: 'new';
}

半円にしたバッジを中央上に配置

「border-radius: 30px 30px 0 0;」で左上と右上だけ角丸に。「border-bottom: transparent;」で下線を透過にしてます。

.card.new-badge::before {
    position: absolute;
    top: -2.05rem;
    left: 50%;
    width: 30px;
    height: 15px;
    line-height: 5px;
    transform: translateX(-50%);
    border-radius: 30px 30px 0 0;
    border: 2px solid #333;
    border-bottom: transparent;
    padding: 1rem 1rem 0 1rem;
    background: #ED7146;
    color: white;
    font-size: 0.8rem;
    text-align: center;
    text-transform: uppercase;
    content: 'new';
}

全てのソース

コードを表示

<div class="card new-badge">
    <p>ここにカードの画像やテキストが入ります</p>
</div>
.card {
    position: relative;
    padding: 1.5rem 1rem 1rem;
    width: 300px;
    height: 100px;
    border: 2px solid #333;
    border-radius: 5px;
    background-color: #efefef;
}

.card.new-badge::before {
    position: absolute;
    top: -2.05rem;
    left: 50%;
    width: 30px;
    height: 15px;
    line-height: 5px;
    transform: translateX(-50%);
    border-radius: 30px 30px 0 0;
    border: 2px solid #333;
    border-bottom: transparent;
    padding: 1rem 1rem 0 1rem;
    background: #ED7146;
    color: white;
    font-size: 0.8rem;
    text-align: center;
    text-transform: uppercase;
    content: 'new';
}

.card p {
    color: #333;
    line-height: 1.5;
}

@ハクト

サービス作り・デザイン好き。70年代生まれのWEBエンジニア。WEBパーツをCSSでカスタマイズしてコピペできるサービスを運営中「Pa-tu」。実装したWEBパーツやツールを利用してWEB情報やライフハックを発信してます。

Twitter