
Sejujurnya: menulis CSS yang baik itu sulit.
Banyak pengembang tidak suka menulis CSS. 
Apa pun, tapi bukan itu! Bukan CSS.Ketika Anda harus menangani CSS ketika mengembangkan aplikasi, ini bukan bagian pekerjaan yang paling menyenangkan. Tapi itu tidak bisa dihindari, bukan? Hari ini sangat penting untuk menyenangkan pengguna dengan desain aplikasi yang tanpa CSS - tidak ada.
Ketika proyek baru dimulai, semuanya berjalan dengan baik. Anda hanya memiliki beberapa pemilih: 
.title , 
input , 
#app - semudah 
#app .
Namun lambat laun aplikasi tumbuh, dan menakutkan untuk melihat ke dalam CSS: tidak mudah untuk mengetahui semua penyeleksi ini. Anda mulai menulis sesuatu seperti 
div#app .list li.item a , beberapa bagian kode diulangi lagi dan lagi, dan buang semua tulisan Anda di akhir file: Anda tidak peduli, karena CSS payah. Hasilnya adalah 500 baris kode CSS yang tidak dapat didukung.
 Ini saya saat melawan CSSDiterjemahkan ke Alconost
Ini saya saat melawan CSSDiterjemahkan ke AlconostTantangan saya hari ini adalah mengajari Anda cara menulis CSS dengan lebih baik. Saya ingin Anda melihat proyek lama dan berpikir: 
“Ya Tuhan! Bagaimana Anda bisa menulis ini? "Tapi bagaimana dengan kerangka kerja CSS? - kamu bertanya. Bagaimanapun, mereka diciptakan untuk ini - untuk menulis kode CSS yang baik.
Benar Tetapi mereka memiliki kelemahan:
- Desain output sering membosankan.
 
- Mungkin sulit untuk membuat pengaturan yang diperlukan atau melampaui kemampuan kerangka kerja.
 
- Untuk menggunakan kerangka kerja, Anda harus mempelajarinya terlebih dahulu.
 
Nah, Anda membaca artikel ini - itu artinya ada alasannya, bukan? Jadi, tanpa basa-basi, silakan, belajar menulis CSS lebih baik.
Catatan Artikel ini bukan tentang cara membuat aplikasi yang indah, tetapi tentang cara menulis kode CSS yang didukung dan bagaimana mengaturnya.SCSS
Dalam contoh, saya akan menggunakan 
SCSS .
SCSS adalah preprocessor CSS, pada dasarnya adalah superset dari CSS yang menambahkan beberapa fitur keren, seperti variabel, bersarang, impor, dan kotoran ("mixins").
Selanjutnya saya akan memberi tahu Anda peluang apa yang akan kami gunakan di sini.
Variabel
SCSS memiliki variabel, dan keunggulan utamanya adalah penggunaan kembali. Misalkan Anda memiliki palet warna untuk suatu aplikasi, dan warna utama adalah biru.
Oleh karena itu, Anda memiliki warna biru di mana-mana: latar 
background-color tombol 
background-color , warna 
color header, tautan. BIRU - DI MANA SAJA.
Dan tiba-tiba biru kamu tidak suka. Favorit baru adalah hijau.
- Jika Anda belum menggunakan variabel, Anda harus mengubah semua baris yang berwarna biru.
 
- Dan dengan variabel, cukup ubah nilai salah satunya.
 
 //   $primary-color: #0099ff; //    h1 { color: $primary-color: } 
Bersarang
Di SCSS, Anda bisa menggunakan nesting. Karena itu dari fragmen
 h1 { font-size: 5rem; color: blue; } h1 span { color: green; } 
Anda dapat membuat kode seperti ini:
 h1 { font-size: 5rem; color: blue; span {  color: green; } } 
Yang terakhir membaca lebih baik, kan? Nesting memungkinkan Anda menghabiskan lebih sedikit waktu untuk menulis pemilih yang kompleks.
Impor dan sebagian file
Jika Anda perlu menyediakan pemeliharaan dan keterbacaan, menyimpan semua kode dalam satu file besar adalah ide yang buruk. Jika Anda bereksperimen atau menulis aplikasi kecil, itu masih bisa diterima, tetapi pada tingkat profesional ... jangan coba-coba. Beruntung bagi kami, SCSS memecahkan masalah ini.
Kita dapat membuat "file parsial" - yang namanya dimulai 
dengan garis bawah : 
_animations.scss, _base.scss, _variables.scss dan seterusnya.
Untuk mengimpornya, arahan terkait digunakan: 
@import . Misalnya, Anda dapat melakukan ini:
 // _animations.scss @keyframes</i> appear { 0% {  opacity: 0; } 100% {  opacity: 1; } } <i>// header.scss</i> <b>@import "animations";</b> h1 { animation: appear 0.5s ease-out; } 
