目次
ソリューション
ホームページ ウェブフロントエンド htmlチュートリアル CSS Secret Garden: リング Text_html/css_WEB-ITnose

CSS Secret Garden: リング Text_html/css_WEB-ITnose

Jun 24, 2016 am 11:22 AM

『CSS Secrets』は、@Lea Verou による最新の本で、CSS に関する小さな秘密を説明しています。これは CSSers にとって読む価値のある本です。一定期間読んだ後、私、@全域と @彦子は、関連する読書感想文を W3cplus で公開し、皆さんと共有します。

これは一般的なテキスト効果ではありませんが、場合によっては、円形のパスをたどる必要がある短いテキストがいくつかあります。現時点では、CSS は私たちを放棄します。この効果を実現できる CSS プロパティや関数はなく、私たちが考えた CSS ソリューションは面倒なものだけだったので、ただ考えただけでした。本当にそのようなスタイルを実現する方法はないのでしょうか?画像を使用する以外に、テキスト全体の美しさに影響を与えないこと以外に?

juliancheal.co.uk の左側のボタンにリング テキストを使用します (どこを指しているかわかりますか?)。ボタンの破損を避ける唯一の方法はリング テキストです。ボタンの形状は穴でできています

ソリューション

スレッドで構成されています この効果を達成できるスクリプトがいくつかあります。各文字を個別の 要素で囲み、適切な角度に回転させることで、1 つずつ円を構成します。この解決策は非常に面倒なだけでなく、ページの DOM 要素に多くの不必要な肥大化したマークアップを追加します。

現時点では純粋な CSS でこの効果を実現する方法はありませんが、小さなインライン SVG を使用すると非常に簡単に実現できます。 SVG 自体は任意のパスでのテキスト表示をサポートしており、ループはパスの特殊なケースにすぎません。やるだけやってみよう!

SVG でテキストをパスで表示するための基本的な解決策は、テキストを 要素で囲み、それを 要素内に置くことです。 要素は、パス内で id によって定義された 要素を参照します。インライン SVG 内のテキストもフォント スタイルを継承するため (SVG のデフォルト スタイルである line-height を除く)、外部 SVG 画像を導入する場合のようにこれについて心配する必要はありません。

残念ながら、 要素内にのみ存在できるため、より読みやすい 要素をパス サークルとして使用できません。

図に示すように、「循環推論は機能するため」という文を、円の全周を占める円形のテキストにしたいとします。

HTML にインライン SVG を追加し、循環パスを定義する必要があります:

<div class="circular">    <svg viewBox="0 0 100 100">        <path d="M 0,50 a 50,50 0 1,1 0,1 z" id="circle" />    </svg></div>
ログイン後にコピー

幅と高さではなく、viewBox を通じて単位を定義することに注意してください。これにより、固定サイズではなく、座標系とアスペクト比を設定できるようになります。これにより、コンパクトになるだけでなく、 要素に 100% の幅と高さの値を適用する必要がなくなり、CSS の数行も節約されます。コンテナの値に合わせて自動的に調整されます。サイズ。

path の構文がわからなくても、心配する必要はありません。 SVG パス構文をすでに理解している人でも、構文を忘れてしまうのは誰でも同じです。興味があれば、次の 3 つのコマンドに構文のほとんどが要約されています:

  • M 0,50 : ポイント (0,50) に移動
  • a 50,50 0 1,1 0,1 : From その位置現在の点から新しい点まで円弧を描きます。新しい点の位置は原点から右に 0、下に 1 です。円弧の半径は水平方向と垂直方向の両方で 50 です。 2 つの可能な角度に加えて、2 つの可能な円弧のうち最大のものを選択し、2 つの点の左側ではなく右側の円弧を選択します。
  • z : 直線セグメントでパスを閉じます。

なぜ SVG パスの構文は非常にわかりにくいのでしょうか?当初の設計時には、SVG を手動で記述する人は誰もいないと考えられていたため、SVG ワーキング グループはファイル サイズを削減するために可能な限りコンパクトな構文を使用しました。

現在、私たちの道はただの黒い円です。

次のように、 要素と 要素を通じてテキストを追加し、それを xlink:href 属性を通じてサークルにリンクする必要があります。より見栄えよく読みやすくするためにはやるべきことがたくさんありましたが、CSS では何年も実現できなかったであろう、私たちが望んでいたものを達成しました。

次のステップは、円形のパスから黒い塗りつぶしを削除することです。円を何らかの方法で表示する必要はなく、テキストのガイドとして機能するだけです。これを行うには、 (このために特別に設計されています) に追加するなど、さまざまな方法があります。ただし、ここでは SVG タグをできるだけ少なくしたいので、CSS 経由で直接 fill: none を適用します。

れー

黒い丸が消えました

我们可以仔细研究其它问题了。下一步最大的问题是,我们大多数的文本是在SVG元素之外的,还被裁剪了。为了解决这个问题,我们需要让我们的容器元素更小一些,然后为SVG元素应用 overflow: visible ,这样它就不会裁剪它的视窗之外的任何内容了:

.circular {    width: 30em;    height: 30em;}.circular svg {    display: block;    overflow: visible;}
ログイン後にコピー

