Memulai Bentuk CSS

Menggabungkan konten di sekitar jalur kustom

Razvan Caliman
Razvan Caliman

Untuk waktu yang lama, desainer web telah dipaksa untuk membuat dalam batasan persegi panjang. Sebagian besar konten di web masih terperangkap dalam kotak-kotak sederhana karena sebagian besar usaha kreatif yang mengarah ke tata letak non-persegi panjang berakhir dengan rasa frustrasi. Hal ini akan segera berubah dengan diperkenalkannya Bentuk CSS, yang tersedia mulai Chrome 37. Bentuk CSS memungkinkan desainer web untuk mengemas konten di sekitar jalur khusus, seperti lingkaran, elips dan poligon, sehingga bebas dari batasan persegi panjang.

Bentuk dapat ditentukan secara manual atau dapat disimpulkan dari gambar.

Mari kita lihat contoh yang sangat sederhana.

Mungkin Anda pernah naif seperti saya ketika pertama kali mengambangkan gambar dengan bagian transparan yang mengharapkan konten membungkus dan mengisi celah, tetapi kecewa dengan bentuk pembungkusan persegi panjang yang terus ada di sekitar elemen. Bentuk CSS dapat digunakan untuk mengatasi masalah ini.

Mengekstrak bentuk dari gambar
<img class="element" src="image.png" />
<p>Lorem ipsum…</p>

<style>
.element{
  shape-outside: url(image.png);
  shape-image-threshold: 0.5;
  float: left;
}
</style>

Deklarasi CSS shape-outside: url(image.png) memberi tahu browser untuk mengekstrak bentuk dari gambar.

Properti shape-image-threshold menentukan tingkat opasitas minimum piksel yang akan digunakan untuk membuat bentuk. Nilainya harus berada dalam rentang antara 0.0 (sepenuhnya transparan) dan 1.0 (sepenuhnya tidak tembus pandang). Jadi, shape-image-threshold: 0.5 berarti hanya piksel dengan opasitas 50% ke atas yang akan digunakan untuk membuat bentuk.

Properti float sangat penting di sini. Meskipun properti shape-outside menentukan bentuk area tempat konten akan digabungkan, tanpa float, Anda tidak akan melihat efek bentuk.

Elemen memiliki area mengambang yang berada di sisi berlawanan dari nilai float. Contohnya, jika elemen dengan gambar cangkir kopi melayang ke kiri, area {i>float<i} akan dibuat di sebelah kanan cangkir. Meskipun Anda dapat merekayasa gambar dengan celah di kedua sisi, konten hanya akan membungkus bentuk di sisi berlawanan yang ditentukan oleh properti float, kiri atau kanan, tidak pernah keduanya.

Di masa mendatang, Anda akan dapat menggunakan shape-outside pada elemen yang tidak mengambang dengan pengantar Pengecualian CSS.

Membuat bentuk secara manual

Selain mengekstrak bentuk dari gambar, Anda juga dapat membuat kodenya secara manual. Anda dapat memilih dari beberapa nilai fungsional untuk membuat bentuk: circle(), ellipse(), inset(), dan polygon(). Setiap fungsi bentuk menerima satu set koordinat dan dipasangkan dengan kotak referensi yang menetapkan sistem koordinat. Selengkapnya tentang kotak referensi akan segera.

Fungsi lingkaran()

Ilustrasi nilai bentuk lingkaran()

Notasi lengkap untuk nilai bentuk lingkaran adalah circle(r at cx cy) dengan r adalah radius lingkaran, sedangkan cx dan cy adalah koordinat pusat lingkaran pada sumbu X dan sumbu Y. Koordinat untuk pusat lingkaran bersifat opsional. Jika Anda menghilangkannya, bagian tengah elemen (perpotongan diagonalnya) akan digunakan sebagai default.

.element{
  shape-outside: circle(50%);
  width: 300px;
  height: 300px;
  float: left;
}

Pada contoh di atas, konten akan mengelilingi bagian luar jalur melingkar. Argumen tunggal 50% menentukan radius lingkaran, yang dalam kasus khusus ini berjumlah setengah dari lebar atau tinggi elemen. Mengubah dimensi elemen akan memengaruhi radius bentuk lingkaran. Ini adalah contoh dasar bagaimana Bentuk CSS dapat menjadi responsif.