Anda mungkin berpikir: “Aha! Dia punya kesalahan di sini! Kita perlu menulis 
_animations.scss , bukan 
animations . ”
Tidak. SCSS cukup pintar untuk menyadari bahwa ini adalah sebagian file.
Itu semua yang perlu kita ketahui tentang 
variabel, bersarang, sebagian file, dan impor. SCSS memiliki kemungkinan lain - pengotor, warisan, dan berbagai arahan ( 
@for , 
@if , ...), tetapi saya tidak akan menyinggung mereka di sini.
Jika Anda tertarik, baca 
dokumentasinya : cukup jelas dan ditulis dengan baik.
Pemesanan CSS: Metodologi BEM
Saya telah menggunakan nama-nama umum untuk kelas CSS berkali-kali. Nah, Anda tahu:. 
.button .page-1 .page-2 .custom-input .
Seringkali kita tidak tahu nama mana yang harus dipilih - walaupun penamaan adalah tugas yang penting. Bayangkan Anda mulai menulis aplikasi, dan kemudian memutuskan untuk menunda bisnis ini selama beberapa bulan - atau, lebih buruk lagi, seseorang mengambil alih proyek Anda. Jika Anda tidak memikirkan penamaan dalam kode CSS, akan sulit untuk segera memahami apa yang dimaksud dalam baris tertentu.
BEM membantu mengatasi masalah ini. BEM adalah konvensi penamaan; singkatan dari 
blok, elemen, pengubah.Metodologi ini akan membantu Anda menyusun kode, membuatnya lebih modular, dan menyederhanakan penggunaan kembali. Mari kita lihat apa arti "blok", "elemen" dan "pengubah".
Blok
Blok dapat dibayangkan sebagai komponen. Ambil, misalnya, konstruktor Lego.
Bagaimana cara membuat rumah sederhana dari seorang desainer? Dibutuhkan jendela, atap, pintu, beberapa dinding - dan hanya itu. Inilah tepatnya 
blok kami - mereka membawa makna sendiri.
Penamaan: nama 
.block : 
.blockContoh: .card, .form, .post, .user-navigationItem
Dan bagaimana cara membuat jendela dari kubus desainer? Anda dapat menemukan kubus yang terlihat seperti bagian dari bingkai dan menyusun jendela yang indah dari mereka. Ini akan menjadi 
elemen kita. Mereka mewakili bagian yang diperlukan dari blok, tetapi di luar blok itu sendiri tidak berguna.
Penamaan: nama blok + 
__ + nama elemen: 
.block__elementContoh: .post__author, .post__date, .post__textPengubah
Jadi, kami membuat semacam jendela. Sekarang kami membutuhkan hijau atau, misalnya, jendela kecil. Ini akan menjadi 
pengubah kami 
. Mereka adalah tanda pada blok dan elemen yang digunakan untuk mengubah perilaku, penampilan, dll.
Penamaan: nama blok ATAU elemen + 
-- + nama pengubah: 
.block__element--modifier, .block--modifierContoh: .post--important, .post__btn--disabledCatatan
- BEM berarti kelas penamaan dan hanya kelas . Bukan pengidentifikasi dan bukan tag - hanya kelas .
 
- Blok dan elemen dapat bersarang di blok dan elemen lain, tetapi harus sepenuhnya independen. Tidak perlu mandiri . Oleh karena itu, tidak perlu menambahkan bidang ke tombol sehingga berada di bawah tajuk, jika tidak maka akan dilampirkan ke tajuk. Lebih baik menggunakan kelas pembantu.
 
- Ya, file HTML akan kelebihan beban, tetapi tidak menakutkan: kelebihan BEM lebih besar daripada kerugian ini.
 
Contoh
Sedikit latihan untuk pembaca. Kunjungi situs yang sering Anda kunjungi dan pikirkan tentang blok, elemen, dan pengubah apa yang mungkin ada di sana.
Misalnya, saya dapat membayangkan gambar seperti itu di Google store:

Sekarang giliranmu. Penasaran dan pikirkan apa yang bisa dilakukan dengan lebih baik. Dan tentu saja, untuk meningkatkan keterampilan Anda sendiri, Anda perlu mencari, bereksperimen, dan menulis kode secara mandiri.
Mengatur File CSS: Prinsip 7-1
Aku belum membuatmu lelah? Hebat! Mari kita cari tahu cara mengatur file CSS. Ini akan sangat meningkatkan efisiensi kerja dan membantu Anda secara instan menemukan kode CSS yang perlu diperbaiki.
Saatnya berkenalan dengan prinsip "7-1".
Angka-angka ini tidak memberi tahu Anda apa-apa, bukan?
Tapi semuanya cukup sederhana. Ada dua aturan yang harus diikuti:
- Tempatkan sebagian file dalam 7 folder.
 
