I-CSS ngokuvamile ibonakale ngexesha elifanayo. Ukukhangisa ngonyaka elandelayo, xa i-system iyasetyenziswa ngokwenene kwaye ukuguqulwa nayiphi na ingxaki. I-Styles ihamba ngokufanelekileyo. Uya kufumana i-DevTools, uqhagamshelane ngeengxaki, kwaye uyakwazi ukufumana ukuba into isebenza ngokufanelekileyo. I-Refactoring ibonelela ngokufanelekileyo kunye ne-time-consuming, ngoko ufake i-override elinye nje ukunciphisa i-ticket. I-CSS ye-bad is not only ugly, it is expensive. It is the reason simple UI updates take three days instead of three minutes. I-CSS ye-bad is not only ugly, it is expensive. It is the reason simple UI updates take three days instead of three minutes. ikhowudi isebenza . Ngaphezulu Izixhobo ezininzi. Izixhobo ezininzi. Izixhobo ezininzi ziye ziye zithunywe ngokushesha kwaye ezininzi ezininzi ezininzi ezininzi. Intshayelelo le nqaku malunga neengxaki kunye neengxaki yokuvimbela. Akukho ngeengxaki okanye izixhobo, kodwa ngeengxaki ezincinane zithembisa i-CSS elula, elula, kunye neengxaki ezintsha njengoko iiprojekthi ivula. Yintoni iingxaki ndingathanda ukuba ndingathanda ngokukhawuleza. 1. Ukuqala ne-CSS yinto ingxaki yokuqala Ndiyazi le nqaku kuxhomekeke kwi-CSS, kodwa omnye iingxaki ezininzi ezininzi iingxaki ezibonakalayo iingxowa kwi-task kunye nokwakha yonke into ngexesha elinye. I-Styles, i-JavaScript, i-Marking, i-Early Abstractions. Ngokuvamile, zifumaneke ngexesha elidlulileyo okanye ngexesha elidlulileyo. Ndifumene. I-CSS ihamba ngenxa yokuba i-touchable. Uyakwazi ukufumana imiphumela ngqo. I-CSS iyona elungileyo, i-pause, i-slowdown kunye ne-start with the markup. Ukuba utshintshe isicelo epheleleyo, utshintshe nge-shell ye-page. Izixhobo, i-heading hierarchy, iinkcukacha eziphambili. Ukusebenza kwi-think yokuqala. Funda le sayithi ukuya ekupheleni. Yintoni i-sense? Khetha kuphela kwi-styles xa ivela. Ukuba usebenza kwi-function emininzi, lo mfuneko efanayo isetyenziselwa. Qhagamshelana lokuqala kunye nokufumana njani kwi-app. Ngaba ama-tags ziyafumaneka kwi-intent? Uyaziqhelekanga i-heading emgqeni? Ukusuka nge-markup uyanikeza ukuba uthetha malunga ne-intention, akukwazi ukufikelela. Uyakwazi ukufikelela into Ukungabonakali ukuba Ngokusetyenziswa kwe-HTML-first, unokufuneka isakhiwo, umzekelo, kunye neengxaki ezininzi ezinikezela inkqubo ngokucacileyo kwaye zibonakalayo. Yintoni Ukubala CSS should adapt to that, not the other way around. Xa uqhagamshelane kwi-styling, ungenza ukwakha i-markup malunga neengxaki ze-visual. I-emballers ezininzi. I-tags ezikhoyo. Ngokuvamile unako ukufika ngeengxaki okulungileyo kodwa ingxaki semantically, okanye engabikho ukuvelisa. Ukucinga Ngokusetyenziswa kwe-markup kuqala, uya kufutshane kwi-foundation enzima. Ukusetyenziswa kwe-accessibility, i-document outline, i-keyboard flow, kunye ne-content hierarchy ziyafumaneka ngokukhawuleza. Ukusetyenziswa kwe-styling kunokuba yi-additive kunokuba yi-corrective. Kwakhona ukunciphisa kwindlela elungileyo. Uyakwazi ukufumana iingxaki zangaphakathi ngokushesha. Uyakwazi ukufumana apho iingxaki zangaphakathi. Uyakwazi ukuchithwa kwezinye izixazululo zokusebenza. Ngokutsho, i-HTML-first inikeza yonke into elinye. 2. Xa i-CSS inikeza ngaphezulu kunokwenzeka Enye ingxaki ezininzi iye ndingathanda kwi-code reviews yenza i-juniors , ngokuvamile ngaphandle kokufumana. Nceda nqakraza ezinye izibonelo ezincinane. Ngaphezulu Ingaba ufuna ukuyifaka i-content column kwi-horizontal: .entry-content { max-inline-size: 48rem; margin: 0 auto; /* ❌ Avoid this! */ } Yenziwe ububanzi max kunye nokuphucula i-element ngokusebenzisa i-auto margins. Nangona kunjalo, into engathanda ukuba ungathanda ukuba unako ukucacisa i-top kunye ne-bottom margins kwi-zero. Ukuba oku kuthetha, kakuhle. Kwiimeko ezininzi, ayikho. Kwiminyaka emininzi i-abbreviation isetyenziswa nje ngenxa yokuba i-shorter. Yintoni ungayifunayo ngexesha elandelayo: .entry-content { max-inline-size: 48rem; margin-inline: auto; /* ✅ Do this */ } Imiphumo efanayo. Akukho imiphumo emibi. Indawo engaphezulu. Umzekelo Olandelayo: .button--secondary { background: var(--color--dark-gray); } Oku kwenziwa i-background color usebenzisa i- isakhiwo esifanelekileyo. Kodwa kunceda ukuguqulwa kwezinye izakhiwo ezinxulumene nephondo. --color--dark-gray Okuninzi kakhulu, ngokwenene: background-image → akukho ubungakanani → 0% 0% background-size → imoto background-repeat → ukuguqulwa background-origin → i-padding-box background-clip → border-box background-attachment → scroll Kwimeko ezininzi, nto leyo akufunayo. Oku kungenziwa kalula kwimiphumo emibi ezinzima ukuba kufuneka uqhagamshelane emva koko. Yintoni ungayifunayo ngexesha elandelayo. .button--secondary { background-color: var(--color--dark-gray); } Umqondo efanayo ngexesha elandelayo. Kodwa i-chirurgical. Ukuguqulwa kuphela into efanelekileyo yokuguqulwa. Kwakhona, ngaphezulu kweempawu. inkqubo efanayo ifumaneka kwiimveliso ezininzi ezininzi, ezifana Ukucinga Ukucinga Ukucinga , kunye nabanye. Qinisekisa xa usebenzisa ukuba shorthands. Noma ukunceda ukusetyenziswa shorthands ngokupheleleyo. border transform transition font Umzekelo olusetyenzisiweyo yokwenza kakhulu kubalulekileyo ngokukhawuleza kakhulu. Qinisekisa le nkqubo: a { text-decoration: none; background-image:linear-gradient(to right, currentColor, currentColor); background-position:0%100%; background-repeat: no-repeat; background-size:100%2px; transition: background-size 0.3s; &:hover, &:focus-visible { background-position:100%100%; } } I-snippet yongeza i-underline ye-animated kwi-links. Indawo yokuba akukho bonke I-tag yi-text link. Iifoto ziquka i-links. I-avatar ye-profile ingaba i-links. I-buttons ziquka ngokuba yi-anchors. <a> Emva koko, le style "intelligent" yehlabathi yongeza iinjini ezinzulu ze-2px phantsi kwe-logo yakho okanye ukutshintsha i-gradients ye-background kwi-button yakho yokuqala. Ngoku, uya kuthatha ixesha elinye leprojekthi ukuxhaswa kwe-cascade, ubhalisa i-undo ye-styles ye-non-text ye-link esebenzayo. Ngaphandle kokuba ukuguqulwa, ngoko ke. visual debt Uyakwazi ukucacisa oku kwiindlela ezininzi. Enye ingqalelo ukucacisa izixhumanisi ze-text kwi-content. .entry-content:is(h1, h2, h3, h4, h5, h6, p, li) > a { /* styles here */ } Kodwa nangona kunjalo, ingaba ingaba ingaba ingaba ingaba ingaba ingaba ingaba ingaba ingaba ingaba ingaba ingaba ingaba ingaba ingaba ingaba ingaba ingaba ingaba ingaba ingaba ingaba ingaba ingaba ingaba ingaba ingaba ingaba. Umgangatho yami elidumileyo i-class utility. .has-animated-underline { /* styles here */ } Xa uqhagamshelane oku kwi-class, unayo isebenziswano I-Explicit, i-Intentional, kwaye – okungenani kakhulu – ayidinga ukuba utshintshe izinto ezikhoyo ziye zithintela ekuqaleni. opt-in rather than opt-out 3. Xa mobile kuyinto afterthought Iwebhu yewebhu ye-mobile i-desktop yehlabathi ngo-2016 - malunga unyaka we-10 edlulileyo. Nangona kunjalo, ndiyabakhokela abathengi abasebenzise ixesha lokwenene kwi-desktop comps kunye nokuvumela umsebenzi kwi-desktop-ngokuqala, kunye ne-mobile ilawulwa njenge-version elula ye-desktop. Yintoni ndiya kuba phantsi. Uthanda okanye akukho, thina ukufumana i-internet ngokusebenzisa i-telephone yokuqala. Oku kunokufutshane kwakhona, kodwa oku kwimveliso namhlanje. Umgangatho we-build for the web kufuneka ibonise oku. Kwiimeko, ngoko ndiya kuxhomekeke kwi-styling ngoku: Yenza i-markup (ukuba uqhagamshelane ngayo 😉). Ukulungiselela i-browser kwi-400px kunye nokufanisa i-app okanye i-function njengoko i-desktop ayikho. Emva kokuba usebenza kwi-mobile, ukuguqula i-browser kwi-desktop kunye nokwenza i-pass yesibini kwi-stiles. Ukusebenza ngokufanelekileyo ngexesha le-80% (i-random number ebonakalayo) kuba kwindawo yokwenza iiprojekthi yakho efanelekileyo kwaye ifanelekileyo kwi-screens ezincinane. Yinto organically ivumela kwimveliso mobile-first. Xa ndiza ukuvelisa iwebhu, iingcebiso zeemidiyeli ezininzi into. Siye kwenza iwebhu kwiifowuni. I-desktop-only universe. Emva koko i-iPhone yaba, kwaye i-media queries yaye yindlela yokuqala yeengxaki ze-responsive. Inani lwezixhobo ezinokufanelekileyo kwi-web yaba kufumaneka, ngoko unako ukufumana kunye nenkcubeko emangalisayo: /* phones */ @media (max-width: 480px) {} /* large phones and small tablets */ @media (max-width: 767px) {} /* tablets */ @media (min-width: 768px) and (max-width: 1024px) {} /* desktop */ @media (min-width: 1025px) {} Qinisekisa ukuba akukho mobile-first. No Umgangatho min-width Kwimeko ezininzi. Kukho izixhobo ezininzi kunye ne-screen sizes ukuba zibonise ukusetyenziswa kwe-breakpoints kuphela. Kwixesha elininzi iingcebiso ezininzi zihlanganisa kwi-tools ezihambelana ngokwemvelo kwinqanaba jikelele. Umzekelo: izicathulo intrinsic nge Grid okanye Flexbox Iimpawu ze-fluid usebenzisa i-clamp() ngenxa yeefonts, i-spacing, kunye ne-dimensions Iingxowa ze-Containers Iingxaki ze-media ziyafumaneka, kodwa ayidinga ukuba ziyafumaneka ngetyala yokuqala. Ukuba i-layout isebenza kuphela ngenxa yeengxaki, kunokwenzeka ukuba i-rigidity kakhulu. Xa isebenza ngaphandle kweengxaki, iingxaki ze-media ziye ziye zihlanganisa ezincinane, ngokufanelekileyo kwi-responsive structure, ngaphandle kwe-foundation. I-Fighting the Cascade Ngaphandle Ukusetyenziswa Yinto enye indawo apho ndingathanda ukuba iingcali ezihlabathi. Iinkqubo ezininzi ze-CSS kunye nezisombululo ziye ziye zithembisa iinkcukacha ezininzi: i-cascade. Kwaye ndingathanda ukuba yintoni. Ukuba usuka kwi-CSS ngaphandle kokufanelekileyo kakhulu, kunokufumana i-chaotic. Ngaba uqhagamshelane umgaqo kwaye akukho nto. Uya kubhalwe kwaye ngoko ke kukho into olungapheliyo. Ngaphezu kwalokho, i-user agent style sheet ikwenza into yayo elilodwa kwi-background. I-CSS iyiphi na ingxaki ezininzi. Kwi-JavaScript, unako ukuvelisa i-module kwaye akukho ingxaki. Iingxaki ziyafumaneka kwi-module. Uyakwazi ukufumana i-CSS ngexesha elifanayo. Ukuba usebenzise, uya kukuthanda kakhulu kwi-face. Yonke ukuguqulwa kwe-CSS ivela kwiinkalo ezimbini ngexesha elinye: into olufanelekileyo kunye ne-system eyahlukileyo. Ukuguqulwa kwimeko yokuqala, ungenza nje ukuyifaka oku: a { text-decoration: none; background-image:linear-gradient(to right, currentColor, currentColor); background-position:0%100%; background-repeat: no-repeat; background-size:100%2px; transition: background-size 0.3s; &:hover, &:focus-visible { background-position:100%100%; } } Ukuba uye, oku kusetyenzisa izakhiwo ezinxulumene nephondo zonke i-anchor kwi sayithi, nangona le i-anchor ayikho i-text link. Kwiminyaka emininzi, ke akukho nto ufuna. Iingcali abaninzi bafundisa oku ngempumelelo kunye nokuphendula ngokugqithisa i-cascade ngokupheleleyo, njenge-touching isikhwama eshushu ngexesha lokuzalwa kunye nokufunda ukuba awukwazi ukwenza oku kwakhona. Ndingathanda ukuba ingxaki, ngenxa yokuba kuholisa kakhulu imibuzo. Nazi umzekelo kwiprojekthi omtsha ngexesha elidlulileyo. Kukho mixin: @define-mixin focus-state { &:focus-visible { outline: var(--outline--color) var(--outline--style) var(--outline--width); outline-offset: var(--outline--offset); } } Emva koko iye ifumaneka kwiinkalo ezininzi: .button { @mixin focus-state; } a { @mixin focus-state; } .pagination-link { @mixin focus-state; } ... kwaye ngoko. I-Focus outlines kufuneka ziyafumaneka ngokuhambelana kwiprojekthi, ngaphandle kwezinye iziphumo ezincinane. Kwi-setup, zonke iingcingo ze-mixin zibonise i-CSS efanayo nangokuthi kwakhona. Umgangatho elungileyo kunzima ukuba uqhagamshelane kwi-cascade kunye nokufuneka kwimeko yehlabathi: :focus-visible { outline-color:var(--outline--color); outline-offset:var(--outline--offset); outline-style:var(--outline--style); outline-width:var(--outline--width); } Ngoku zonke iimpawu ezifumana i-focus emangalisayo iyafumaneka i-styling efanayo ngokufanelekileyo. Kwimeko ezincinane apho into kufuneka ziyafumaneka, ungenza lokugqibela: .pagination-link { --outline--offset: -2px; } Yintoni nto. Simple, Compact, and Predictable. Iimpawu efanayo ifumaneka kwimeko efana Ukucinga iimveliso zeMargin, , kunye nezinye i-styles ezininzi ziye kufuneka zihlale ngokuqhelekileyo kwi-app. box-sizing ::selection text-wrap Ukubuyekeza ngokushesha kusiza apha. If a style looks ngokufanelekileyo ngalinye iingxaki, kunye iimeko, kunokuba kuquka kwi-global style yakho. exactly very few Ngaba ushiye i-cascade. Sebenzisa kwimveliso yakho. I-Specific is where things continue to fall apart. I-Specific is where things continue to fall apart. Oku kubandakanya i- "Ndibandeki i-CSS yam, kodwa ayisebenzi." Ndingathanda ukufikelela ngokubanzi into efanayo. MDN xa Yintoni oku kubalulekile apha i-specificity ephakamileyo iyiphi na isisombululo esikhulu esebenzayo ngexesha lokusebenza kunye neebhizinisi ze-third-party okanye i-code ye-other's. Yenza oku ngokwenene Nceda usebenzise lo mveliso: .layout > :not(.alignleft):not(.alignright):not(.alignfull):not(.alignwide) { max-width: var(--content-width); margin-left: auto; margin-right: auto; } Ngiya kuthatha iziphumo ezininzi ezininzi horizontally kwaye usetyenzise max ububanzi - bonke abantwana ngaphandle Ukucinga Ukucinga Yaye . .layout alignleft alignright alignfull alignwide Kukho izizathu ezimbini ezininzi le code emangalisayo. Okokuqala, oku umzobo we-blacklist. Thina usebenzise yonke into inkcazelo olwandle. Iingxaki yinto ukuba "ke konke" uvavanyo njalo ngexesha. Njengoko inkcazelo olwandle, uya kufaka ngokwenene ukongeza iziphumo ezininzi. Enye ngosuku uya kufumanisa ukongeza, kwaye into uya kukutshala. Ngaphandle Okunye, zonke i-selector ezisa kubandakanya i-specificity. I-snippet ephakamileyo Yintoni, ukunyaniseka kufuneka i-selector eninzi, Ukucinga okanye ukucacisa yonke into Ngokutsho, ukuguqulwa kwe-complexity nge-complexity engaphezulu. 0.5.0 !important @layer :where() I-WordPress isibonelo esihle yokuqala ngaphandle kwe-CSS architecture kunye nokugqibela kunye ne-chaos. Nazi i-snippet esifanayo kakhulu ukusuka kwi-core: body .is-layout-constrained > :where(:not(.alignleft):not(.alignright):not(.alignfull)) { max-width: var(--wp--style--global--content-size); margin-left: auto !important; margin-right: auto !important; } Ndifumana iingcingo ezahlukileyo apha. Thina siphindezisa nathi pattern, baye ndingathanda ukuba i-idea embalwa, kwakhona , yaye emva ... ifakwe Yintoni ndingathanda ukuba kukho isizathu, kodwa umntu ... ayikho nto yokuthintela. :not() :where() !important Ngaba unako ukwenza yonke into... ... okanye unokufuneka i-intentional kunye nokuthengiswa kwe-pace: /* 0.1.0 */ .layout > * { max-width: var(--content-width); margin-left: auto; margin-right: auto; } /* 0.2.0 */ .layout > .alignleft, .layout > .alignright { --content-width: var(--content-width--narrow); } /* 0.2.0 */ .layout > .alignwide { --content-width: var(--content-width--wide); } /* 0.2.0 */ .layout > .alignfull { --content-width: var(--content-width--full); } Yinto kulula ukufumana kwaye kulula ukucacisa. Isiseko esisiseko Iingxaki ziquka . 0.1.0 0.2.0 Ngokuqhelekanga kunye nenkqubo. Nazi enye indlela elandelayo ukuvelisa ngokufanelekileyo ngaphandle kokufanelekileyo: /* ❌ combine element with a class ❌ element nested inside the block ❌ modifier nested inside the block */ a.button { &.button__label {...} &.button--secondary {...} } Kule isibonelo: Ukuba akukho isizathu yokuxhuma i-a kunye ne-.button, akukho nto. Ukuba akukho isizathu yokufaka i-.button__label phantsi kwe-.button, akukho. Kwakhona kulungile kwi-modifier classes. Ukuba utshintshe i-component esitsha, oku kufuneka ngokuvamile: /* ✅ no element + class combination ✅ elements and modifiers stay flat */ .button {...} .button__icon {...} .button--primary {...} Nazi umgaqo we-tomb iye ndiyabandakanyeka: Prefer a single class selector ngokufanelekileyo. Ukusetyenziswa kweVariations ye-Utility ngaphandle kokufaka i-selectors. Ukusetyenziswa kwe-Source uya kukunceda apha. Yenza i-specificity kwi-0.01.0 okanye i-01.01. Musa ukufikelela ngaphezu kwe-0.0.0 kwizixhobo eziqhutywa. Ukukhangisa i-#id selectors kunye ne-inline styles kwi-app code. Zibonisa i-specificity kunye ne-pick-up. Ukusebenzisa i-specificity ephakeme kuphela xa utshintshe i-third-party okanye i-legacy code enokukwazi refactor. Ukucinga Ukucinga Yaye :where() @layer @scope Ndingathanda ngokupheleleyo ezi zixhobo. Uyakwazi ukunciphisa i-specificity kwi-zero nge , i-isolate styles kunye , kwaye i-scope selectors kunye . :where() @layer @scope Zizinto ezininzi, kwaye ziyafumaneka kwindawo zabo. Kodwa akufanele ukuguqulwa kwe-architecture embalwa. Zonke iinkcukacha ze-specificity zikhuselekileyo zikhuselekileyo kwindawo zokusetyenziswa kwindawo zokusetyenziswa. Nceda uqhagamshelane nawe. I-self yakho elandelayo uya kukukhusela.