你可以在上图中看到效果。注意到我们已经差不多完成了,但是有一些文本还是被裁剪了。原因是SVG元素是根据它的尺寸浮动的,而不是溢出。因此,事实上,溢出盒子边界的 元素不会让整个SVG元素往下浮动。我们需要手动添加一个外边距来完成:

.circular {    width: 30em;    height: 30em;    margin: 3em auto 0;}.circular svg {    display: block;    overflow: visible;}
ログイン後にコピー

就是它了!我们的示例现在看起来和下图非常相像

文本也是可访问的。如果我们的圆形文本只有一个实例(如,一个网站的logo),那我们到这里就完成了。但是,如果我们关于这种类型的文本有不止一个实例,我们不希望每次都重复这些SVG标签,可以写一个简短的脚本来自动生成所需的SVG元素,如类似这样的标签:

<div class="circular">    circular reasoning works because</div>
ログイン後にコピー

该代码可以通过一个“circular”类遍历所有元素,移除它们的文本并把它存储在一个变量中,并添加必要的SVG元素:

$$('.circular').forEach(function(el) {    var NS = "http://www.w3.org/2000/svg";    var xlinkNS = "http://www.w3.org/1999/xlink";    var svg = document.createElementNS(NS, "svg");    var circle = document.createElementNS(NS, "path");    var text = document.createElementNS(NS, "text");    var textPath = document.createElementNS(NS, "textPath");    svg.setAttribute("viewBox", "0 0 100 100");    circle.setAttribute("d", "M0,50 a50,50 0 1,1 0,1z");    circle.setAttribute("id", "circle");    textPath.textContent = el.textContent;    textPath.setAttributeNS(xlinkNS, "xlink:href", "#circle");    text.appendChild(textPath);    svg.appendChild(circle);    svg.appendChild(text);    el.textContent = '';    el.appendChild(svg);});
ログイン後にコピー
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

&lt; Progress&gt;の目的は何ですか 要素? &lt; Progress&gt;の目的は何ですか 要素? Mar 21, 2025 pm 12:34 PM

この記事では、HTML&lt; Progress&gt;について説明します。要素、その目的、スタイリング、および&lt; meter&gt;との違い要素。主な焦点は、&lt; Progress&gt;を使用することです。タスクの完了と&lt; Meter&gt; statiの場合

&lt; datalist&gt;の目的は何ですか 要素? &lt; datalist&gt;の目的は何ですか 要素? Mar 21, 2025 pm 12:33 PM

この記事では、HTML&lt; Datalist&GT;について説明します。オートコンプリートの提案を提供し、ユーザーエクスペリエンスの改善、エラーの削減によりフォームを強化する要素。

&lt; meter&gt;の目的は何ですか 要素? &lt; meter&gt;の目的は何ですか 要素? Mar 21, 2025 pm 12:35 PM

この記事では、html&lt; meter&gt;について説明します。要素は、範囲内でスカラーまたは分数値を表示するために使用され、Web開発におけるその一般的なアプリケーション。それは差別化&lt; Meter&gt; &lt; Progress&gt;およびex

ビューポートメタタグとは何ですか?レスポンシブデザインにとってなぜそれが重要なのですか? ビューポートメタタグとは何ですか?レスポンシブデザインにとってなぜそれが重要なのですか? Mar 20, 2025 pm 05:56 PM

この記事では、モバイルデバイスのレスポンシブWebデザインに不可欠なViewportメタタグについて説明します。適切な使用により、最適なコンテンツのスケーリングとユーザーの相互作用が保証され、誤用が設計とアクセシビリティの問題につながる可能性があることを説明しています。

&lt; iframe&gt;の目的は何ですか タグ?使用する際のセキュリティ上の考慮事項は何ですか? &lt; iframe&gt;の目的は何ですか タグ?使用する際のセキュリティ上の考慮事項は何ですか? Mar 20, 2025 pm 06:05 PM

この記事では、&lt; iframe&gt;外部コンテンツをWebページ、その一般的な用途、セキュリティリスク、およびオブジェクトタグやAPIなどの代替案に埋め込む際のタグの目的。

HTMLは初心者のために簡単に学ぶことができますか? HTMLは初心者のために簡単に学ぶことができますか? Apr 07, 2025 am 12:11 AM

HTMLは、簡単に学習しやすく、結果をすばやく見ることができるため、初心者に適しています。 1)HTMLの学習曲線はスムーズで簡単に開始できます。 2)基本タグをマスターして、Webページの作成を開始します。 3)柔軟性が高く、CSSおよびJavaScriptと組み合わせて使用​​できます。 4)豊富な学習リソースと最新のツールは、学習プロセスをサポートしています。

HTML、CSS、およびJavaScriptの役割:コアの責任 HTML、CSS、およびJavaScriptの役割:コアの責任 Apr 08, 2025 pm 07:05 PM

HTMLはWeb構造を定義し、CSSはスタイルとレイアウトを担当し、JavaScriptは動的な相互作用を提供します。 3人はWeb開発で職務を遂行し、共同でカラフルなWebサイトを構築します。

HTMLでの開始タグの例は何ですか? HTMLでの開始タグの例は何ですか? Apr 06, 2025 am 12:04 AM

Anexampleapalofastartingtaginhtmlis、それはaperginsaparagraph.startingtagsaresentionentientiontheyinitiateelements、definetheirtypes、およびarecrucialforurturingwebpagesandcontingthomedomを構築します。

See all articles