- Impor semuanya menjadi satu file main.scssterletak di root. Itu saja.
 
Tujuh folder:
- Folder baseadalah kode CSS templat yang Anda tulis setiap kali Anda memulai proyek baru. Ini bisa berupa aturan tata letak, animasi, kelas bantu (misalnya,margin-right-large,text-center, ...) dan sebagainya.
 
- Folder components- semua komponen yang digunakan untuk membentuk halaman: tombol, form, modul paging - "swipers", jendela sembul, dll.
 
- Folder tata letak - untuk tata letak berbagai bagian halaman, yaitu header, footer, navigasi, bagian, custom grid, dll.
 
- Folder pagesadalah untuk halaman yang memerlukan gaya terpisah yang berbeda dari standar.
 
- Folder themes- untuk berbagai tema aplikasi (mode gelap, administrasi, dll.).
 
- Folder abstracts- semua fungsi, variabel, dan pengotor. Singkatnya, hal-hal tambahan.
 
- Folder vendorsadalah perpustakaan eksternal, yang tanpanya, mungkin, tidak satu aplikasi pun dapat melakukannya. Foldervendorsberisi file yang tidak tergantung pada Anda: Font Awesome, Bootstrap file dan semua itu.
 
File utama
Semua file parsial diimpor di sini.
 @import abstracts/variables; @import abstracts/functions; @import base/reset; @import base/typography; @import base/utilities; @import components/button; @import components/form; @import components/user-navigation; @import layout/header; @import layout/footer; … 

Ya, saya akui sedikit membengkak. Tetapi arsitektur ini diciptakan untuk proyek-proyek besar - dan untuk tugas-tugas kecil ada pilihan lain.
Pertama, kami tidak memerlukan folder 
vendors : semua kode CSS eksternal akan berada di tag 
link ditempatkan di header. Juga, folder 
themes tidak diperlukan: kemungkinan besar, aplikasi kecil hanya akan memiliki satu tema. Akhirnya, tidak akan ada gaya untuk halaman tertentu - jadi kami menghapus folder yang sesuai. Jadi, ada empat folder yang tersisa - hebat!
Sekarang kami memiliki dua opsi:
- Jika Anda mengikuti prinsip "7-1", Anda perlu menyimpan folder abstracts,components,layout, danbase.
 
- Jika Anda lebih nyaman bekerja dengan folder besar di mana akan ada semua file parsial dan main.scss, Anda mendapatkan sesuatu seperti ini:
 
 sass/ _animations.scss _base.scss _buttons.scss _header.scss … _variables.scss main.scss 
Terserah kamu.
Saya yakin! Bagaimana cara menerapkan semua ini? Maksud saya, browser tidak mendukung file scss , bukan?Benar diperhatikan! Pada langkah terakhir, kami akan mengkompilasi SCSS ke dalam CSS.
Buat CSS dari SCSS
Kita membutuhkan 
Node.js dan 
NPM (atau 
Yarn ).
Kami akan menggunakan paket 
node-sass , yang memungkinkan kami untuk mengompilasi file 
.scss menjadi 
.css .
Antarmukanya cukup sederhana:
 node-sass <> <> [] 
Kami hanya akan menggunakan dua parameter:
- -w- memantau direktori atau file. Paket- node-sassakan menunggu perubahan dalam kode, dan segera setelah terdeteksi, ia akan segera mengkompilasi file yang sesuai dalam CSS, yang sangat nyaman selama pengembangan.
 
- Parameter --output-style- seperti apa tampilan file CSS. Itu dapat mengambil nilai-nilai berikut:nested|expanded|compact|compressed. Kami akan menggunakan opsi ini ketika membangun file CSS.
 
Jika Anda penasaran (saya harap begitu: pengembang harus penasaran!), Dokumentasi lengkapnya ada di 
sini .
Sekarang kita tahu alat apa yang akan digunakan. Sisanya bahkan lebih mudah dilakukan:
- Membuat proyek: mkdir my-app && cd my-app
 
- Inisialisasi: npm init
 
- Tambahkan node-sass:npm install node-sass --save-dev
 
- Buat file folder, index.htmldanmain.scss:
 
 touch index.html mkdir -p sass/{abstracts,base,components,layout} css cd sass && touch main.scss 
- Tambahkan skrip berikut ke file package.json:
 
 { … "scripts": {  "watch": "node-sass sass/main.scss css/style.css -w",  "build": "node-sass sass/main.scss css/style.css --output-style compressed" }, … } 