Sebelum melangkah lebih jauh, hal singkat: penting untuk diingat bahwa Bentuk CSS hanya memengaruhi bentuk area mengambang di sekitar elemen. Jika elemen memiliki latar belakang, itu tidak akan terpotong oleh bentuk. Untuk mendapatkan efek tersebut, Anda harus menggunakan properti dari Penyamaran CSS - baik clip-path maupun mask-image. Properti clip-path sangat berguna karena mengikuti notasi yang sama dengan Bentuk CSS, sehingga Anda dapat menggunakan kembali nilai.

Ilustrasi bentuk `lingkaran()` + clip-path

Ilustrasi di seluruh dokumen ini menggunakan clipping untuk menyoroti bentuk dan membantu Anda memahami efeknya.

Kembali ke bentuk lingkaran.

Saat menggunakan persentase untuk radius lingkaran, nilai sebenarnya dihitung dengan formula yang sedikit lebih kompleks: sqrt(lebar^2 + tinggi^2) / sqrt(2). Hal ini berguna untuk memahami hal ini karena akan membantu Anda membayangkan seperti apa bentuk lingkaran yang dihasilkan jika dimensi elemen tidak sama.

Semua jenis satuan CSS dapat digunakan dalam koordinat fungsi bentuk - px, em, rem, vw, vh, dan sebagainya. Anda dapat memilih salah satu yang fleksibel atau cukup kaku untuk kebutuhan Anda.

Anda dapat menyesuaikan posisi lingkaran dengan menyetel nilai eksplisit untuk koordinat pusatnya.

.element{
  shape-outside: circle(50% at 0 0);
}

Tindakan ini memosisikan pusat lingkaran di asal sistem koordinat. Apa itu sistem koordinat? Di sinilah kami memperkenalkan kotak referensi.

Kotak referensi untuk Bentuk CSS

Kotak referensi adalah kotak virtual di sekitar elemen, yang membentuk sistem koordinat yang digunakan untuk menggambar dan memosisikan bentuk. Asal sistem koordinat berada di sudut kiri atas dengan sumbu X mengarah ke kanan dan sumbu Y mengarah ke bawah.

Sistem koordinat untuk Bentuk CSS

Perlu diingat bahwa shape-outside mengubah bentuk area float di sekitar konten yang akan digabungkan. Area mengambang diperluas ke tepi luar kotak yang ditentukan oleh properti margin. Ini disebut margin-box dan merupakan kotak referensi default untuk suatu bentuk jika tidak ada yang disebutkan secara eksplisit.

Dua deklarasi CSS berikut memiliki hasil yang identik:

.element{
  shape-outside: circle(50% at 0 0);
  /* identical to: */
  shape-outside: circle(50% at 0 0) margin-box;
}

Kita belum menetapkan margin pada elemen. Pada tahap ini, kita dapat mengasumsikan bahwa asal sistem koordinat dan pusat lingkaran berada di sudut kiri atas area konten elemen. Ini akan berubah saat Anda menetapkan margin:

.element{
  shape-outside: circle(50% at 0 0) margin-box;
  margin: 100px;
}

Asal sistem koordinat kini berada di luar area konten elemen (100px ke atas dan 100px kiri), seperti halnya pusat lingkaran. Nilai komputasi radius lingkaran juga berkembang untuk memperhitungkan peningkatan permukaan sistem koordinat yang ditetapkan oleh kotak referensi margin-box.

Sistem koordinat kotak margin dengan dan tanpa margin
Ada beberapa opsi kotak referensi yang dapat dipilih: `margin-box`, `border-box`, `padding-box`, dan `content-box`. Nama-nama tersebut menyiratkan batasnya. Sebelumnya, kita menjelaskan `margin-box`. `border-box` dibatasi oleh tepi luar batas elemen, `padding-box` dibatasi oleh padding elemen, sedangkan `content-box` identik dengan area permukaan aktual yang digunakan oleh konten dalam elemen.
Ilustrasi semua kotak referensi

Hanya satu kotak referensi yang dapat digunakan pada waktu tertentu dengan deklarasi shape-outside. Setiap kotak referensi akan memengaruhi bentuk dengan cara yang berbeda dan terkadang halus. Ada artikel lain yang menggali lebih dalam dan membantu Anda memahami kotak referensi untuk Bentuk CSS.

Fungsi ellipse()

Ilustrasi nilai bentuk ellipse()

Elips terlihat seperti lingkaran yang diciutkan. Keduanya didefinisikan sebagai ellipse(rx ry at cx cy), dengan rx dan ry adalah radius elips di sumbu X dan sumbu Y, sedangkan cx dan cy adalah koordinat pusat elips.

