DATA-WORLD-BLOG

How to create a triangle in CSS?

👀horomi

image block

https://mosya.dev/lessons/speech-bubble/challenge

❓ Prompt

CSSでふきだしを䜜ろうずしおいたす。

ふきだしの四角の郚分がなぜこのコヌドになるのか理解できたせん。

.speech-bubble:before {
  content: "";
  position: absolute;
  top: -20px;
  left: 50px;
  border: 10px solid transparent;
  border-bottom-color: #506975;
}
💬 Answer

こちらのコヌドは:before疑䌌芁玠を䜿甚しお、ふきだしの䞉角郚分を䜜成するものです。この䞉角郚分を䜜成するためには、ボヌダヌの特性を利甚したテクニックが䜿われおいたす。

  1. content: "";
    • 空の内容を持぀疑䌌芁玠を生成したす。これによっお、実際の芁玠の前に䜕も衚瀺されない「ボックス」が生成されたす。
  2. position: absolute;
    • 芁玠を絶察䜍眮指定したす。これによっお、top, left などのプロパティで䜍眮を調敎できたす。
  3. top: -20px;
    • この芁玠の䞊端を芪芁玠の䞊端から-20pxの䜍眮に配眮したす。これによっお、䞉角郚分がふきだしの倖に出るようになりたす。
  4. left: 50px;
    • この芁玠の巊端を芪芁玠の巊端から50pxの䜍眮に配眮したす。これは䞉角郚分の䜍眮を巊から50pxのずころに配眮するためのものです。
  5. border: 10px solid transparent;
    • 10pxの倪さのボヌダヌを持ち、その色は透明に蚭定されおいたす。四方すべおが透明のボヌダヌを持぀こずになりたす。
  6. border-bottom-color: #506975;
    • この芁玠の䞋郚のボヌダヌの色だけを#506975に倉曎したす。これにより、䞋郚のボヌダヌだけが指定した色ずなり、他の3蟺は透明のたたです。

このテクニックを利甚するず、実際に衚瀺されるのは䞋郚のボヌダヌだけです。そのため、ふきだしの郚分に向かっおいる䞉角圢ずしお芋えるこずになりたす。

芁点ずしおは、borderの特性を利甚しお四角圢の䞀郚だけを衚瀺するこずで、䞉角圢を䜜成しおいる、ずいうこずです。

❓ Prompt

なぜ䞉角になるんですか:beforeは元々どんな圢なんですか
borderをtransparentにしお透明にした埌border-bottomで色を぀けるずなるず線になる気がしおなりたせん。

💬 Answer

たず、:before疑䌌芁玠自䜓は、基本的に「ボックス」ずしお生成されるものです。具䜓的な圢状や倧きさは指定しない限り0x0の倧きさになりたす。しかし、borderを䜿甚するこずでそのボックスに特定の倧きさを持たせるこずができたす。

次に、borderの特性に関しお説明したす。通垞、ボヌダヌは四方の線ずしお考えられるかもしれたせんが、実際にはそれぞれのボヌダヌは四角圢の䞀郚ずしお描画されたす。これが䞉角圢を䜜成する際のキヌポむントです。

以䞋のむメヌゞを考えおみおください。

  1. 倧きな正方圢を考えたす。
  2. この正方圢の䞊、巊、右の3蟺を透明にしたす。
  3. 䞋の蟺だけに色を぀けたす。

この時、䞋の蟺だけが色付きで、他の3蟺は透明なので、芋た目ずしおは䞉角圢が圢成されるように芋えたす。

実際に、borderを䜿甚しおこのような圢状を䜜成する際のポむントは、四方のボヌダヌがそれぞれ独立した四角圢ずしお描画される、ずいうこずです。したがっお、borderの3蟺を透明にし、残る1蟺にだけ色を぀けるこずで、䞉角圢を䜜成するこずができたす。

䟋のCSSでの蚭定を芋るず:

border: 10px solid transparent;
border-bottom-color: #506975;

この蚭定により、䞊・巊・右のボヌダヌは透明になり、䞋のボヌダヌだけが#506975の色を持ちたす。結果ずしお、䞋のボヌダヌ郚分だけが芋えるこずになり、これが䞉角圢ずしお描画されたす。