- Tambahkan tautan ke file CSS yang dikompilasi ke tag kepala dari file index.html:
 
 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <b><link rel="stylesheet" href="css/style.css"></b> <title>My app</title> </head> <body> <h1 class="heading">My app</h1> </body> </html> 
Itu saja! Saat Anda menulis kode, jalankan 
npm run watch dan buka file 
index.html di browser. Untuk mengurangi CSS, cukup jalankan 
npm run build .
Sesuatu yang lain
Reboot dengan cepat
Agar dapat berdebat dengan lebih baik, Anda dapat menambahkan ulang secara otomatis file 
index.html lokal.
Untuk melakukan ini, lakukan ini:
- Instal paket live-server:npm install -g live-server
 Catatan: Ini adalah paket global .
 
- Tambahkan npm-run-alltergantung pada proyeknya:npm install npm-run-all --save-dev- ini memungkinkan Anda untuk menjalankan beberapa skrip pada saat bersamaan.
 
- Tambahkan skrip berikut ke package.json:
 
 { … "scripts": { <b>   "start": "npm-run-all --parallel liveserver watch",  "liveserver": "live-server",</b>  "watch": "node-sass sass/main.scss css/style.css -w", }, … } 
Sekarang, jika Anda mulai 
npm run start mulai 
npm run start , perubahan akan segera ditampilkan - tanpa gerakan yang tidak perlu pada bagian Anda.
Awalan Otomatis
Kami menyiapkan alat pengembangan - hebat! Sekarang mari kita bicara tentang alat membangun, khususnya - tentang ini: 
Autoprefixer .
Alat ini (atau lebih tepatnya, plugin postcss) mem-parsing CSS dan menambahkan awalan vendor ke aturan CSS menggunakan nilai dari 
Can I Use .
Saat membuat situs web, fitur baru dapat digunakan yang tidak didukung di semua browser. Memberikan dukungan untuk fungsi-fungsi tersebut memungkinkan awalan vendor.
Contoh tampilannya:
 -webkit-animation-name: myAnimation; -moz-animation-name: myAnimation; -ms-animation-name: myAnimation; 
Ya, menulis dengan tangan itu membosankan. Mempermudah hidup kami adalah alat untuk menambahkan awalan secara otomatis yang akan membuat kode CSS kompatibel dengan peramban tanpa upaya ekstra.
Jadi, untuk mengkompilasi CSS:
- Kami mengkompilasi semua file SCSS menjadi satu file CSS.
 
- Tambahkan awalan menggunakan Autoprefixer.
 
- Kompres file CSS.
 
Tidak ada yang tersisa - jangan beralih saluran.
- Tambahkan dua dependensi - postcss-clidanautoprefixer:npm install autoprefixer postcss-cli --save-dev
 
- Kami memodifikasi skrip builddan menambahkan baris ini kepackage.json:
 
 { … "scripts": {  "start": "npm-run-all --parallel liveserver watch",  "liveserver": "live-server",  "watch": "node-sass sass/main.scss css/style.css -w", <b>   "compile": "node-sass sass/main.scss css/style.css",  "prefix": "postcss css/style.css --use autoprefixer -o css/style.css",  "compress": "node-sass css/style.css css/style.css --output-style compressed",  "build": "npm-run-all compile prefix compress"</b> … } 
Sekarang ketika Anda mulai 
npm run build , awalan penyedia akan ditambahkan, 
dan kode CSS itu sendiri akan dikompresi. Hanya sulap!
Apakah Anda ingin lebih banyak sihir? Saya mengangkat 
repositori - sehingga Anda dapat mengetahuinya lebih cepat?
Jika Anda tertarik pada bagaimana saya menerapkan keterampilan ini ke halaman portofolio saya, lihat 
repositori ini dan nikmati 
hasilnya . Saya harap contoh-contoh ini akan membantu untuk lebih memahami apa yang dibahas dalam artikel ini.
Dan ... itu saja untuk hari ini! 
Sekarang Anda dapat menulis kode CSS modular yang didukung dan dapat digunakan kembali. Tentang penerjemah
Tentang penerjemahArtikel ini diterjemahkan oleh Alconost.
Alconost 
melokalkan game , 
aplikasi , 
dan situs dalam 68 bahasa. Penerjemah asli bahasa, pengujian linguistik, platform cloud dengan API, pelokalan berkelanjutan, manajer proyek 24/7, segala format sumber daya string.
Kami juga membuat 
video iklan dan pelatihan - untuk situs yang menjual, gambar, iklan, pelatihan, permainan asah, penjelajah, trailer untuk Google Play dan App Store.
Lebih detail