.element{
  shape-outside: ellipse(150px 300px at 50% 50%);
  width: 300px;
  height: 600px;
}

Nilai persentase akan dihitung dari dimensi sistem koordinat. Tidak perlu matematika lucu di sini. Anda dapat menghilangkan koordinat untuk pusat elips dan koordinat tersebut akan ditentukan dari pusat sistem koordinat.

Radii pada sumbu X dan Y juga dapat ditentukan dengan kata kunci: farthest-side menghasilkan radius yang sama dengan jarak antara pusat elips dan sisi kotak referensi yang paling jauh darinya, sedangkan closest-side berarti kebalikannya - gunakan jarak terpendek antara pusat elips dan sisi.

.element{
  shape-outside: ellipse(closest-side farthest-side at 50% 50%);
  /* identical to: */
  shape-outside: ellipse(150px 300px at 50% 50%);
  width: 300px;
  height: 600px;
}

Ini mungkin berguna ketika dimensi elemen (atau kotak referensi) dapat berubah dengan cara yang tidak dapat diprediksi, tetapi Anda ingin bentuk elips dapat beradaptasi.

Kata kunci farthest-side dan closest-side yang sama juga dapat digunakan untuk radius dalam fungsi bentuk circle().

Fungsi Polygon()

Ilustrasi nilai bentuk polygon()

Jika lingkaran dan elips terlalu membatasi, fungsi bentuk poligon akan membuka banyak pilihan. Formatnya adalah polygon(x1 y1, x2 y2, ...) dengan Anda menetapkan pasangan koordinat x y untuk setiap verteks (titik) poligon. Jumlah minimal pasangan untuk menetapkan poligon adalah tiga, yaitu segitiga.

.element{
  shape-outside: polygon(0 0, 0 300px, 300px 600px);
  width: 300px;
  height: 600px;
}

Verteks ditempatkan pada sistem koordinat. Untuk poligon responsif, Anda dapat menggunakan nilai persentase untuk beberapa atau semua koordinat.

.element{
  /* polygon responsive to font-size*/
  shape-outside: polygon(0 0, 0 100%, 100% 100%);
  width: 20em;
  height: 40em;
}

Ada parameter fill-rule opsional, yang diimpor dari SVG, yang memberi tahu browser cara mempertimbangkan “bagian dalam” poligon jika jalur yang berpotongan sendiri atau bentuk tertutup. Joni trythall menjelaskan dengan sangat baik cara kerja properti aturan pengisian di SVG. Jika tidak ditentukan, fill-rule akan ditetapkan secara default ke nonzero.

.element{
  shape-outside: polygon(0 0, 0 100%, 100% 100%);
  /* identical to: */
  shape-outside: polygon(nonzero, 0 0, 0 100%, 100% 100%);
}

Fungsi inset()

Fungsi bentuk inset() memungkinkan Anda membuat bentuk persegi panjang untuk menggabungkan konten. Hal ini mungkin terdengar kontra-intuitif mengingat premis awal bahwa CSS Shapes memberikan konten web gratis dari kotak sederhana. Pastinya akan sangat baik. Saya belum menemukan kasus penggunaan untuk inset() yang belum dapat dilakukan dengan float dan margin atau dengan polygon(). Meskipun demikian, inset() menyediakan ekspresi yang lebih mudah dibaca untuk bentuk persegi panjang daripada polygon().

Notasi lengkap untuk fungsi bentuk inset adalah inset(top right bottom left border-radius). Empat argumen posisi pertama adalah offset ke dalam dari tepi elemen. Argumen terakhir adalah radius batas untuk bentuk persegi panjang. Atribut ini opsional, jadi Anda dapat mengabaikannya. Ini mengikuti notasi singkat border-radius yang sudah Anda gunakan di CSS.

.element{
  shape-outside: inset(100px 100px 100px 100px);
  /* yields a rectangular shape which is 100px inset on all sides */
  float: left;
}

Membuat bentuk dari kotak referensi

Jika tidak menentukan fungsi bentuk ke properti shape-outside, Anda dapat mengizinkan browser untuk memperoleh bentuk dari kotak referensi elemen. Kotak referensi default adalah margin-box. Tidak ada yang eksotis sejauh ini, begitulah cara kerja float. Namun, dengan menerapkan teknik ini, Anda dapat menggunakan kembali geometri suatu elemen. Mari kita lihat properti border-radius.