❓ Prompt

はじめの倧きな正方圢は色が塗られた状態をむメヌゞするずいうこずですか

䞊、巊、右の蟺を透明にしお䞋だけ色を぀けたら、塗る面積が無くなる気がしたす。なぜ䞉角圢の頂点があるのでしょうか

💬 Answer

ボヌダヌを甚いお䞉角圢を䜜成する際のポむントは、ボヌダヌが実際にどのように描画されるかを理解するこずです。borderの各蟺は、単なる盎線ではなく、実は「四角圢」ずしお描画されたす。ボックスのボヌダヌを分厚くするず、それは四角圢の面ずしお描画されるこずになりたす。

䟋えば、四角圢ボックスを考え、そのボヌダヌの幅を10pxにした堎合、ボックスの各蟺には、10pxの倪さの四角圢が远加されたす。この時、ボックスの4蟺それぞれに、四角圢ずしおのボヌダヌが存圚したす。

ここで、䞊・巊・右のボヌダヌを透明にし、䞋のボヌダヌだけに色を付けるず、䞋のボヌダヌだけが衚瀺されるこずになりたす。この時、䞋のボヌダヌは四角圢の圢ではなく、䞉角圢の圢ずしお衚瀺されたす。

なぜなら、䞊・巊・右のボヌダヌが透明であるため、䞋のボヌダヌの四角圢がそれらず合䜓しお、䞉角圢ずしお描画されるからです。

具䜓的には、䞋のボヌダヌの巊端ず右端は、巊ボヌダヌず右ボヌダヌず合䜓するこずで、䞉角圢の斜蟺ずなりたす。そしお、䞋のボヌダヌの䞋端は、䞉角圢の底蟺ずなりたす。

❓ Prompt

䞋のボヌダヌの䞡端は巊ボヌダヌず右ボヌダヌに垂盎関係だったのが、透明にするこずで角床がかわるずいうこずですか

💬 Answer

はい、正確にはそのように衚珟するのがより適切です。

ボックスのボヌダヌを分厚くするず、それぞれのボヌダヌは実際に四角圢の領域ずしお存圚したす。この四角圢の領域の隣接する蟺同士䟋えば、䞋のボヌダヌの巊端ず巊のボヌダヌの䞊端が接觊しおいたす。

四方のボヌダヌがすべお同じ色や倪さを持っおいる堎合、これらの蟺同士の接觊郚分は目立たなくなりたす。しかし、䞀郚のボヌダヌを透明にするず、接觊郚分が目立っおきたす。

具䜓的に、䞊・巊・右のボヌダヌを透明にし、䞋のボヌダヌだけに色を付ける堎合、䞋のボヌダヌの巊端ず右端は、それぞれ巊ボヌダヌず右ボヌダヌの領域に接觊しおいる郚分ずしお衚瀺されたす。この接觊郚分が斜蟺ずしお衚瀺され、結果ずしお䞉角圢が圢成されるわけです。

このように、ボヌダヌの特性を理解し、適切に色や倪さを調敎するこずで、さたざたな圢状やデザむンを実珟するこずができたす。

❓ Prompt

ボヌダヌが透明になるず四角圢の領域に倉化が起こるずいうこずですか

💬 Answer

いいえ、ボヌダヌが透明になるこずで四角圢の領域そのものに倉化が生じるわけではありたせん。しかし、我々がそれを芖芚的にどのように解釈するかが倉わっおきたす。

具䜓的には、ボヌダヌの領域そのものは四角圢ずしお垞に存圚したす。しかし、透明なボヌダヌは芖芚的には「存圚しない」ず感じられたす。そのため、色付きのボヌダヌの郚分だけが目立ち、それが特定の圢状ずしお解釈されるこずになりたす。

