CSSで円形テキストを作成する
CSSとCSS Shapesを使ってテキスト入り円を描く方法
CSS Shapesは、要素の形状をカスタマイズするためのCSSモジュールです。これにより、テキストや画像を非矩形領域に配置することが可能になります。
円を描くための方法
円形の要素を作成
テキストの配置
- 絶対位置付け (
position: absolute;
) を使用して、テキストを円形要素の中央に配置します。 top: 50%;
とleft: 50%;
を設定し、テキストを円の中心に移動します。transform: translate(-50%, -50%);
を使用して、テキストの基準点を左上隅から中央に変更します。
- 絶対位置付け (
コード例
.circle {
width: 200px;
height: 200px;
background-color: #f0f0f0;
border-radius: 50%;
position: relative;
}
.circle-text {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
font-size: 24px;
text-align: center;
}
HTML例
<div class="circle">
<span class="circle-text">テキスト</span>
</div>
CSS Shapesを使った方法 (オプション)
CSS Shapesは、より複雑な形状を作成するために使用できます。円形は単純な形状ですが、より複雑な形状が必要な場合は、CSS Shapesの shape-outside
プロパティを使用することができます。
CSSで円形テキストを作成するコードの解説
コードの全体像
.circle {
width: 200px;
height: 200px;
background-color: #f0f0f0;
border-radius: 50%;
position: relative;
}
.circle-text {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
font-size: 24px;
text-align: center;
}
このコードは、HTMLの要素に適用することで、円の中にテキストを表示させるためのCSSスタイルを定義しています。
コードの解説
.circleクラス
- position: relative;
子要素である.circle-textを相対的に配置するための準備です。 - border-radius: 50%;
四角形の要素の角を丸くし、円形にします。 - background-color
円の背景色を薄い灰色に設定します。 - height
円の高さを200ピクセルに設定します。
.circle-textクラス
- text-align: center;
テキストを中央揃えにします。 - font-size: 24px;
テキストのフォントサイズを24ピクセルに設定します。 - transform: translate(-50%, -50%);
上記の設定で左上隅が円の中心になったため、テキストの中心を円の中心に合わせるために、x軸方向に-50%、y軸方向に-50%移動させます。 - left: 50%;
円の左から50%の位置に配置します。 - position: absolute;
親要素である.circleに対して絶対的に配置します。これにより、.circle内のどこでも自由に配置できるようになります。
HTMLでの利用例
<div class="circle">
<span class="circle-text">テキスト</span>
</div>
- <span class="circle-text"> : 円の中に表示するテキストを記述する要素です。
- <div class="circle"> : 円形の領域を表す要素です。
コードの働き
- HTMLの
<div>
要素に.circle
クラスが適用され、円形の領域が作成されます。 <span>
要素に.circle-text
クラスが適用され、テキストが円の中央に配置されます。
このコードによって、CSSのborder-radius
プロパティと、要素の絶対配置を組み合わせることで、シンプルな円形テキストを作成することができます。
ポイント
position: absolute;
とtransform: translate(-50%, -50%);
を組み合わせることで、要素を任意の位置に配置し、かつその要素の中心を指定した座標に合わせることができます。border-radius: 50%;
は、四角形の要素を円形に変換する便利なプロパティです。
応用
- CSS Shapesを使用すれば、より複雑な形状のテキストも作成可能です。
- 円の大きさや背景色、テキストの色やフォントなどを変更することで、様々なデザインの円形テキストを作成できます。
より詳しく知りたい場合は、以下のキーワードで検索してみてください。
- CSS Shapes
- CSS transform
- CSS position absolute
- CSS border-radius
- CSS 円形テキスト
SVG (Scalable Vector Graphics) を利用する方法
- デメリット
- コードがやや長くなる場合がある。
- ブラウザの互換性を考慮する必要がある。
- メリット
- 精度の高い円や複雑な形状が描ける。
- 拡大縮小しても画質が劣化しない。
- CSSでスタイルを細かく調整できる。
<svg width="200" height="200">
<circle cx="100" cy="100" r="100" fill="#f0f0f0" />
<text x="100" y="100" text-anchor="middle" fill="black">テキスト</text>
</svg>
- 解説
<circle>
要素で円を描き、<text>
要素でテキストを配置しています。cx
,cy
は円の中心座標、r
は半径を指定します。text-anchor="middle"
はテキストを水平方向に中央揃えにします。
Canvas を利用する方法
- デメリット
- JavaScriptの知識が必要。
- メリット
- 動的な描画が可能。
- 複雑な図形やアニメーションが作成できる。
const canvas = document.getElementById('myCanvas');
const ctx = canvas.getContext('2d');
ctx.beginPath();
ctx.arc(100, 100, 100, 0, Math.PI * 2);
ctx.fillStyle = '#f0f0f0';
ctx.fill();
ctx.font = '24px sans-serif';
ctx.textAlign = 'center';
ctx.textBaseline = 'middle';
ctx.fillText('テキスト', 100, 100);
- 解説
canvas
要素に2Dレンダリングコンテキストを取得し、円とテキストを描画しています。arc
メソッドで円弧を描画し、fillText
メソッドでテキストを描画します。
CSS Shapes (より複雑な形状の場合)
- デメリット
- ブラウザのサポート状況に注意が必要。
- 複雑な形状の場合、CSSが複雑になる可能性がある。
- メリット
- CSSで形状を定義できる。
- レスポンシブデザインに適している。
.circle {
width: 200px;
height: 200px;
background-color: #f0f0f0;
-webkit-shape-outside: circle(50%);
shape-outside: circle(50%);
}
- 解説
shape-outside
プロパティで要素の形状を定義します。circle()
関数で円形を指定しています。
CSS Grid を利用する方法 (複数テキストを円状に配置する場合)
- デメリット
.circle-container {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(50px, 1fr));
grid-auto-rows: minmax(50px, 1fr);
grid-template-areas:
"one two three"
"four five six";
}
- 解説
grid
コンテナを作成し、子要素を円状に配置します。grid-template-areas
プロパティで各要素の位置を指定します。
選択する際のポイント
- 複数のテキストを円状に配置
CSS Gridが適している。 - CSSで形状を定義したい
CSS Shapesが適している。 - 動的な描画やアニメーション
Canvasが適している。 - 高精度な円形や複雑な形状
SVGが適している。 - シンプルな円形テキスト
CSSのborder-radius
が最も簡単。
どの方法を選ぶかは、プロジェクトの要件やデザイナーの好みによって異なります。それぞれのメリットデメリットを考慮して、最適な方法を選択してください。
- ブラウザの互換性を確認し、必要に応じてポリフィルを使用してください。
- 上記以外にも、CSS ModulesやJavaScriptライブラリを利用する方法もあります。
css css-shapes