Jika Anda menggunakannya untuk membulatkan sudut elemen melayang, Anda akan mendapatkan efek clipping, tetapi area mengambang akan tetap persegi panjang. Tambahkan shape-outside: border-box untuk melingkari kontur yang dibuat oleh border-radius.

Mengekstrak bentuk dari radius batas elemen menggunakan kotak referensi kotak batas
.element{
  border-radius: 50%;
  shape-outside: border-box;
  float: left;
}

Tentu saja, Anda dapat menggunakan semua kotak referensi dengan cara ini. Berikut adalah penggunaan lain untuk bentuk turunan - offset pull-kutip.

Membuat tanda kutip dengan offset menggunakan kotak referensi kotak konten

Anda dapat mencapai efek pull-kutip offset dengan menggunakan properti float dan margin saja. Namun, hal ini mengharuskan Anda untuk menempatkan elemen kutipan di hierarki HTML pada titik yang Anda inginkan untuk dirender.

Berikut cara mencapai efek pull-kutip offset yang sama dengan fleksibilitas tambahan:

.pull-quote{
  shape-outside: content-box;
  margin-top: 200px;
  float: left;
}

Kami secara eksplisit menyetel kotak referensi content-box untuk sistem koordinat bentuk. Dalam hal ini, jumlah konten dalam pull-kutip menentukan bentuk di mana konten luar akan digabungkan. Properti margin-top digunakan di sini untuk memosisikan (offset) tanda kutip, terlepas dari posisinya dalam hierarki HTML.

Margin bentuk

Anda akan melihat bahwa membungkus konten di sekitar suatu bentuk dapat membuatnya terlalu dekat dengan elemen. Anda dapat menambahkan spasi di sekitar bentuk dengan properti shape-margin.

.element{
  shape-outside: circle(40%);
  shape-margin: 1em;
  float: left;
}

Efeknya ini mirip dengan yang biasa Anda gunakan dari penggunaan properti margin reguler, tetapi shape-margin hanya memengaruhi ruang di sekitar nilai shape-outside. Ini akan menambahkan jarak di sekitar bentuk hanya jika ada ruang untuknya dalam sistem koordinat. Itulah sebabnya dalam contoh di atas radius lingkaran ditetapkan ke 40%, bukan 50%. Jika radius ditetapkan ke 50%, lingkaran akan menggunakan semua ruang dalam sistem koordinat sehingga tidak ada ruang untuk efek shape-margin. Ingat, bentuk pada akhirnya dibatasi pada margin-box elemen (elemen plus margin di sekitarnya). Jika bentuk lebih besar dan melebihi batas, bentuk tersebut akan diklip ke margin-box dan Anda akan mendapatkan bentuk persegi panjang.

Perlu dipahami bahwa shape-margin hanya menerima satu nilai positif. Tidak memiliki notasi panjang. Apa itu {i>margin-top<i} untuk sebuah lingkaran?

Menganimasikan bentuk

Anda bisa mencampur bentuk CSS dengan banyak fitur CSS lainnya, seperti transisi dan animasi. Meskipun demikian, saya harus menekankan bahwa pengguna merasa sangat mengganggu ketika tata letak teks berubah saat mereka membaca. Perhatikan baik-baik pengalaman tersebut jika Anda memutuskan untuk mendukung animasi bentuk.

Anda dapat menganimasikan radius dan pusat untuk bentuk circle() dan ellipse() selama ditetapkan dalam nilai yang dapat diinterpolasi oleh browser. Beralih dari circle(30%) ke circle(50%) dimungkinkan. Namun, menganimasikan antara circle(closest-side) ke circle(farthest-side) akan mencekik browser.

.element{
  shape-outside: circle(30%);
  transition: shape-outside 1s;
  float: left;
}

.element:hover{
  shape-outside: circle(50%);
}
GIF animasi lingkaran

Efek yang lebih menarik dapat dicapai saat menganimasikan bentuk polygon(), dengan catatan penting bahwa poligon harus memiliki jumlah verteks yang sama di antara dua status animasi. Browser tidak dapat melakukan interpolasi jika Anda menambahkan atau menghapus verteks.

Salah satu triknya adalah menambahkan jumlah maksimum verteks yang Anda butuhkan dan memosisikan verteks tersebut dalam kelompok dalam status animasi di mana Anda ingin lebih sedikit tepian yang terlihat pada bentuk.

