CSSのlinear-gradientプロパティで三角形を作る

2024-04-02

CSSで三角形を作る仕組み

  1. border プロパティを使う
  2. clip-path プロパティを使う

border プロパティを使って三角形を作るには、以下の3つのステップが必要です。

  1. 対象となる要素に border プロパティを設定します。
  2. border-style プロパティを solid に設定します。
  3. border-width プロパティで、三角形の辺の太さを設定します。

例:border プロパティを使って正三角形を作る

.triangle {
  width: 100px;
  height: 100px;
  border: 10px solid black;
  border-top-color: transparent;
  border-left-color: transparent;
}

このコードでは、.triangle クラスの要素に border プロパティを設定しています。

  • width プロパティと height プロパティで、三角形のサイズを指定しています。
  • border-top-color プロパティと border-left-color プロパティを transparent に設定することで、上辺と左辺の枠線を透明にします。

この結果、以下の図のような正三角形が作成されます。

  • 二等辺三角形
.triangle {
  width: 100px;
  height: 50px;
  border: 10px solid black;
  border-bottom-color: transparent;
}
  • 直角三角形
.triangle {
  width: 100px;
  height: 100px;
  border: 10px solid black;
  border-top-right-radius: 50px;
  border-bottom-left-radius: 50px;
}
  1. clip-path プロパティの値として、三角形の形状を指定します。
.triangle {
  width: 100px;
  height: 100px;
  clip-path: polygon(50% 0%, 0% 100%, 100% 100%);
}
  • polygon() 関数の引数は、三角形の頂点の座標をカンマ区切りで指定します。
  • この例では、頂点を (50%, 0%)(0%, 100%)(100%, 100%) としているので、正三角形になります。
.triangle {
  width: 100px;
  height: 50px;
  clip-path: polygon(50% 0%, 0% 100%, 100% 100%);
}
.triangle {
  width: 100px;
  height: 100px;
  clip-path: polygon(0% 0%, 50% 100%, 100% 0%);
}

CSSで三角形を作るには、border プロパティと clip-path プロパティの2つの方法があります。

  • clip-path



border プロパティを使ったサンプルコード

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>CSSで三角形を作る</title>
</head>
<body>
  <h1>`border` プロパティを使った三角形</h1>
  <div class="triangle"></div>
  <div class="triangle equilateral"></div>
  <div class="triangle isosceles"></div>
  <div class="triangle right-angled"></div>
  <style>
    .triangle {
      width: 100px;
      height: 100px;
      border: 10px solid black;
    }
    .triangle.equilateral {
      border-top-color: transparent;
      border-left-color: transparent;
    }
    .triangle.isosceles {
      border-bottom-color: transparent;
    }
    .triangle.right-angled {
      border-top-right-radius: 50px;
      border-bottom-left-radius: 50px;
    }
  </style>
</body>
</html>

clip-path プロパティを使ったサンプルコード

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>CSSで三角形を作る</title>
</head>
<body>
  <h1>`clip-path` プロパティを使った三角形</h1>
  <div class="triangle"></div>
  <div class="triangle equilateral"></div>
  <div class="triangle isosceles"></div>
  <div class="triangle right-angled"></div>
  <style>
    .triangle {
      width: 100px;
      height: 100px;
      clip-path: polygon(50% 0%, 0% 100%, 100% 100%);
    }
    .triangle.equilateral {
      clip-path: polygon(50% 0%, 0% 50%, 100% 50%);
    }
    .triangle.isosceles {
      clip-path: polygon(50% 0%, 0% 100%, 100% 100%);
    }
    .triangle.right-angled {
      clip-path: polygon(0% 0%, 50% 100%, 100% 0%);
    }
  </style>
</body>
</html>

実行方法

  1. 上記のコードをHTMLファイルに保存します。
  2. ブラウザでHTMLファイルを開きます。

説明

  • border プロパティを使ったサンプルコードでは、border-width プロパティ、border-color プロパティ、border-radius プロパティなどを組み合わせることで、さまざまな形状の三角形を作成しています。
  • clip-path プロパティを使ったサンプルコードでは、polygon() 関数の引数を変えることで、さまざまな形状の三角形を作成しています。



CSSで三角形を作るその他の方法

