Advertisement
  1. Code
  2. HTML & CSS

Penyegaran CSS: Border

Scroll to top
Read Time: 11 min

Indonesian (Bahasa Indonesia) translation by ⚡ Rova Rindrata (you can also view the original English article)

Tentu, kita semua akrab dengan border. Adakah sesuatu yang baru yang mungkin bisa diperkenalkan? Baiklah, saya yakin ada beberapa hal dalam artikel ini yang tidak pernah Anda ketahui!

CSS3 tidak hanya bisa digunakan untuk membuat sudut yang membulat, tapi CSS biasa juga bisa digulung menjadi bentuk kustom. Betul; di masa lalu, sebelum teknik ini ditemukan, kita mungkin terpaksa menggunakan gambar latar belakang yang diposisikan absolute untuk menampilkan lingkaran atau panah. Syukurlah - saat kami dengan gembira mengambil satu langkah menjauh lagi dari Photoshop - ini bukan lagi masalahnya.


Dasar-dasar

Anda mungkin terbiasa dengan penggunaan border yang paling dasar.

1
border: 1px solid black;

Kode di atas akan menerapkan border 1px pada sebuah elemen. Polos dan sederhana; tapi kita juga bisa memodifikasi sintaksnya sedikit.

1
border-width: thick;
2
border-style: solid;
3
border-color: black;

Selain mengirimkan nilai tertentu ke border-width, tiga kata kunci dapat digunakan: thin, medium, dan thick.

imageimageimage

Meskipun pada awalnya mungkin tidak perlu menggunakan bentuk panjang, ada beberapa kasus bila menguntungkan, seperti saat Anda perlu memperbarui beberapa aspek dari border saat event yang ditunjuk terjadi.

Mungkin Anda perlu mengubah warna border saat pengguna meng-hover di atas elemen tertentu. Menggunakan bentuk pendek akan mengharuskan Anda mengulangi nilai piksel.

1
.box {
2
    border: 1px solid red;   
3
}
4
5
.box:hover {
6
    border: 1px solid green;
7
}

Pendekatan yang lebih elegan dan DRY adalah memperbarui properti border-color secara khusus.

1
.box {
2
    border: 1px solid red;   
3
}
4
5
.box:hover {
6
    border-color: green;
7
}

Selain itu, seperti yang akan Anda temukan segera, teknik panjang ini sangat membantu saat membuat bentuk kustom dengan CSS.


Border-Radius

border-radius adalah anak emas dari CSS3 - properti baru pertama yang digunakan secara luas di masyarakat. Apa ini berarti, kecuali Internet Explorer 8 dan di bawahnya, semua browser dapat menampilkan sudut yang membulat.

Sebelumnya, perlu menggunakan awalan vendor untuk Webkit dan Mozilla, agar gayanya diterapkan dengan benar.

1
-webkit-border-radius: 10px;
2
-moz-border-radius: 10px;
3
border-radius: 10px;

Namun, akhir-akhir ini, kita dapat menyingkirkan versi vendor tanpa khawatir, dan tetap berpegang pada bentuk resmi: border-radius.

image

Seperti yang bisa diduga, kita juga bisa menentukan nilai kustom untuk setiap sisi kotak.

imageimageimage
1
border-top-left-radius: 20px;
2
border-top-right-radius: 0;
3
border-bottom-right-radius: 30px;
4
border-bottom-left-radius: 0;

Pada kode di atas, pengaturan border-top-right-radius dan border-bottom-left-radius ke nol akan menjadi berlebihan, kecuali jika elemen mewarisi nilai yang perlu di-reset.

Sama seperti margin atau padding, pengaturan ini bisa dikondensasi menjadi satu properti, jika perlu.

1
/* top left, top right, bottom right, bottom left */
2
border-radius: 20px 0 30px 0;

Sebagai contoh (dan seperti yang sering dilakukan oleh desainer web), bentuk lemon dapat diproduksi ulang dengan CSS dan properti border-radius, seperti:

1
.lemon {
2
   width: 200px; height: 200px; 
3
4
   background: #F5F240;
5
   border: 1px solid #F0D900;      
6
   border-radius: 10px 150px 30px 150px;
7
}
imageimageimage

Melampaui Dasar-dasar

Banyak desainer dengan senang hati mengikuti pengetahuan yang diuraikan sejauh ini di bab ini; namun, ada beberapa cara untuk mendorongnya lebih jauh lagi!


Banyak Border

Ada berbagai teknik yang bisa kita lihat, saat bertugas menerapkan banyak border pada sebuah elemen.

Border-Style