.element{
  /* four vertices (looks like rectangle) */
  shape-outside: polygon(0 0, 100% 0, 100% 100%, 0 100%);
  transition: shape-outside 1s;
}

.element:hover{
  /* four vertices, but second and third overlap (looks like triangle) */
  shape-outside: polygon(0 0, 100% 50%, 100% 50%, 0 100%);
}
GIF animasi segitiga

Menggabungkan konten ke dalam suatu bentuk

Screenshot demo Alice in Wonderland menggunakan CSS Shapes untuk menggabungkan konten

Draf awal spesifikasi Bentuk CSS menyertakan properti shape-inside yang memungkinkan Anda menggabungkan konten ke dalam suatu bentuk. Bahkan ada implementasi di Chrome dan Webkit untuk sementara waktu. Namun, menggabungkan konten yang diposisikan secara arbitrer di dalam jalur khusus memerlukan lebih banyak upaya dan riset untuk mencakup semua kemungkinan skenario dan menghindari bug. Itulah sebabnya properti shape-inside telah dialihkan ke CSS Shapes Level 2 dan implementasinya telah dibatalkan.

Namun, dengan sedikit usaha dan sedikit kompromi, Anda masih dapat mencapai efek membungkus konten di dalam bentuk kustom. Caranya adalah menggunakan dua elemen float dengan shape-outside, yang diposisikan di sisi berlawanan dari container. Komprominya adalah Anda harus menggunakan satu atau dua elemen kosong yang tidak memiliki makna semantik, tetapi berfungsi sebagai penopang untuk menciptakan ilusi bentuk di dalamnya.

<div>
  <div class='left-shape'></div>
  <div class='right-shape'></div>

  Lorem ipsum...
</div>

Posisi elemen penyangga .left-shape dan .right-shape di bagian atas penampung penting karena akan mengambang ke kiri dan ke kanan untuk mengapit konten.

.left-shape{
  shape-outside: polygon(0 0, ...);
  float: left;
  width: 50%;
  height: 100%;
}

.right-shape{
  shape-outside: polygon(50% 0, ...);
  float: right;
  width: 50%;
  height: 100%;
}
Ilustrasi solusi bentuk di dalam untuk demo Alice

Gaya ini membuat dua strut mengambang menempati semua ruang dalam elemen, tetapi properti shape-outside menampilkan ruang untuk konten lainnya.

Jika Bentuk CSS tidak didukung oleh browser, ini akan menghasilkan efek buruk dengan mendorong semua konten ke bawah. Itulah mengapa penting untuk menggunakan fitur ini secara bertahap.

Dalam contoh animasi bentuk sebelumnya, Anda akan melihat bahwa pergeseran teks bisa sangat mengganggu. Tidak semua kasus penggunaan memerlukan bentuk animasi. Namun, Anda dapat menganimasikan properti lain yang berinteraksi dengan Bentuk CSS untuk menambahkan efek di tempat yang wajar.

Dalam demonstrasi Alice in Wonderland dari Bentuk CSS, kami menggunakan posisi scroll untuk mengubah margin atas konten. Teks ditempatkan di antara dua elemen melayang. Saat bergerak ke bawah, elemen harus menata ulang sesuai dengan shape-outside dari dua elemen float. Hal ini memberi kesan bahwa teks tersebut akan mengalir ke lubang kelinci dan menambah pengalaman bercerita. Hampir serampangan? Mungkin. Tapi, kelihatannya keren.

Karena tata letak teks dilakukan secara native oleh browser, performanya lebih baik daripada menggunakan solusi JavaScript. Namun, mengubah margin atas saat men-scroll memang memicu banyak peristiwa penataan ulang dan paint, dan hal ini dapat mengurangi performa secara signifikan. Gunakan dengan hati-hati! Namun, menggunakan Bentuk CSS tanpa menganimasikannya tidak menghasilkan hit performa yang jelas.

{i>Progressive enhancement <i}

Mulailah dengan mengasumsikan bahwa browser tidak memiliki dukungan CSS Shapes dan melanjutkannya saat Anda mendeteksi fitur tersebut. Modernizr adalah solusi yang baik untuk melakukan deteksi fitur dan ada pengujian untuk Bentuk CSS di bagian 'Non-core detected'.