linear-gradient プロパティを使って、三角形のグラデーションを作成し、それを背景として使用することで、三角形を作ることができます。

.triangle {
  width: 100px;
  height: 100px;
  background: linear-gradient(to bottom, transparent 50%, black 50%);
}
  • to bottom は、グラデーションの方向を上から下へ指定しています。
  • transparent 50% は、グラデーションの開始位置から50%までの間を透明に指定しています。

before 疑似要素と after 疑似要素を使って、三角形の形状をしたコンテンツを生成することができます。

.triangle {
  width: 100px;
  height: 100px;
  position: relative;
  
  &::before {
    content: "";
    position: absolute;
    top: 50%;
    left: 50%;
    width: 0;
    height: 0;
    border-left: 50px solid transparent;
    border-right: 50px solid transparent;
    border-bottom: 100px solid black;
    transform: translate(-50%, -50%);
  }
}
  • content: "" は、疑似要素内に何も表示しないことを指定しています。
  • position: absolute は、疑似要素を絶対配置にすることを指定しています。
  • top: 50%left: 50% は、疑似要素を親要素の中央に配置することを指定しています。
  • width: 0height: 0 は、疑似要素のサイズを0にすることを指定しています。
  • border-leftborder-right は、左右の枠線を透明に設定しています。
  • border-bottom は、下部の枠線を黒に設定しています。
  • transform: translate(-50%, -50%) は、疑似要素を左上方向に50%ずつ移動することを指定しています。

[図:before 疑似要素と after 疑似要素を使って作った三角形]

svg 要素を使って、三角形のパスを描画することができます。

<svg viewBox="0 0 100 100">
  <polygon points="50,0 0,100 100,100" fill="black" />
</svg>

このコードは、svg 要素の中に polygon 要素を描画しています。

  • viewBox="0 0 100 100" は、SVG要素の表示領域を100px x 100pxに設定しています。
  • points="50,0 0,100 100,100" は、三角形の頂点の座標を指定しています。
  • fill="black" は、三角形の色を黒に設定しています。

[図:svg 要素を使って作った三角形]

CSSで三角形を作る方法は、border プロパティ、clip-path プロパティ、linear-gradient プロパティ、before 疑似要素と after 疑似要素、svg 要素など、さまざまな方法があります。

それぞれの方法にはメリットとデメリットがあるので、目的に合った方法を選択する必要があります。


css geometry polygon


HTMLテーブルの列幅を固定する方法!width属性とtable-layoutプロパティ徹底解説

方法 1: width 属性width 属性を使って列幅をピクセル単位で指定できます。これは最も簡単な方法ですが、画面サイズや解像度によってレイアウトが崩れる可能性があります。方法 2: % 単位% 単位を使って列幅を指定できます。これは画面サイズに合わせて自動的に調整されるので、レスポンシブなレイアウトに適しています。...


【CSS初心者向け】ボタンのテキストを折り返して見た目も機能も向上させる方法

解決策主に以下の2つの方法で実現できます。overflow-wrap プロパティは、要素内のテキストが境界を超えた場合の折り返し方法を制御します。このプロパティには、以下の値を指定できます。normal:デフォルト値。単語の途中で改行せず、次の行へ送ります。...


CSSセレクタ:>、、:nth-child()、:not()、::deep()、JavaScript、その他

説明: 親要素の直下の子要素のみを選択します。例:この例では、.parent要素の直下にある. child要素のみスタイルが適用されます。説明: 親要素の子要素の中で、特定の位置にある要素を選択します。説明: 指定された条件に合致しない要素を選択します。...


HTML、CSS、JavaScript以外のフォーム無効化方法

HTMLでは、disabled属性をフォーム要素に追加することで無効化できます。この属性は、<input>, <select>, <textarea> などの要素で使用できます。上記のように disabled 属性を追加することで、対応するフォーム要素が無効化されます。ユーザーはこれらの要素をクリックしたり、フォーカスしたりすることができず、入力もできません。...


CSS で SVG を div 要素の中央に配置する方法

text-align: center を使用する最も簡単で基本的な方法は、親 div 要素に text-align: center プロパティを設定することです。これにより、div 内のすべてのインライン要素とブロック要素が自動的に中央揃えされます。SVG 画像はブロック要素として扱われるため、この方法で中央に配置できます。...