Sementara solid, dashed, dan dotted merupakan nilai paling sering untuk properti border-style, ada juga beberapa yang lain yang dapat kita gunakan, termasuk groove dan ridge.

1
border: 20px groove #e3e3e3;

Atau, dengan bentuk panjang:

1
border-color: #e3e3e3;
2
border-width: 20px;
3
border-style: groove;
imageimageimage

Meskipun hal ini sangat membantu, efek ridge atau groove bukanlah benar-benar banyak border.

Outline

Teknik yang paling populer untuk membuat dua border adalah memanfaatkan properti outline.

1
.box {
2
   border: 5px solid #292929;
3
   outline: 5px solid #e3e3e3;
4
}
imageimageimage

Metode ini sangat bagus, namun terbatas pada dua border. Jika Anda perlu membuat efek berlapis gradien, pendekatan yang berbeda akan diperlukan.

Elemen Pseudo

Bila teknik outline tidak mencukupi, pendekatan alternatif adalah memanfaatkan elemen pseudo :before dan :after, dan menerapkan border tambahan yang diperlukan pada konten yang dihasilkan.

1
.box {
2
  width: 200px; height: 200px;
3
  background: #e3e3e3;
4
  position: relative;
5
6
  border: 10px solid green;  
7
}
8
9
/* Create two boxes with the same width of the container */
10
.box:after, .box:before {
11
  content: '';
12
  position: absolute;
13
  top: 0; left: 0; bottom: 0; right: 0;
14
}
15
16
.box:after {
17
  border: 5px solid red;
18
  outline: 5px solid yellow;
19
}
20
21
.box:before {
22
  border: 10px solid blue;
23
}
imageimageimage

Ini mungkin bukan pendekatan yang paling elegan, tapi pasti memenuhi pekerjaan itu. Satu peringatan adalah mudah membingungkan urutan warna border yang akan diterapkan. Tingkat "tebakan dan cek" tertentu sering diminta untuk menerapkan urutan yang benar.

Box-Shadow

Cara anak-anak yang keren untuk menciptakan jumlah border yang tak terbatas adalah dengan memanfaatkan parameter spread di properti CSS3 box-shadow.

1
.box {
2
    border: 5px solid red;
3
     box-shadow: 
4
       0 0 0 5px green, 
5
       0 0 0 10px yellow,
6
       0 0 0 15px orange;
7
}
imageimageimage

Dalam kasus ini, kita menjadi pintar dan menggunakan box-shadow dengan cara yang mungkin belum tentu sesuai dengan spesifikasi aslinya.

Dengan mengatur komponen xy, dan blur menjadi 0, kita malah bisa menggunakan nilai spread untuk membuat border padat di lokasi yang diinginkan. Karena box-shadow bisa ditumpuk, melalui penggunaan koma, jumlah level yang mungkin adalah tidak terbatas.

Teknik ini dengan anggun mendegradasi dengan cukup baik. Di browser lama, yang tidak mengenali properti box-shadow, ini hanya akan me-render border merah tunggal 5px.

Ingat: desain tidak perlu identik di semua browser. Tuliskan CSS Anda untuk browser yang paling modern, lalu berikan fallback yang sesuai, sesuai dengan itu.


Memodifikasi Sudut

Selain mengirimkan satu nilai ke border-radius, secara alternatif kita dapat memilih dua - dipisahkan oleh sebuah / - untuk menentukan nilai unik untuk radius horisontal dan vertikal.

Sebagai contoh...

1
border-radius: 50px / 100px; /* horizontal radius, vertical radius */

…setara dengan:

1
border-top-left-radius: 50px 100px;
2
border-top-right-radius: 50px 100px;
3
border-bottom-right-radius: 50px 100px;
4
border-bottom-left-radius: 50px 100px;

Teknik ini sangat membantu bila Anda perlu meniru kurva yang halus dan panjang, bukan sudut bulat generik. Misalnya, kode berikut memungkinkan kita untuk sedikit melepaskan diri dari bentuk persegi, menghasilkan efek menggulung seperti kertas.

1
.box {
2
    width: 200px; height: 200px;
3
    background: #666;
4
5
    border-top-left-radius: 15em 1em;
6
    border-bottom-right-radius: 15em 1em;
7
8
}
imageimageimage

Bentuk CSS

Mungkin penggunaan border yang paling rapi adalah saat mereka dengan cerdik diterapkan ke elemen, yang memiliki lebar dan tinggi nol. Membingungkan, ya? Mari kita lihat sebuah demonstrasi.

Untuk beberapa contoh berikut, asumsikan markup berikut…

1
<div class="box"></div>