Beberapa browser menyediakan deteksi fitur dalam CSS melalui aturan @supports tanpa memerlukan library eksternal. Google Chrome, yang juga mendukung Bentuk CSS, memahami aturan @supports. Beginilah cara Anda menggunakannya untuk meningkatkan secara bertahap:

.element{
  /* styles for all browsers */
}

@supports (shape-outside: circle(50%)){
  /* styles only for browsers which support CSS Shapes */
  .element{
    shape-outside: circle(50%);
  }
}

Lea Verou telah menulis lebih banyak tentang cara menggunakan aturan @supports CSS.

Disambiguasi dari Pengecualian CSS

Yang kita ketahui sekarang sebagai CSS Shapes dulunya disebut Pengecualian dan Bentuk CSS di awal spesifikasi. Peralihan dalam penamaan mungkin tampak seperti nuansa, tetapi sebenarnya hal ini sangat penting. Pengecualian CSS, sekarang menjadi spesifikasi terpisah, memungkinkan penggabungan konten di sekitar elemen yang diposisikan secara bebas, tanpa memerlukan properti float. Bayangkan membungkus konten di seputar elemen yang benar-benar diposisikan; itu adalah kasus penggunaan untuk Pengecualian CSS. Bentuk CSS hanya menentukan jalur di mana konten akan digabungkan.

Jadi, bentuk dan pengecualian bukanlah hal yang sama, tetapi mereka saling melengkapi. Bentuk CSS tersedia di browser saat ini, sementara Pengecualian CSS belum diterapkan dengan interaksi bentuk.

Alat untuk menggunakan Bentuk CSS

Anda dapat membuat jalur di alat pembuat gambar klasik, tetapi tidak satu pun dari jalur tersebut yang mengekspor sintaksis yang diperlukan untuk nilai Bentuk CSS pada saat penulisan ini. Bahkan jika mereka melakukannya, bekerja seperti itu tidak akan terlalu praktis.

Bentuk CSS dimaksudkan untuk digunakan di browser, tempat bentuk tersebut bereaksi terhadap elemen lain pada laman. Sangat berguna untuk memvisualisasikan efek pengeditan bentuk pada konten yang mengelilinginya. Ada beberapa alat untuk membantu Anda dalam alur kerja ini:

Tanda kurung: Ekstensi CSS Shapes Editor untuk Tanda Kurung menggunakan mode pratinjau langsung dari editor kode guna menempatkan editor interaktif untuk mengedit nilai bentuk.

Google Chrome: Ekstensi CSS Shapes Editor untuk Google Chrome memperluas Developer Tools browser dengan kontrol untuk membuat dan mengedit bentuk. Fungsi ini menempatkan editor interaktif di atas elemen yang dipilih.

Pemeriksa di Google Chrome memiliki dukungan bawaan untuk menyorot bentuk. Arahkan kursor ke elemen dengan properti shape-outside dan elemen tersebut akan menyala untuk mengilustrasikan bentuk.

Bentuk dari gambar: Jika Anda lebih suka membuat gambar dan meminta browser mengekstrak bentuk dari gambar tersebut, Rebecca Hauck telah menulis tutorial yang bagus untuk Photoshop.

Polyfill: Google Chrome adalah browser utama pertama yang mengirimkan Bentuk CSS. Fitur ini akan tersedia di iOS 8 dan Safari 8 milik Apple. Vendor browser lain mungkin akan mempertimbangkannya di masa mendatang. Hingga saat itu, ada polyfill Shape CSS untuk memberikan dukungan dasar.

Kesimpulan

Di web yang sebagian besar kontennya terperangkap dalam kotak-kotak sederhana, Bentuk CSS menyediakan cara untuk membuat tata letak yang ekspresif, menjembatani kesenjangan fidelitas antara desain web dan cetak. Tentu saja, bentuk dapat disalahgunakan dan dapat mengalihkan perhatian. Tetapi, ketika diterapkan dengan selera dan penilaian yang baik, bentuk dapat menyempurnakan presentasi konten dan memfokuskan perhatian pengguna dengan cara yang unik bagi mereka.

Saya akan memberi Anda koleksi karya orang lain, sebagian besar dari media cetak, yang menunjukkan kegunaan tata letak non-rektagular yang menarik. Saya harap hal ini dapat menginspirasi Anda untuk mencoba CSS Shapes dan bereksperimen dengan ide-ide desain baru.

Terima kasih banyak kepada Pearl Chen, Alan Stearns, dan Zoltan Horvath karena telah meninjau artikel ini dan memberikan insight yang berharga.