Ada banyak bentuk CSS berbeda di Trik CSS - Bentuk CSS dan saya sangat bingung dengan segitiga:
#triangle-up {
width: 0;
height: 0;
border-left: 50px solid transparent;
border-right: 50px solid transparent;
border-bottom: 100px solid red;
}
<div id="triangle-up"></div>
Bagaimana dan mengapa ini bekerja?
css
geometry
polygon
css-shapes
Stanislav Shabalin
sumber
sumber
Jawaban:
CSS Triangles: Tragedi dalam Lima Tindakan
Seperti yang dikatakan alex , batas dengan lebar yang sama saling berhadapan satu sama lain pada sudut 45 derajat:
Ketika Anda tidak memiliki batas atas, terlihat seperti ini:
Maka Anda memberinya lebar 0 ...
... dan ketinggian 0 ...
... dan akhirnya, Anda membuat dua sisi perbatasan transparan:
Itu menghasilkan segitiga.
sumber
:before
atau:after
kelas pseudo.left-border
danright-border
, sama kaki dapat dibuat. Dan ketika banyak segitiga digabungkan ... jsfiddle.net/zRNgzPerbatasan menggunakan tepi miring di mana mereka berpotongan (sudut 45 ° dengan batas lebar yang sama, tetapi mengubah lebar perbatasan dapat mengubah sudut).
Lihatlah jsFiddle .
Dengan menyembunyikan batas-batas tertentu, Anda bisa mendapatkan efek segitiga (seperti yang Anda lihat di atas dengan membuat bagian-bagian berbeda warna yang berbeda).
transparent
sering digunakan sebagai warna tepi untuk mencapai bentuk segitiga.sumber
Mulai dengan bujur sangkar dasar dan batas. Setiap perbatasan akan diberi warna berbeda sehingga kami dapat membedakannya:
yang memberi Anda ini :
Tapi tidak perlu untuk perbatasan atas, jadi atur lebarnya
0px
. Sekarang batas bawah kita200px
akan membuat segitiga kita 200px tinggi.dan kita akan mendapatkan ini :
Kemudian untuk menyembunyikan dua sisi segitiga, atur warna perbatasan menjadi transparan. Karena batas atas telah dihapus secara efektif, kami dapat mengatur batas warna atas menjadi transparan juga.
akhirnya kami mendapatkan ini :
sumber
There's another way to draw ..
, yang ternyata menjadi cara yang sama :) Penjelasan yang bagusPendekatan yang berbeda:
CSS3 segitiga dengan transformasi rotate
Bentuk segitiga cukup mudah dibuat menggunakan teknik ini. Bagi orang yang lebih suka melihat animasi yang menjelaskan bagaimana teknik ini bekerja di sini adalah:
Jika tidak, berikut adalah penjelasan terperinci dalam 4 babak (ini bukan tragedi) tentang cara membuat segitiga siku-siku sama kaki dengan satu elemen.
<div class="tr"></div>
LANGKAH 1: Buat div
Mudah, pastikan saja
width = 1.41 x height
. Anda dapat menggunakan teknologi apa pun ( lihat di sini ) termasuk penggunaan persentase dan padding-bottom untuk mempertahankan rasio aspek dan membuat segitiga responsif . Pada gambar berikut, div memiliki perbatasan kuning keemasan.Dalam div itu, masukkan elemen pseudo dan berikan lebar dan tinggi 100% induk. Elemen pseudo memiliki latar belakang biru pada gambar berikut.
Pada titik ini, kami memiliki CSS ini :
LANGKAH 2: Ayo putar
Pertama, paling penting: mendefinisikan asal transformasi . The asal standar adalah di tengah elemen semu dan kami membutuhkannya di bagian kiri bawah. Dengan menambahkan CSS ini ke elemen pseudo:
transform-origin:0 100%;
atautransform-origin: left bottom;
Sekarang kita dapat memutar elemen pseudo 45 derajat searah jarum jam dengan
transform : rotate(45deg);
Pada titik ini, kami memiliki CSS ini :
LANGKAH 3: sembunyikan
Untuk menyembunyikan bagian yang tidak diinginkan dari elemen semu (semua yang meluap div dengan batas kuning) Anda hanya perlu mengatur
overflow:hidden;
pada wadah. setelah menghapus perbatasan kuning, Anda mendapatkan ... SEGITIGA ! :DEMO
CSS:
LANGKAH 4: melangkah lebih jauh ...
Seperti yang ditunjukkan dalam demo , Anda dapat menyesuaikan segitiga:
skewX()
.Mengapa menggunakan teknik ini?
Mengapa tidak menggunakan teknik ini?
sumber
skewX
diturunkan akan bermanfaat.Berikut ini adalah animasi di JSFiddle yang saya buat untuk demonstrasi.
Lihat juga cuplikan di bawah.
Ini adalah GIF Animasi yang dibuat dari Screencast
Tampilkan cuplikan kode
Versi acak
Tampilkan cuplikan kode
Versi sekaligus
Tampilkan cuplikan kode
sumber
Katakanlah kita memiliki div berikut:
Sekarang Edit CSS langkah demi langkah, sehingga Anda akan mendapatkan ide yang jelas tentang apa yang terjadi
LANGKAH 1: Tautan JSfiddle:
Ini adalah div sederhana. Dengan CSS yang sangat sederhana. Jadi orang awam bisa mengerti. Div memiliki dimensi 150 x 150 piksel dengan batas 50 piksel. Gambar terlampir:
LANGKAH 2: JSfiddle Link:
Sekarang saya baru saja mengubah warna perbatasan keempat sisi. Gambar terlampir.
LANGKAH: 3 Link JSfiddle:
Sekarang saya baru saja mengubah tinggi & lebar div dari 150 piksel menjadi nol. Gambar terlampir
LANGKAH 4: JSfiddle:
Sekarang saya telah membuat semua perbatasan transparan dari batas bawah. Gambar terlampir di bawah ini.
LANGKAH 5: JSfiddle Link:
Sekarang saya hanya mengubah warna latar menjadi putih. Gambar terlampir.
Karena itu kami mendapat segitiga yang kami butuhkan.
sumber
Dan sekarang sesuatu yang sama sekali berbeda ...
Alih-alih menggunakan trik css jangan lupa tentang solusi sesederhana entitas html:
Hasil:
▲
Lihat: Apa entitas HTML untuk segitiga naik dan turun?
sumber
Perhatikan segitiga di bawah ini
Inilah yang diberikan kepada kita:
Mengapa itu muncul dalam bentuk ini? Diagram di bawah ini menjelaskan dimensi, perhatikan bahwa 15px digunakan untuk batas bawah dan 10px digunakan untuk kiri dan kanan.
Cukup mudah untuk membuat segitiga sudut kanan juga dengan menghapus batas kanan.
sumber
Mengambil satu langkah lebih jauh, menggunakan css berdasarkan ini saya menambahkan panah ke belakang dan tombol berikutnya (ya saya tahu itu bukan 100% lintas-browser, tetapi tidak ada yang kurang kurang).
sumber
OK, segitiga ini akan dibuat karena cara yang membatasi elemen bekerja bersama dalam HTML dan CSS ...
Karena kami biasanya menggunakan batas 1 atau 2px, kami tidak pernah melihat bahwa tepi membuat sudut 45 ° satu sama lain dengan lebar yang sama dan jika lebar berubah, derajat sudut juga berubah, jalankan kode CSS yang saya buat di bawah ini:
Kemudian pada langkah berikutnya, kami tidak memiliki lebar atau tinggi, seperti ini:
Dan sekarang kita membuat batas kiri dan kanan tidak terlihat untuk membuat segitiga yang diinginkan seperti di bawah ini:
Jika Anda tidak ingin menjalankan cuplikan untuk melihat langkah-langkahnya, saya telah membuat urutan gambar untuk melihat semua langkah dalam satu gambar:
sumber
Pendekatan yang berbeda. Dengan gradien linier (untuk IE, hanya IE 10+). Anda dapat menggunakan sudut apa pun:
Ini jsfiddle
sumber
CSS
clip-path
Ini adalah sesuatu yang saya rasa pertanyaan ini telah terjawab;
clip-path
clip-path
akan menggunakan elemen itu sendiri daripada perbatasannya untuk memotong bentuk yang Anda tentukan dalam parameternya. Ini menggunakan sistem koordinat berbasis persentase super sederhana yang membuat pengeditan menjadi sangat mudah dan berarti Anda dapat mengambilnya dan membuat bentuk yang aneh dan luar biasa dalam hitungan menit.Contoh Bentuk Segitiga
Kekurangannya
Itu memang memiliki kelemahan utama saat ini, salah satunya adalah kurangnya dukungan, hanya benar-benar dibahas di dalam
-webkit-
browser dan tidak memiliki dukungan pada IE dan hanya sangat parsial di FireFox.Sumber daya
Berikut adalah beberapa sumber dan bahan yang berguna untuk membantu lebih memahami
clip-path
dan juga mulai membuat sendiri.clip-path
Generatorclip-path
Dokumentasi MDNclip-path
Dukungan Browsersumber
Ini adalah pertanyaan lama, tapi saya pikir akan sangat berharga untuk berbagi cara membuat panah menggunakan teknik segitiga ini.
Langkah 1:
Mari kita buat 2 segitiga, untuk yang kedua kita akan menggunakan
:after
pseudo class dan menempatkannya tepat di bawah yang lain:Langkah 2
Sekarang kita hanya perlu mengatur warna perbatasan dominan dari segitiga kedua dengan warna latar yang sama:
Tampilkan cuplikan kode
Biasakan dengan semua panah:
http://jsfiddle.net/tomsarduy/r0zksgeu/
sumber
SASS (SCSS) mixin segitiga
Saya menulis ini untuk membuatnya lebih mudah (dan KERING) untuk secara otomatis menghasilkan segitiga CSS:
contoh penggunaan-kasus:
Halaman taman bermain
Catatan penting:
jika segitiga tampak pixel di beberapa browser, coba salah satu metode yang dijelaskan di sini .
sumber
Jika Anda ingin menerapkan batas pada segitiga baca ini: Buat segitiga dengan CSS?
Hampir semua jawaban fokus pada segitiga yang dibangun menggunakan batas jadi saya akan menguraikan
linear-gradient
metode (seperti yang dimulai pada jawaban @ lima_fil ).Menggunakan nilai derajat seperti
45°
akan memaksa kita untuk menghormati rasio tertentuheight/width
untuk mendapatkan segitiga yang kita inginkan dan ini tidak akan responsif:Tampilkan cuplikan kode
Alih-alih melakukan hal ini kita harus mempertimbangkan nilai-nilai yang telah ditetapkan dari arah seperti
to bottom
,to top
, dll Dalam hal ini kita dapat memperoleh segala jenis bentuk segitiga sambil menjaga responsif.1) Segitiga persegi panjang
Untuk mendapatkan segitiga seperti kita perlu satu linear-gradient dan arah diagonal seperti
to bottom right
,to top left
,to bottom left
, dllTampilkan cuplikan kode
2) segitiga sama kaki
Untuk yang ini kita akan membutuhkan 2 linear-gradient seperti di atas dan masing-masing akan mengambil setengah lebar (atau ketinggian). Ini seperti kita membuat gambar cermin dari segitiga pertama.
Tampilkan cuplikan kode
3) segitiga sama sisi
Yang ini agak sulit untuk ditangani karena kita perlu menjaga hubungan antara tinggi dan lebar gradien. Kami akan memiliki segitiga yang sama seperti di atas, tetapi kami akan membuat perhitungan lebih kompleks untuk mengubah segitiga sama kaki menjadi segitiga sama sisi.
Untuk membuatnya mudah, kami akan mempertimbangkan bahwa lebar div kami diketahui dan tingginya cukup besar untuk dapat menggambar segitiga kami di dalam (
height >= width
).Kami memiliki dua gradien kami
g1
dang2
, garis biru adalah lebardiv
w
dan masing-masing gradien akan memiliki 50% dari itu (w/2
) dan setiap sisi dari segitiga harus sama denganw
. Garis hijau adalah ketinggian dari kedua gradienhg
dan kita dapat dengan mudah mendapatkan rumus di bawah ini:(w/2)² + hg² = w²
--->hg = (sqrt(3)/2) * w
--->hg = 0.866 * w
Kita dapat mengandalkan
calc()
untuk melakukan perhitungan kita dan untuk mendapatkan hasil yang dibutuhkan:Tampilkan cuplikan kode
Cara lain adalah dengan mengontrol ketinggian div dan menjaga sintaks gradien mudah:
Tampilkan cuplikan kode
4) Segitiga acak
Untuk mendapatkan segitiga acak, mudah karena kita hanya perlu menghapus kondisi 50% dari masing-masing TETAPI kita harus menjaga dua kondisi (keduanya harus memiliki tinggi yang sama dan jumlah kedua lebar harus 100%).
Tampilkan cuplikan kode
Tetapi bagaimana jika kita ingin mendefinisikan nilai untuk setiap sisi? Kami hanya perlu melakukan perhitungan lagi!
Mari kita tentukan
hg1
danhg2
sebagai ketinggian gradien kita (keduanya sama dengan garis merah) laluwg1
danwg2
sebagai lebar gradien kita (wg1 + wg2 = a
). Saya tidak akan merinci perhitungannya tetapi pada akhirnya kami akan memiliki:Sekarang kita telah mencapai batas CSS bahkan dengan
calc()
kita tidak akan dapat mengimplementasikan ini sehingga kita hanya perlu mengumpulkan hasil akhir secara manual dan menggunakannya sebagai ukuran tetap:Tampilkan cuplikan kode
Bonus
Kita tidak boleh lupa bahwa kita juga dapat menerapkan rotasi dan / atau condong dan kami memiliki lebih banyak opsi untuk mendapatkan lebih banyak segitiga:
Tampilkan cuplikan kode
Dan tentu saja kita harus mengingat solusi SVG yang dapat lebih cocok dalam beberapa situasi:
Tampilkan cuplikan kode
sumber
ini biola yang lain:
https://jsfiddle.net/qdhvdb17/
sumber
Yang lain sudah menjelaskan ini dengan baik. Biarkan saya memberi Anda animasi yang akan menjelaskan ini dengan cepat: http://codepen.io/chriscoyier/pen/lotjh
Berikut adalah beberapa kode untuk Anda mainkan dan pelajari konsepnya.
HTML:
CSS:
Mainkan ini dan lihat apa yang terjadi. Atur tinggi dan lebar menjadi nol. Kemudian hapus batas atas dan buat transparan kiri dan kanan, atau cukup lihat kode di bawah ini untuk membuat segitiga css:
sumber
Jika Anda ingin bermain-main dengan
border-size
,width
danheight
dan melihat bagaimana mereka dapat membuat bentuk yang berbeda, coba ini:sumber
Coba ini:-
sumber
Saya tahu ini sudah lama, tapi saya ingin menambahkan diskusi ini bahwa Setidaknya ada 5 metode berbeda untuk membuat segitiga menggunakan HTML & CSS saja.
borders
linear-gradient
conic-gradient
transform
danoverflow
clip-path
Saya pikir semua sudah dibahas di sini kecuali untuk metode 3, menggunakan
conic-gradient
, jadi saya akan membagikannya di sini:sumber