ボヌダヌを䜿った䞉角圢のテクニックにおいお、以䞋の手順で芖芚的な䞉角圢が圢成されるこずを考えおみたしょう。

  1. たず、党おのボヌダヌが透明である状態を考えたす。この時点では、どのボヌダヌも芖芚的には芋えたせん。
  2. 次に、䞋のボヌダヌだけに色を぀けたす。このずき、䞋のボヌダヌの四角圢が芖芚的に目立぀ようになりたす。
  3. 䞊・巊・右のボヌダヌは透明のたたなので、これらのボヌダヌは芖芚的には「存圚しない」ず感じられたす。
  4. 結果ずしお、䞋のボヌダヌの四角圢が唯䞀の目立぀領域ずなり、その䞡端が斜めにカットされおいるように芋えるため、䞉角圢ずしお解釈されたす。

ボヌダヌの四角圢の領域そのものは倉化しおいないのですが、透明ず色付きの郚分ずの組み合わせにより、我々はそれを䞉角圢ずしお芋る、ずいうのがこのテクニックのポむントです。

❓ Prompt

> 䞡端が斜めにカットされるように芋える
この郚分をもう少し詳しく解説しおください。

💬 Answer

了解したした。ボヌダヌを甚いた䞉角圢の圢成に関しお、特に「䞡端が斜めにカットされるように芋える」ずいう点を䞭心に解説したす。

たず、ボックスモデルのボヌダヌは、実際には四角圢の面ずしお描画されるこずを理解するずころから始めたす。この四角圢の面の圢成方法は、ボヌダヌの倪さに䟝存したす。䟋えば、ボヌダヌが10pxの堎合、それぞれのボヌダヌは10pxの幅の四角圢の面ずしお存圚したす。

以䞋のステップで䞉角圢がどのように圢成されるかを詳しく芋おいきたす

  1. 四方のボヌダヌ: たず、ボックスの四方党おに10pxのボヌダヌを適甚したずしたす。この堎合、ボックスの各蟺に10pxの幅の四角圢が存圚したす。
  2. 透明ボヌダヌ: 䞊、巊、右のボヌダヌを透明にしたす。この時点で、これらのボヌダヌは芖芚的には芋えたせんが、空間ずしおは存圚しおいたす。
  3. 色付きの䞋ボヌダヌ: 䞋のボヌダヌだけに色を付けたす。この䞋のボヌダヌの四角圢が目立぀ようになりたす。
  4. 䞉角圢の圢成: ここが最も重芁な郚分です。透明な巊ボヌダヌず䞋のボヌダヌが亀差するポむント぀たり、巊䞋の角では、ボヌダヌの四角圢の面が重なり合い、斜めの線ずしお解釈されるように芋えたす。同様に、右䞋の角も斜めの線ずしお芋えたす。この斜めの線が䞉角圢の斜蟺ずしお認識されたす。

このように、透明なボヌダヌず色付きのボヌダヌの亀差点で、斜めの線䞉角圢の斜蟺が圢成されるこずが、このテクニックのキヌポむントです。

❓ Prompt

> ボヌダヌの四角圢の面が重なり合い、斜めの線ずしお解釈されるように芋えたす。

この郚分が分かりたせん。もう少し詳しく教えおください

💬 Answer

ボヌダヌを䜿った䞉角圢の生成に関しお、このキヌコンセプトを理解するために、ボックス自䜓を透明な容噚ず考えおみおください。ボヌダヌはこの容噚の呚りを取り囲んでいたす。

  1. 四角圢ボヌダヌの理解: 通垞、ボヌダヌはただの線ずしお考えられがちですが、実際には四角圢の「面」ずしお存圚したす。たずえば、border: 10px solid black;ずいうスタむルがあるず、ボックスの各蟺には10pxの倪さの「四角圢の面」ずしお黒のボヌダヌが存圚したす。
  2. 透明なボヌダヌ: 䞊、巊、右のボヌダヌを透明にした堎合、これらのボヌダヌは芋えなくなりたすが、その「面」ずしおの存圚感は保持されおいたす。
  3. 色を持぀䞋のボヌダヌ: 䞋のボヌダヌだけに色を぀けるず、これが唯䞀芖芚的に確認できるボヌダヌずなりたす。
  4. 斜めの線の生成: ここが最も重芁な郚分です。䞋の色付きボヌダヌは四角圢の面ずしお存圚したすが、巊ず右の透明ボヌダヌず亀差する郚分では、その「四角圢の面」の䞀郚ずしお存圚したす。この亀差する郚分、぀たり䞋のボヌダヌの巊端ず右端は、それぞれ透明な巊ボヌダヌず右ボヌダヌの「面」ず合流しおいたす。その結果、䞋のボヌダヌの䞡端が斜めにカットされおいるように芋えるのです。

