検索
ホームページウェブフロントエンドCSSチュートリアルCSS を使用して任意のサイズ、方向、角度の矢印を実現する方法

この記事では、CSS を使用して任意のサイズ、任意の方向、任意の角度の矢印の例を実現するための関連情報を主に紹介します。編集者が非常に優れていると考えたので、参考として共有します。エディターをフォローして見てみましょう。Web 開発では、ドロップダウン矢印

や右矢印

などの矢印がよく使用されます。 これは通常、CSS を使用して実装されます:

{  
        display: inline-block;  
        margin: 72px;  
        border-top: 24px solid;
        border-right: 24px solid;  
        width: 120px;
        height: 120px;  
        transform: rotate(45deg); 
    }

これは、p の border-top と border-right を使用して、p を回転することによって実現されるためです。

任意の角度の矢印

ここで質問があります: 120 度の角度の矢印が必要な場合はどうすればよいですか? border-top と border-right は常に 90 度であるため、回転だけでは機能しません。 まず p を 45 度回転してひし形にし、それを任意の角度まで引き伸ばすことで、任意の角度の矢印を得ることができます。回転とスケーリングの 2 つの変換が使用されるため、変換行列 transform:matrix(a,b,c,d,e,f) を使用する必要があります。 ここでの 6 つの変数は 3 次元の変換行列を形成します

任意の点 p(x,y) の平行移動、回転、拡大変換、およびさまざまな組み合わせは、この変換行列を通じて実現できます:transform: matrix(a,b,c,d,e,f) 这个变换矩阵。 这里的6个变量组成了一个3介的变换矩阵

任意点p(x,y)的平移, 旋转, 伸缩变换以及他们的各种组合都可以通过这个变换矩阵做到:

注:这里用齐次坐标 来表达一个点。 简单说就是p(x, y) 表示为p'(x', y', 1)

平移矩阵

v(x, y) 沿着x轴平移tx, 沿着y轴平移ty。 则有:

x' = x + tx
y' = y + ty

所以平移矩阵:

旋转矩阵

v(x, y) 点绕原点旋转θ到v'(x', y')

则有:

x = r * cos(ϕ )
y = r * sin(ϕ )

x' = r * cos(θ + ϕ) = r * cos(θ) * cos(ϕ) - r * sin(θ) * sin(ϕ ) // 余弦公式
y' = r * sin(θ + ϕ) = r * sin(θ) * cos(ϕ) + r * cos(θ) * sin(ϕ ) // 正弦公式

所以:

x' = x * cos(θ) - y * sin(θ)
y' = x * sin(θ) + y * cos(θ)

所以旋转矩阵:

伸缩矩阵

假设x轴,y轴的伸缩率分别是kx, ky。 则有:

x' = x * kx
y' = y * ky

所以:

复合变换

如果是对p(x, y)先平移(变换矩阵A), 然后旋转(变换矩阵B), 然后伸缩(变换矩阵C)呢?

p' =C(B(Ap)) ==> p' = (CBA)p //矩阵乘法结合率

现在任意角度o的箭头就很简单了:

先把p旋转45度 成为 菱形, 变换为 M1 伸缩x轴, y轴 :

x' = size * cos(o/2) = x * √2 *  cos(o/2)
y' = size * sin(o/2) = y *  √2  * sin(o/2)

即: kx = √2 * cos(o/2); ky = √2 * sin(o/2) 这样就得到了任意角度的箭头。 变换为 M2

如果箭头的方向不是指向右侧, 在进行一次旋转就可以得到任意方向的箭头。变换为 M3

那么由于 p' =C(B(Ap)) ==> p' = (CBA)p 注: ここでは、均質な点を使用して点を表現します。コーディネート。 簡単に言うと、p(x, y) は p'(x', y', 1) で表されます

平行移動行列

v(x, y) は tx を x 軸に沿って平行移動し、ty を y 軸に沿って平行移動します。 次に、次のようになります:

x' = x + tx
y' = y + ty
したがって、変換行列:

回転行列

v(x, y)点巻き 原点をv'(x', y')にθ回転

次に:

x = r * cos(ϕ )
y = r * sin(ϕ )x' = r * cos(θ + ϕ) = r * cos( θ) * cos(ϕ) - r * sin(θ) * sin(ϕ ) // コサインの公式
y' = r * sin(θ + ϕ) = r * sin(θ) * cos (ϕ) + r * cos(θ) * sin(ϕ ) // サインの公式

つまり:

x' = x * cos(θ) - y * sin(θ)
y ' = x * sin(θ) + y * cos(θ)

したがって、回転行列は次のようになります:

伸縮行列

x 軸と y- の伸縮率は次のように仮定します。軸はそれぞれ kx と ky です。 そして、次のようになります:

x' = x * kx
y' = y * ky