…dan gaya dasar berikut:

1
.box {
2
   width: 200px;
3
   height: 200px;
4
   background: black;
5
}

Contoh yang paling sering direferensikan, saat mendemonstrasikan bagaimana bentuk CSS dapat digunakan dalam sebuah proyek, adalah untuk menciptakan panah yang wajib.

Kunci untuk memahami bagaimana sebuah panah dapat dibentuk dengan CSS adalah dengan mengatur border-color yang unik ke masing-masing sisi, dan kemudian mengurangi nilai width dan height untuk kontainer menjadi 0.

Dengan asumsi sebuah div dengan kelas arrow sebagai kontainer:

1
.arrow {
2
  width: 0; height: 0;
3
4
  border-top: 100px solid red;
5
  border-right: 100px solid green;
6
  border-bottom: 100px solid blue;
7
  border-left: 100px solid yellow;  
8
}

Seperti yang ditunjukkan pada awal bab ini, sintaks yang lebih bersih tidak menggunakan versi pendek yang mencakup semua:

1
.arrow {
2
  width: 0; height: 0;
3
4
  border: 100px solid;  
5
  border-top-color: red;
6
  border-right-color: green;
7
  border-bottom-color: blue;
8
  border-left-color: yellow;
9
}

Kita bahkan bisa mengurangi ini lebih jauh, dengan mengelompokkan nilai warna.

1
.arrow {
2
  width: 0; height: 0;
3
4
  border: 100px solid;
5
  border-color: red green blue yellow;
6
}
imageimageimage

Menarik kan? Akan sangat masuk akal jika kita mundur selangkah. Itulah satu-satunya cara yang memungkinkan warna bisa sejajar, dengan asumsi width dan height nol untuk kontainer. Nah, bagaimana jika kita mengatur semua border-colors menjadi transparent, kecuali sisi biru?

1
.arrow {
2
  width: 0; height: 0;
3
4
  border: 100px solid;
5
  border-bottom-color: blue;
6
}
imageimageimage

Bagus sekali! Tapi sepertinya tidak terlalu semantik untuk membuat div .arrow, semua untuk tujuan menambahkan panah ke halaman. Sebagai gantinya, pseudo element dapat digunakan untuk menerapkan panah setelah atau sebelum elemen yang terkait.

Membuat Gelembung Ucapan

Untuk membuat gelembung ucapan 100% CSS, kita mulai dengan markup-nya.

1
<div class="speech-bubble">Hi there!</div>

Selanjutnya, beberapa gaya dasar harus diterapkan

1
.speech-bubble {
2
    position: relative;
3
    background-color: #292929;
4
5
    width: 200px;
6
    height: 150px;
7
    line-height: 150px; /* vertically center */
8
9
    color: white;
10
    text-align: center;
11
}
imageimageimage

Panah akan diaplikasikan dengan menggunakan psuedo-element after.

1
.speech-bubble:after {
2
    content: '';    
3
}

Psuedo element :before dan :after dapat digunakan untuk memasukkan konten yang dihasilkan baik sebelum atau sesudah konten elemen.

Pada titik ini, ini hanya soal mereproduksi panah, dan memposisikannya di lokasi yang tepat. Kita memulai dengan memposisikan kontensecara absolute, mengatur ulang width dan height, dan menerapkan warna border.

1
.speech-bubble:after {
2
  content: '';
3
  position: absolute;
4
5
  width: 0;
6
  height: 0;
7
8
  border: 10px solid;
9
  border-color: red green blue yellow;
10
}
imageimageimage

Karena kita tahu bahwa kita ingin panah menunjuk ke bawah, gambar di atas menunjukkan bahwa semua kecuali border merah (atau atas) harus dihilangkan, atau disetel ke transparan.

1
.speech-bubble:after {
2
  content: '';
3
  position: absolute;
4
5
  width: 0;
6
  height: 0;
7
8
  border: 10px solid;
9
  border-top-color: red;
10
}
imageimageimage

Saat membuat bentuk CSS, karena kita tidak dapat menggunakan properti width untuk menentukan seberapa lebar panah seharusnya, properti border-width seharusnya yang digunakan. Dalam hal ini, panah harus sedikit lebih besar; sehingga border-width bisa dinaikkan menjadi 15px. Kita juga akan menempatkan panah di bagian bawah dan tengah kontainer, dengan menggunakan properti top dan left.

1
.speech-bubble:after {
2
  content: '';
3
  position: absolute;
4
5
  width: 0;
6
  height: 0;
7
8
  border: 15px solid;
9
  border-top-color: red;
10
11
  top: 100%;
12
  left: 50%;
13
}
imageimageimage

