Saya merasa bodoh karena telah menjadi programmer web begitu lama dan tidak mengetahui jawaban untuk pertanyaan ini, saya benar-benar berharap itu mungkin dan saya hanya tidak tahu tentang daripada apa yang saya pikir jawabannya (yaitu bahwa itu tidak mungkin) .
Pertanyaan saya adalah apakah mungkin membuat kelas CSS yang "mewarisi" dari kelas CSS lain (atau lebih dari satu).
Misalnya, katakan kita punya:
.something { display:inline }
.else { background:red }
Yang ingin saya lakukan adalah sesuatu seperti ini:
.composite
{
.something;
.else
}
di mana kelas ".composite" akan menampilkan inline dan memiliki latar belakang merah
Jawaban:
Ada alat-alat seperti KURANG , yang memungkinkan Anda untuk menyusun CSS pada tingkat abstraksi yang lebih tinggi seperti yang Anda gambarkan.
Lebih sedikit menyebut "Mixin" ini
Dari pada
Anda bisa mengatakan
sumber
Anda dapat menambahkan beberapa kelas ke elemen DOM tunggal, misalnya
Aturan yang diberikan di kelas selanjutnya (atau yang lebih spesifik) menimpanya. Jadi
fourthclass
dalam contoh itu jenis menang.Warisan bukan bagian dari standar CSS.
sumber
.firstClass {font-size:12px;} .secondClass {font-size:20px;}
kemudian akhirfont-size
menjadi12px
atau20px
dan browser yang aman lintas ini?Ya, tetapi tidak persis dengan sintaks itu.
sumber
Menyatukan atribut umum Anda dan menetapkan atribut spesifik (atau menimpa) lagi.
sumber
h1, h2, etc
Anda bisa menentukan.selector1, .selector2, .etc
Suatu elemen dapat mengambil beberapa kelas:
Dan itu sedekat yang Anda dapatkan sayangnya. Saya akan senang melihat fitur ini, bersama dengan alias kelas lain suatu hari nanti.
sumber
Tidak, Anda tidak dapat melakukan sesuatu seperti
Ini bukan nama "kelas" dalam arti OO.
.something
dan.else
hanya penyeleksi tidak lebih.Tapi Anda bisa menentukan dua kelas pada suatu elemen
atau Anda mungkin melihat ke bentuk warisan lain
Di mana paragraf backgroundcolor dan warna diwariskan dari pengaturan di div terlampir yang
.foo
ditata. Anda mungkin harus memeriksa spesifikasi W3C yang tepat.inherit
standar untuk sebagian besar properti, tetapi tidak untuk semua.sumber
Saya mengalami masalah yang sama dan akhirnya menggunakan solusi JQuery untuk membuatnya tampak seperti kelas dapat mewarisi kelas lain.
Ini akan menemukan semua elemen dengan kelas "komposit" dan menambahkan kelas "sesuatu" dan "lain" ke elemen. Jadi sesuatu seperti
<div class="composite">...</div>
akan berakhir seperti:<div class="composite something else">...</div>
sumber
Cara SCSS untuk contoh yang diberikan, akan menjadi sesuatu seperti:
Info lebih lanjut, periksa dasar-dasar sass
sumber
.composite,.something { display:inline }
dan.composite,.else { background:red }
.something
dan.else
dalam definisi css lain.Yang terbaik yang dapat Anda lakukan adalah ini
CSS
HTML
sumber
Jangan lupa:
sumber
Dalam file Css:
sumber
font-size
?font-size: 16px
tidak pernah bisa berlaku, kan?12px
.Saya menyadari pertanyaan ini sekarang sudah sangat tua, tetapi tidak apa-apa!
Jika maksudnya adalah untuk menambahkan kelas tunggal yang menyiratkan properti dari beberapa kelas, sebagai solusi asli, saya akan merekomendasikan menggunakan JavaScript / jQuery (jQuery benar-benar tidak perlu tetapi tentu berguna)
Jika sudah, misalnya
.umbrellaClass
yang "mewarisi" dari.baseClass1
dan.baseClass2
Anda bisa memiliki JavaScript yang siap menyala.Sekarang semua elemen
.umbrellaClass
akan memiliki semua properti dari keduanya.baseClass
. Perhatikan bahwa, seperti warisan OOP,.umbrellaClass
mungkin atau mungkin tidak memiliki propertinya sendiri.Satu-satunya peringatan di sini adalah untuk mempertimbangkan apakah ada elemen yang dibuat secara dinamis yang tidak akan ada ketika kode ini diaktifkan, tetapi ada juga cara-cara sederhana untuk melakukannya.
Sucks css tidak memiliki warisan asli.
sumber
Waktu yang tepat : Saya beralih dari pertanyaan ini ke email saya, untuk menemukan artikel tentang Less , pustaka Ruby yang antara lain melakukan ini:
Karena
super
terlihat sepertifooter
, tetapi dengan font yang berbeda, saya akan menggunakan teknik inklusi kelas Less (mereka menyebutnya mixin) untuk mengatakannya untuk menyertakan deklarasi ini juga:sumber
Sayangnya, CSS tidak menyediakan 'warisan' seperti bahasa pemrograman seperti C ++, C # atau Java. Anda tidak dapat mendeklarasikan kelas CSS dan kemudian memperluasnya dengan kelas CSS lain.
Namun, Anda dapat menerapkan lebih dari satu kelas pada tag di markup Anda ... dalam hal ini ada seperangkat aturan canggih yang menentukan gaya aktual mana yang akan diterapkan oleh browser.
CSS akan mencari semua gaya yang dapat diterapkan berdasarkan apa markup Anda, dan menggabungkan gaya CSS dari beberapa aturan bersama.
Biasanya, gaya digabungkan, tetapi ketika konflik muncul, gaya dinyatakan kemudian umumnya akan menang (kecuali atribut! Penting ditentukan pada salah satu gaya, dalam hal ini yang menang). Selain itu, gaya yang diterapkan secara langsung ke elemen HTML lebih diutamakan daripada gaya kelas CSS.
sumber
Ada juga SASS, yang dapat Anda temukan di http://sass-lang.com/ . Ada tag @extend, serta sistem tipe campuran. (Rubi)
Ini semacam pesaing bagi KURANG.
sumber
Itu tidak mungkin di CSS.
Satu-satunya hal yang didukung dalam CSS menjadi lebih spesifik daripada aturan lain:
Rentang dengan kelas "myclass" akan memiliki kedua properti.
Cara lain adalah dengan menentukan dua kelas:
Gaya "lain" akan menggantikan (atau menambah) gaya "sesuatu"
sumber
Anda dapat menerapkan lebih dari satu kelas CSS ke elemen dengan sesuatu seperti kelas ini = "sesuatu yang lain"
sumber
Seperti yang dikatakan orang lain, Anda bisa menambahkan beberapa kelas ke suatu elemen.
Tapi bukan itu intinya. Saya mendapatkan pertanyaan Anda tentang warisan. Poin sebenarnya adalah bahwa pewarisan dalam CSS dilakukan bukan melalui kelas, tetapi melalui hierarki elemen. Jadi untuk memodelkan sifat-sifat bawaan Anda perlu menerapkannya ke berbagai tingkat elemen dalam DOM.
sumber
Saya mencari itu seperti orang gila juga dan saya baru saja mengetahuinya dengan mencoba hal-hal yang berbeda: P ... Anda dapat melakukannya seperti itu:
Tiba-tiba bekerja untuk saya :)
sumber
Dalam keadaan tertentu Anda dapat melakukan warisan "lunak":
Ini hanya berfungsi jika Anda menambahkan kelas .composite ke elemen turunan. Ini adalah warisan "lunak" karena nilai apa pun yang tidak ditentukan dalam .komposit tidak diwariskan secara jelas. Ingatlah bahwa karakter yang masih kurang untuk hanya menulis "inline" dan "red" bukannya "inherit".
Berikut adalah daftar properti dan apakah mereka melakukannya secara otomatis: https://www.w3.org/TR/CSS21/propidx.html
sumber
Sementara pewarisan langsung tidak mungkin.
Dimungkinkan untuk menggunakan kelas (atau id) untuk tag induk dan kemudian menggunakan kombinator CSS untuk mengubah perilaku tag anak dari heirarki itu.
Saya tidak akan menyarankan menggunakan banyak bentang seperti contoh, namun itu hanya bukti konsep. Masih ada banyak bug yang dapat muncul ketika mencoba menerapkan CSS dengan cara ini. (Misalnya mengubah jenis dekorasi teks).
sumber
Less dan Sass adalah pra-prosesor CSS yang memperluas bahasa CSS dengan cara yang berharga. Hanya satu dari banyak perbaikan yang mereka tawarkan hanyalah opsi yang Anda cari. Ada beberapa jawaban yang sangat bagus dengan Less dan saya akan menambahkan solusi Sass.
Sass memiliki opsi perpanjangan yang memungkinkan satu kelas diperluas sepenuhnya ke kelas lainnya. Lebih lanjut tentang perpanjangan Anda dapat membaca di artikel ini
sumber
Sebenarnya apa yang Anda minta ada - namun itu dilakukan sebagai modul tambahan. Lihatlah pertanyaan ini tentang CSS yang Lebih Baik di .NET untuk contoh.
Lihat jawaban Larsenal tentang menggunakan KURANG untuk mendapatkan ide tentang apa yang dilakukan pengaya ini.
sumber
CSS tidak benar - benar melakukan apa yang Anda minta. Jika Anda ingin menulis aturan dengan ide komposit itu dalam pikiran, Anda mungkin ingin memeriksa kompas . Ini kerangka kerja stylesheet yang terlihat mirip dengan Less yang telah disebutkan.
Ini memungkinkan Anda melakukan mixin dan semua bisnis yang baik itu.
sumber
Bagi mereka yang tidak puas dengan posting yang disebutkan (sangat baik), Anda dapat menggunakan keterampilan pemrograman Anda untuk membuat variabel (PHP atau yang mana saja) dan membuatnya menyimpan beberapa nama kelas.
Itu hack terbaik yang bisa saya buat.
Kemudian terapkan variabel global ke elemen yang Anda inginkan daripada nama kelas itu sendiri
sumber
Lihatlah susunan CSS : https://bambielli.com/til/2017-08-11-css-modules-composes/
Menurut mereka:
Saya menggunakannya dalam proyek reaksi saya.
sumber
Jangan menganggap kelas css sebagai kelas berorientasi objek, anggaplah mereka hanya sebagai alat di antara penyeleksi lainnya untuk menentukan kelas atribut mana yang ditata oleh elemen html. Pikirkan segala sesuatu di antara kawat gigi sebagai kelas atribut , dan penyeleksi di sebelah kiri memberi tahu elemen yang mereka pilih untuk mewarisi atribut dari kelas atribut . Contoh:
Ketika unsur diberikan atribut
class="foo"
, hal ini berguna untuk memikirkan itu tidak mewarisi atribut dari kelas.foo
, tapi dari atribut kelas A dan kelas atribut B . Yaitu, grafik warisan adalah satu tingkat dalam, dengan elemen yang berasal dari kelas atribut , dan penyeleksi menentukan kemana tepi pergi, dan menentukan prioritas ketika ada atribut yang bersaing (mirip dengan urutan resolusi metode).Implikasi praktis untuk pemrograman adalah ini. Katakanlah Anda memiliki style sheet yang diberikan di atas, dan ingin menambahkan kelas baru
.baz
, di mana ia harus samafont-size
dengan.foo
. Solusi naif adalah:Setiap kali saya harus mengetik sesuatu dua kali, saya menjadi sangat marah! Saya tidak hanya harus menulisnya dua kali, tetapi sekarang saya tidak memiliki cara untuk menunjukkan secara terprogram
.foo
dan.baz
seharusnya memiliki yang samafont-size
, dan saya telah menciptakan ketergantungan tersembunyi! Paradigma saya di atas akan menyarankan bahwa saya harus abstrakfont-size
atribut dari atribut class A :Keluhan utama di sini adalah bahwa sekarang aku harus mengetik ulang setiap pemilih dari atribut kelas A lagi untuk menentukan bahwa unsur-unsur mereka harus memilih harus atribut juga mewarisi dari kelas dasar atribut A . Namun, alternatif harus diingat untuk mengedit setiap kelas atribut di mana ada dependensi tersembunyi setiap kali ada perubahan, atau menggunakan alat pihak ketiga. Opsi pertama membuat tawa tertawa, yang kedua membuat saya ingin bunuh diri.
sumber
Jika Anda ingin preprocessor teks yang lebih kuat daripada KURANG, periksa PPWizard:
http://dennisbareis.com/ppwizard.htm
Peringatan situs web benar-benar mengerikan dan ada kurva belajar yang kecil, tetapi itu sempurna untuk membangun kode CSS dan HTML melalui makro. Saya tidak pernah mengerti mengapa lebih banyak web coders tidak menggunakannya.
sumber
Anda dapat mencapai apa yang Anda inginkan jika Anda memproses file .css Anda melalui php. ...
...
sumber