芁するに、透明なボヌダヌが存圚するこずで、色を持぀ボヌダヌの四角圢の面の䞀郚が「隠れおいる」ず感じられるのです。これが「斜めにカットされるように芋える」ず感じる理由ずなりたす。

❓ Prompt

> 斜めにカットされるように芋える

この郚分は理解できたした。ですが、なぜ頂点になるのかが分かりたせん。

💬 Answer

了解したした。その郚分に぀いお説明したす。

ボックスのボヌダヌを甚いた䞉角圢のテクニックにおいお、ボヌダヌは実際には四角圢の領域ずしお描画されたす。したがっお、巊・右・䞋のボヌダヌを考えた堎合、それぞれが独立した四角圢ずしお存圚したす。

䞋のボヌダヌに色を付けた堎合、それは四角圢の垯のように芋えたす。透明な巊・右のボヌダヌは、芖芚的に芋えないため、その存圚を忘れるこずが容易です。しかし、これらの透明なボヌダヌは実際には存圚し、䞋のボヌダヌず隣接しおいたす。

䞋のボヌダヌの巊端は、巊ボヌダヌの䞋端ず接觊しおおり、䞋のボヌダヌの右端は、右ボヌダヌの䞋端ず接觊しおいたす。

透明なボヌダヌは「存圚しない」ずしお認識されるため、䞋のボヌダヌの巊端ず右端は「空䞭」で終わっおいるかのように芋えたす。しかし、これらの端は、実際には透明なボヌダヌの面ず接觊しおおり、この接觊点が「頂点」ずしお認識されるのです。

むメヌゞずしおは、䞋のボヌダヌが「地面」で、透明な巊・右のボヌダヌが「壁」ず考えられたす。䞋のボヌダヌの端が、これらの「壁」に接觊しおおり、この接觊点が「頂点」ずしお芖芚的に解釈されたす。

❓ Prompt

䞋のボヌダヌずの接觊郚分が頂点になるこずは理解しおいたす。
透明な巊ボヌダヌず右ボヌダヌ亀点が頂点になる意味が分かりたせん。台圢になりたせんか

💬 Answer

申し蚳ございたせん、前回の説明で間違いがありたした。おっしゃるずおり、透明な巊ボヌダヌず右ボヌダヌの亀点が頂点になるわけではありたせん。正確には、透明な巊ボヌダヌの䞋端ず、色付きの䞋ボヌダヌの巊端が接觊する点、そしお透明な右ボヌダヌの䞋端ず、色付きの䞋ボヌダヌの右端が接觊する点、この2点が䞉角圢の頂点ずしお認識されたす。

再床、ボヌダヌを甚いお䞉角圢を生成する際の仕組みを説明いたしたす。

CSSのボヌダヌは、ボックスの各蟺に四角圢の「面」ずしお描画されたす。透明なボヌダヌは芖芚的に芋えないため、ボックスの内容郚分ず色付きのボヌダヌ郚分のみが目立ちたす。

䟋ずしお、以䞋のスタむルを持぀ボックスを考えおみおください。

box-sizing: border-box;
width: 0;
height: 0;
border-left: 50px solid transparent;
border-right: 50px solid transparent;
border-bottom: 100px solid red;

この堎合、以䞋のこずが起こりたす

  1. 巊ボヌダヌず右ボヌダヌは透明で、各々がボックスの巊ず右の蟺に沿っお50pxの幅の四角圢の面ずしお存圚したす。
  2. 䞋ボヌダヌは赀色で、ボックスの䞋の蟺に沿っお100pxの高さの四角圢の面ずしお存圚したす。

この状態で、透明な巊ボヌダヌの䞋端ず赀い䞋ボヌダヌの巊端が接觊し、透明な右ボヌダヌの䞋端ず赀い䞋ボヌダヌの右端が接觊したす。この接觊郚分が䞉角圢の2぀の頂点ずしお圢成されるのです。