Hampir sampai; langkah terakhir adalah memperbarui warna panah agar sama dengan latar belakang kontainer. Posisi juga perlu dimodifikasi untuk memperhitungkan lebar border (15px). Sementara kita di sini, kita juga akan menerapkan border-radius yang halus untuk membuat wadah tampak lebih seperti gelembung.

1
.speech-bubble { 
2
   /* … other styles */
3
   border-radius: 10px;
4
}
5
6
.speech-bubble:after {
7
  content: '';
8
  position: absolute;
9
10
  width: 0;
11
  height: 0;
12
13
  border: 15px solid;
14
  border-top-color: #292929;
15
16
  top: 100%;
17
  left: 50%;
18
  margin-left: -15px; /* adjust for border width */
19
}
imageimageimage

Tidak buruk, ay? Pisahkan kode ini ke beberapa kelas yang bisa digunakan kembali, dan Anda siap untuk menyelesaikan semua proyek masa depan.

1
/* 

2
   Speech Bubbles

3
   Usage: Apply a class of .speech-bubble and .speech-bubble-DIRECTION

4
   <div class="speech-bubble speech-bubble-top">Hi there</div>

5
*/
6
7
.speech-bubble {
8
  position: relative;
9
  background-color: #292929;
10
11
  width: 200px;
12
  height: 150px;
13
  line-height: 150px; /* vertically center */
14
15
  color: white;
16
  text-align: center;
17
  border-radius: 10px;
18
19
  font-family: sans-serif;
20
}
21
22
.speech-bubble:after {
23
  content: '';
24
  position: absolute;
25
26
  width: 0;
27
  height: 0;
28
29
  border: 15px solid;
30
}
31
32
33
/* Position the Arrow */
34
35
.speech-bubble-top:after {
36
  border-bottom-color: #292929;
37
38
  left: 50%;
39
  bottom: 100%;
40
  margin-left: -15px;   
41
}
42
.speech-bubble-right:after {
43
  border-left-color: #292929;
44
45
  left: 100%;
46
  top: 50%;
47
  margin-top: -15px;    
48
}
49
50
.speech-bubble-bottom:after {
51
  border-top-color: #292929;
52
53
  top: 100%;
54
  left: 50%;
55
  margin-left: -15px;   
56
}
57
58
.speech-bubble-left:after {
59
  border-right-color: #292929;
60
61
  top: 50%;
62
  right: 100%;
63
  margin-top: -15px;    
64
}
image

Bonus: Pemusatan Vertikal yang Lebih Baik

Satu kelemahan untuk menggunakan line-height untuk memusatkan teks secara vertikal adalah Anda terbatas pada satu baris saja. Jika teks membutuhkan dua baris atau lebih, masing-masing tinggi baris akan terlalu besar. Solusi cerdas adalah dengan mengatur display table ke gelembung ucapan, dan display table-cell ke paragraf yang membungkus teks. Ini kemudian memungkinkan kita untuk menyelaraskan teks ke tengah, yang sesuai.

1
<div class="speech-bubble speech-bubble-top">
2
    <p>Text goes here.</p>
3
</div>

Selanjutnya, CSS yang dimodifikasi.

1
.speech-bubble {
2
 /* other styles */
3
4
  display: table;
5
}
6
7
.speech-bubble p {
8
  display: table-cell;
9
  vertical-align: middle;
10
}
imageimageimage

Jika referensi untuk display: table membawa kembali kenangan buruk tentang tata letak kuno berbasis tabel, jangan khawatir. Properti-properti ini hanya mengacu pada gaya dimana elemen harus ditampilkan.

Kita tidak terbatas pada segitiga; CSS mampu menghasilkan segala macam bentuk - bahkan hati dan tanda biohazard!

imageimageimage
1
.biohazard {
2
  width: 0; height: 0;
3
4
  border: 60px solid;
5
  border-radius: 50%;
6
7
  border-top-color: black;
8
  border-bottom-color: black;
9
  border-left-color: yellow;
10
  border-right-color: yellow;
11
}

Ringkasan

Meskipun benar bahwa bordeer sintaks sederhana border: 1px solid black berjalan jauh, jika kita pintar, kita dapat menciptakan berbagai efek bermanfaat, ikon, dan bentuk. Siapa sangka border bisa begitu kuat? Kuncinya adalah mengingat bahwa penataan untuk bentuk umum atau gelembung ucapan seharusnya hanya dibuat satu kali, dan kemudian dipisahkan ke kelas utilitas untuk penggunaan masa depan.

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.