これにはハックですが、すべての主要なブラウザの最新バージョンでは、チェックアウトのようですので、私はとにかくそれを投稿します。基本的な原則は、パーセントベースのパディング(上下のパディングも)が親の幅に対して相対的であることです。幅と高さが0
の100%
に設定すると、理論的には要素の高さが常に幅と等しいことになります。これを擬似要素と組み合わせると、マークアップを変更する必要はありません。私はflexboxを使ってコンテンツのセンタリングを修正しました。私がテストしたブラウザで動作するようですが、これはflexbox
とdisplay:table
を使用しているため、最近のバージョンにはまったく依存しています。私はまた、それがあまりにも少ないコンテンツの形をしていないことを確認するためにmin-width
を追加しなければならなかった。
.circle {
background-color: red;
color: white;
text-align: center;
position: relative;
border-radius: 50%;
min-width: 1.25em;
display: inline-flex;
align-items: center;
justify-content: center;
}
.circle:after {
content: '';
padding-top: 100%;
display:table;
}
<div class="circle">5</div>
<br>
<div class="circle">102</div>
<br>
<div class="circle">4298347918</div>
うん...あなたは立派です。 :P –
非常に良い答え。 –
これには2つの小さな問題がありますが、これはまあまあの解決策です。 1桁の数字がある場合、形は完全な円のようには見えません。そして私の第二の関心事は、私が通知領域にこれを使用しているからです。サークルは2桁以上のものには大きすぎます。明らかに 'padding:5px'のために、また我々は円の形を維持しようとしているからです。小さなサイズのためにこれを最適化することができればより良いでしょう。 – xperator