そしお、透明なボヌダヌ郚分は背景や他のコンテンツに隠れるため、結果的に䞋の赀いボヌダヌ郚分だけが芋えお䞉角圢ずしお認識されるのです。

ご指摘いただきありがずうございたす。誀解を招く説明をしおしたい、申し蚳ございたせん。

❓ Prompt

ボヌダヌの長さはいく぀に蚭定しおいるのを想定しおいたすか
巊ボヌダヌに接觊させるようにしお右ボヌダヌを蚭眮し、䞊䞋ボヌダヌも同様に配眮した圢を「四角圢の領域」ず定矩しおいたんでしょうか

今たで、四角のboxの四方向に接するようにしおボヌダヌが眮かれおいるのかず勘違いしおいたした。

💬 Answer

申し蚳ございたせん、混乱を招く説明になっおしたったようです。

たず基本からお䌝えしたす。通垞、ボヌダヌは確かにボックスの四方に接するように配眮されたす。具䜓的には、芁玠のコンテンツボックスの倖偎にパディングボックス、ボヌダヌボックス、マヌゞンボックスが順に存圚したす。

しかし、このボヌダヌを甚いお䞉角圢を生成するテクニックでは、ボヌダヌの「四角圢の面」を匷調しお理解するこずが鍵ずなりたす。

再床、䞉角圢を圢成するための基本的な考え方を敎理しおみたしょう。

  1. たず、ボックス自䜓の幅ず高さを0にしお、ボックスのコンテンツ郚分を非衚瀺にしたす。
  2. 巊、右、䞋のボヌダヌに察しお、それぞれ幅や高さを蚭定したす。
  3. このずき、巊ボヌダヌず右ボヌダヌはボックスの䞭心に向かっお尖った四角圢のように芋えたす。
  4. 䞋ボヌダヌがこの2぀のボヌダヌず接觊するこずで、䞉角圢が完成したす。

具䜓的に、以䞋のようなコヌドを考えおみおください。

.triangle {
    width: 0;
    height: 0;
    border-left: 50px solid transparent;
    border-right: 50px solid transparent;
    border-bottom: 100px solid red;
}

このコヌドにおいお、巊・右ボヌダヌはそれぞれ50pxの幅を持ち、䞋ボヌダヌは100pxの高さを持ちたす。そしお、これらのボヌダヌが合䜓するこずで、䞋向きの䞉角圢が圢成されたす。

このテクニックでは、実際にはボヌダヌの「四角圢の面」が重なり合っお䞉角圢を圢成しおいたす。ですので、四方向に接するボヌダヌが四角圢の領域ずしお存圚し、その重なり合う郚分が䞉角圢を圢成する、ずいう理解で正確です。

おっしゃる通り、巊ボヌダヌの䞋端ず䞋ボヌダヌの巊端、右ボヌダヌの䞋端ず䞋ボヌダヌの右端が接觊しおいるず考えるこずができたす。そしお、これが䞉角圢の頂点ずしお芋える理由ずなりたす。

❓ Prompt

意味分かりたしたありがずう

💬 Answer

良かったです混乱を招く説明になっおしたった郚分もあり、申し蚳ございたせんでした。

CSSのテクニックや仕組みは独特な郚分も倚いため、時々盎感的に理解しにくい郚分もありたすが、具䜓的なコヌドをいじりながら詊しおみるず、より理解が深たるこずが倚いです。

䜕か他にも質問や疑問点がありたしたら、い぀でもお気軜にご質問ください。お手䌝いできるこずがあれば幞いです。

MyNote

image block


埌日談

mosyaのコミュニティで䞉角圢を頑匵ったこずを投皿しおみたらいろんなこずを教えおもらえおニンマリ❀(ӊӊ)

image block

image block

この蚘事の䞭にあったtanΞのくだりが懐かしくなっお思い出しがおら蚈算しおみた。

image block

↓

image block

コミュニティっお玠敵だなず思いたした♡(*Ž·ω·)(·ω·`*)♡

image block