つまり: それが p(x, y) の場合最初に変換 (変換行列 A)、次に回転 (変換行列 B)、次にスケーリング (変換行列 C) はどうでしょうか?p' =C(B(Ap)) ==> p' = (CBA)p; //行列の乗法結合率 これで、任意の角度 o の矢印は非常に簡単になります: まず、p を 45 度回転してひし形にし、それを M1 に変換します。 x 軸、y 軸を引き伸ばします: つまり: kx = √2 * cos(o/2); ky = √2 * sin(o/2) これにより、任意の角度の矢印が得られます。 に変形 矢印の方向が右を向いていない場合は、回転を行うことで任意の方向に矢印を得ることができます。 に変換すると、 p' =C(B(Ap)) ==> p' = (CBA)p なので、最初に M3 M1 を計算できます。 p に対応する変換を実行すると、任意の角度と方向の矢印を取得できます。 pの幅と高さは矢印の辺の長さであり、調整することで任意の辺の長さの矢印を得ることができます。 使いやすいように、この矢印は React コンポーネントとしてカプセル化されています。 例単純な矢印モック選択
複合変換
npm install rc-arrow --save
M2
M3 M2
React コンポーネント
🎜🎜発散矢印🎜🎜🎜🎜🎜🎜🎜小道具🎜 🎜🎜🎜🎜🎜名前🎜🎜タイプ🎜🎜デフォルト🎜🎜説明🎜🎜🎜🎜🎜🎜度🎜🎜数値🎜🎜90🎜🎜矢印の開き角度、角度系🎜🎜🎜🎜offsetDegree🎜🎜数値🎜🎜0🎜🎜矢印の方向、デフォルトは右🎜 🎜 🎜🎜色🎜🎜文字列🎜🎜-🎜🎜矢印の色🎜🎜🎜🎜サイズ🎜🎜文字列🎜🎜10px🎜🎜矢印の辺の長さ🎜🎜🎜🎜

安装使用

npm install rc-arrow --save

import Arrow from 'rc-arrow'

class Hw extends Component {
    render() {
        return (
            <Arrow size="20px" color="red"/>
        )
    }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

CSS3实现预载动画效果的几种方法

关于css如何控制背景的分享

以上がCSS を使用して任意のサイズ、方向、角度の矢印を実現する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
CSSグリッドとは何ですか?CSSグリッドとは何ですか?Apr 30, 2025 pm 03:21 PM

CSSグリッドは、複雑で応答性の高いWebレイアウトを作成するための強力なツールです。設計を簡素化し、アクセシビリティを向上させ、古い方法よりも多くの制御を提供します。

CSS Flexboxとは何ですか?CSS Flexboxとは何ですか?Apr 30, 2025 pm 03:20 PM

記事では、レスポンシブデザインにおけるスペースの効率的なアラインメントと分布のためのレイアウト方法であるCSS FlexBoxについて説明します。 FlexBoxの使用量を説明し、CSSグリッドと比較し、ブラウザのサポートを詳細に説明します。

CSSを使用してWebサイトを応答するにはどうすればよいですか?CSSを使用してWebサイトを応答するにはどうすればよいですか?Apr 30, 2025 pm 03:19 PM

この記事では、ビューポートメタタグ、柔軟なグリッド、流体メディア、メディアクエリ、相対ユニットなど、CSSを使用してレスポンシブWebサイトを作成するための手法について説明します。また、CSSグリッドとフレックスボックスを使用してカバーし、CSSフレームワークを推奨しています

CSSボックスサイズのプロパティは何をしますか?CSSボックスサイズのプロパティは何をしますか?Apr 30, 2025 pm 03:18 PM

この記事では、要素の寸法の計算方法を制御するCSSボックスサイズのプロパティについて説明します。コンテンツボックス、ボーダーボックス、パディングボックスなどの値と、レイアウト設計とフォームアライメントへの影響について説明します。

CSSを使用してアニメーション化するにはどうすればよいですか?CSSを使用してアニメーション化するにはどうすればよいですか?Apr 30, 2025 pm 03:17 PM

記事では、CSS、キープロパティ、およびJavaScriptとの組み合わせを使用してアニメーションの作成について説明します。主な問題は、ブラウザの互換性です。

CSSを使用してプロジェクトに3D変換を追加できますか?CSSを使用してプロジェクトに3D変換を追加できますか?Apr 30, 2025 pm 03:16 PM

記事では、3D変換、主要なプロパティ、ブラウザの互換性、およびWebプロジェクトのパフォーマンスに関する考慮事項にCSSを使用して説明します。

CSSに勾配を追加するにはどうすればよいですか?CSSに勾配を追加するにはどうすればよいですか?Apr 30, 2025 pm 03:15 PM

この記事では、CSSグラデーション(線形、放射状、繰り返し)を使用して、ウェブサイトのビジュアルを強化し、深さ、フォーカス、および現代の美学を追加します。

CSSの擬似要素とは何ですか?CSSの擬似要素とは何ですか?Apr 30, 2025 pm 03:14 PM

記事では、CSSの擬似要素、HTMLスタイリングの強化における使用、および擬似クラスとの違いについて説明します。実用的な例を提供します。

See all articles

ホット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衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

SublimeText3 中国語版

SublimeText3 中国語版

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

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。