Ի՞նչ է մարկինգների կլանումը և ինչու է այն օգտագործվում:
sobes.tech AI
Պատասխան AI-ից
CSS- ում մագնիսական շեղումները (margin collapsing) մեխանիզմ է, որի ժամանակ երկու կամ ավելի հարևան բլոկային տարրերի ուղղահայե՛ր մագնիսականները չեն գումարվում, այլ միաձուլվում են մեկ մագնիսական, որը հավասար է դրանցից ամենամեծին:
Մագնիսական շեղումը տեղի է ունենում հետևյալ դեպքերում՝
- Հարևան տարրեր: մեկ տարրի
margin-bottom-ը և հաջորդ տարրիmargin-top-ը: - Հայր և առաջին/վերջին երեխա: հայր և նրա առաջին կամ վերջին երեխայի
margin-top-ը կամmargin-bottom-ը։ Դա տեղի է ունենում, եթե նրանց միջև չկա սահման (border), հեռավորություն (padding), inline պարունակություն կամ եթե հայրն չի հանդիսանում flex/grid կոնտեյներ։ - Դատարկ բլոկներ: տարրի
margin-topևmargin-bottom-ը, եթե այն չունի պարունակություն, սահմաններ կամ հեռավորություններ։
Օրինակ՝ հարևան տարրերի դեպքում՝
<div style="margin-bottom: 20px;">Տարր 1</div>
<div style="margin-top: 30px;">Տարր 2</div>
Այս դեպքում տարրերի միջև հեռավորությունը կլինի 30px, ոչ թե 50px։
Օրինակ՝ հայր և առաջին երեխա՝
<div style="margin-top: 40px;">
<div style="margin-top: 30px;">Երեխայի տարր</div>
</div>
Հեռավորությունը վերևի եզրից մինչև պարունակությունը կլինի 40px։
Ինչու է դա օգտագործվում՝
Մագնիսական շեղումները օգնում են պահպանել կանխատեսելի ուղղահայե՛ր հեռավորությունները բլոկների միջև, կանխելով ավելորդ բացթողումները։ Դա հեշտացնում է տիպոգրաֆիկ ուղղահայե՛ր ռիթմի ստեղծումը, քանի որ դիզայներները կարող են անկախ սահմանել մագնիսականները պարբերականների կամ վերնագրերի համար, և բրաուզերը ինքն է հոգ տանում տարածության ճիշտ միավորման մասին։
Ինչպես կանխել՝
- Ավելացնել սահման (
border) տարրերի կամ հայր և երեխա միջև։ - Ավելացնել հեռավորություն (
padding)։ - Օգտագործել
overflowհատկությունը՝ արժեքով, որը տարբերվում էvisible-ից։ - Օգտագործել
float։ - Օգտագործել
absoluteկամfixedդիրեկցիան։ - Փոխարկել տարրերը Flexbox կամ Grid ձևաչափման կոնտեքստում։
- Փոխարկել տարրին inline-block։
/* Նախազգուշացում հայր և երեխա համար */
.parent {
border-top: 1px solid transparent; /* կամ padding-top */
}
/* Նախազգուշացում հարևան տարրերի համար */
.element + .element {
margin-top: 0; /* կամ border-top */
}