පිළිගත් විසඳුම විශිෂ්ට ලෙස ක්රියා කරයි, නමුත් එය ක්රියාත්මක වන්නේ ඇයිද යන්න පිළිබඳ පැහැදිලි කිරීමක් IMO හි නොමැත. පහත උදාහරණය මූලික කරුණු දක්වා තම්බා ඇති අතර වැදගත් CSS අදාළ නොවන මෝස්තර CSS වලින් වෙන් කරයි. ප්රසාද දීමනාවක් ලෙස, CSS ස්ථානගත කිරීම ක්රියාත්මක වන ආකාරය පිළිබඳ සවිස්තරාත්මක පැහැදිලි කිරීමක් ද මම ඇතුළත් කර ඇත්තෙමි.
ටීඑල්ඩීආර්; ඔබ පමණක් කේතය අවශ්ය නම්, බැස අනුචලනය මලකි .
ගැටලුව වන්නේ
දෙක වෙන වෙනම, සහෝදර සහෝදරියන්, අංග පවතින අතර ඉලක්කය (සමග දෙවන අංගය ස්ථානගත කිරීමට idවන infoiඑය පසුගිය අංගයක් (අ සමඟ එක් තුළ දිස්වන පරිදි,) classක navi). HTML ව්යුහය වෙනස් කළ නොහැක.
යෝජිත විසඳුම
අපේක්ෂිත ප්රති result ලය ලබා ගැනීම සඳහා අපි දෙවන මූලද්රව්යය චලනය කිරීමට හෝ ස්ථානගත කිරීමට යන්නෙමු, එය අප අමතනු ඇත, #infoiඑවිට එය අප අමතනු ලබන පළමු අංගය තුළ දිස් .naviවේ. විශේෂයෙන්, අපට #infoiඉහළ දකුණු කෙළවරේ ස්ථානගත වීමට අවශ්යයි .navi.
CSS තනතුරට අවශ්ය දැනුම
මූලද්රව්ය ස්ථානගත කිරීම සඳහා CSS හි ගුණාංග කිහිපයක් ඇත. පෙරනිමියෙන්, සියලු අංග වේ position: static. මෙයින් අදහස් කරන්නේ මූලද්රව්යය එහි අනුපිළිවෙල අනුව HTML ව්යුහය තුළ ස්ථානගත වනු ඇති බවයි.
අනෙක් positionඅගයන් වේ relative, absolute, sticky, සහ fixed. මූලද්රව්යයක් positionමෙම වෙනත් අගයන්ගෙන් එකකට සැකසීමෙන් මූලද්රව්යය ස්ථානගත කිරීම සඳහා පහත සඳහන් ගුණාංග හතරේ සංයෝජනයක් භාවිතා කළ හැකිය:
වෙනත් වචන වලින් කිවහොත්, සැකසීමෙන් position: absolute, top: 100pxපිටුවේ ඉහළ සිට පික්සල් 100 මූලද්රව්යය ස්ථානගත කිරීමට අපට එකතු කළ හැකිය . අනෙක් අතට, අපි bottom: 100pxමූලද්රව්යය සකසන්නේ නම් පිටුවේ පහළ සිට පික්සල් 100 ක් ස්ථානගත වේ.
බොහෝ CSS නවකයින් අතරමං වන ස්ථානය මෙන්න -position: absoluteයොමු රාමුවක් ඇත. ඉහත උදාහරණයේ දී, යොමු රාමුව යනුbodyමූලද්රව්යයයි. position: absoluteසමගtop: 100pxඅදහස් මූලද්රව්යය, මුදුනේ සිට පික්සල 100 ස්ථානගත වී තිබේbodyඅංගයක්.
positionමව් මූලද්රව්යයක හැරුණු විට වෙනත් අගයකටposition: static සැකසීම මගින් ස්ථානීය රාමුව හෝ ස්ථාන සන්දර්භය වෙනස් කළ හැකිය . එනම්, මව් අංගයක් ලබා දීමෙන් අපට නව ස්ථාන සන්දර්භයක් නිර්මාණය කළ හැකිය:
position: relative;
position: absolute;
position: sticky;
position: fixed;
උදාහරණයක් ලෙස, <div class="parent">මූලද්රව්යයක් ලබා දෙන්නේ නම් position: relative, ඕනෑම ළමා අංගයක් <div class="parent">ඒවායේ ස්ථාන සන්දර්භය ලෙස භාවිතා කරයි . ළමා මූලද්රව්යයක් ලබා දී ඇත්නම් position: absoluteසහ top: 100pxමූලද්රව්යය මූලද්රව්යයේ ඉහළ සිට පික්සල් 100 ක් ස්ථානගත කරනු ඇත <div class="parent">, මන්ද <div class="parent">එය දැන් ස්ථාන සන්දර්භයයි.
දැනුවත් විය යුතු අනෙක් සාධකය වන්නේ සිරස් අනුපිළිවෙලයි - නැතහොත් ඉසෙඩ් දිශාවට මූලද්රව්ය ගොඩගැසී ඇති ආකාරයයි. මෙහිදී දැනගත යුතු කරුණ නම් මූලද්රව්යවල සිරස් අනුපිළිවෙල පෙරනිමියෙන් HTML ව්යුහය තුළ ඒවායේ අනුපිළිවෙලෙහි ප්රතිලෝමයෙන් අර්ථ දැක්වීමයි. පහත උදාහරණය සලකා බලන්න:
<body>
<div>Bottom</div>
<div>Top</div>
</body>
මෙම උදාහරණයේ දී, <div>මූලද්රව්ය දෙක පිටුවේ එකම ස්ථානයක ස්ථානගත කර ඇත්නම්, <div>Top</div>මූලද්රව්යය මූලද්රව්යය ආවරණය කරයි <div>Bottom</div>. HTML ව්යුහයෙන් <div>Top</div>පසුව එන බැවින් <div>Bottom</div>එයට ඉහළ සිරස් අනුපිළිවෙලක් ඇත.
div {
position: absolute;
width: 50%;
height: 50%;
}
#bottom {
top: 0;
left: 0;
background-color: blue;
}
#top {
top: 25%;
left: 25%;
background-color: red;
}
<div id="bottom">Bottom</div>
<div id="top">Top</div>
z-indexහෝ orderගුණාංග භාවිතා කරමින් CSS සමඟ ගොඩගැසීමේ අනුපිළිවෙල වෙනස් කළ හැකිය .
මූලද්රව්යවල ස්වාභාවික HTML ව්යුහය යන්නෙන් අපට පෙනී සිටීමට අවශ්ය topමූලද්රව්යය අනෙක් මූලද්රව්යයට පසුව පැමිණෙන බැවින් අපට මෙම නිකුතුවේ සිරස් අනුපිළිවෙල නොසලකා හැරිය හැකිය .
එබැවින්, ඇති ගැටලුව වෙත ආපසු යන්න - මෙම ගැටළුව විසඳීම සඳහා අපි ස්ථාන සන්දර්භය භාවිතා කරමු.
විසඳුම
ඉහත සඳහන් කළ පරිදි, අපගේ ඉලක්කය වන්නේ #infoiමූලද්රව්යය ස්ථානගත කිරීම ය .navi. මෙය සිදු කිරීම සඳහා, අපි නව මූලද්රව්යයක් තුළ .naviසහ #infoiමූලද්රව්යයන් ඔතා, <div class="wrapper">එවිට අපට නව ස්ථාන සන්දර්භයක් නිර්මාණය කළ හැකිය.
<div class="wrapper">
<div class="navi"></div>
<div id="infoi"></div>
</div>
එවිට ලබා දීම මගින් නව තනතුරක් සන්දර්භය නිර්මාණය .wrapperවූ position: relative.
.wrapper {
position: relative;
}
මෙම නව සන්දර්භය තත්ත්වය සමඟ, අපි ස්ථානගත කළ හැක්කේ #infoiතුළ .wrapper. පළමුව, #infoia ලබා දෙන්න position: absolute, අපට #infoiනියත වශයෙන්ම ස්ථානගත වීමට ඉඩ දෙන්න .wrapper.
එවිට එක් top: 0හා right: 0තනතුරට #infoiඉහල දකුණු කෙළවරේ අංගයක්. මතක තබා ගන්න, #infoiමූලද්රව්යය .wrapperඑහි ස්ථාන සන්දර්භය ලෙස භාවිතා කරන නිසා, එය මූලද්රව්යයේ ඉහළ දකුණේ වනු ඇත .wrapper.
#infoi {
position: absolute;
top: 0;
right: 0;
}
මක්නිසාද යත් .wrapperඑය හුදෙක් බහාලුමක් වන නිසා .navi, #infoiඉහළ දකුණු කෙළවරේ .wrapperස්ථානගත කිරීම ඉහළ දකුණු කෙළවරේ ස්ථානගත වීමේ බලපෑම ලබා දෙයි .navi.
එහි අපට එය තිබේ, #infoiදැන් ඉහළ දකුණු කෙළවරේ ඇති බව .naviපෙනේ.
ප්රතිඵලය
පහත උදාහරණය මූලික කරුණු දක්වා තම්බා ඇති අතර අවම මෝස්තර කිහිපයක් අඩංගු වේ.
/*
* position: relative gives a new position context
*/
.wrapper {
position: relative;
}
/*
* The .navi properties are for styling only
* These properties can be changed or removed
*/
.navi {
background-color: #eaeaea;
height: 40px;
}
/*
* Position the #infoi element in the top-right
* of the .wrapper element
*/
#infoi {
position: absolute;
top: 0;
right: 0;
/*
* Styling only, the below can be changed or removed
* depending on your use case
*/
height: 20px;
padding: 10px 10px;
}
<div class="wrapper">
<div class="navi"></div>
<div id="infoi">
<img src="http://via.placeholder.com/32x20/000000/ffffff?text=?" height="20" width="32"/>
</div>
</div>
විකල්ප (ජාලක) විසඳුමක්
මෙන්න ස්ථානගත කිරීම CSS විදුලිබල පද්ධතියට භාවිතා විකල්ප විසඳුමක් තියෙන්නේ .naviසමග අංගයක් #infoiඈත දකුණු අංගයක්. gridහැකිතාක් පැහැදිලි කිරීමට මම වාචික ගුණාංග භාවිතා කර ඇත්තෙමි .
:root {
--columns: 12;
}
/*
* Setup the wrapper as a Grid element, with 12 columns, 1 row
*/
.wrapper {
display: grid;
grid-template-columns: repeat(var(--columns), 1fr);
grid-template-rows: 40px;
}
/*
* Position the .navi element to span all columns
*/
.navi {
grid-column-start: 1;
grid-column-end: span var(--columns);
grid-row-start: 1;
grid-row-end: 2;
/*
* Styling only, the below can be changed or removed
* depending on your use case
*/
background-color: #eaeaea;
}
/*
* Position the #infoi element in the last column, and center it
*/
#infoi {
grid-column-start: var(--columns);
grid-column-end: span 1;
grid-row-start: 1;
place-self: center;
}
<div class="wrapper">
<div class="navi"></div>
<div id="infoi">
<img src="http://via.placeholder.com/32x20/000000/ffffff?text=?" height="20" width="32"/>
</div>
</div>
විකල්ප (ආවරණයක් නැත) විසඳුමක්
අපට කිසිදු HTML එකක් සංස්කරණය කළ නොහැකි නම්, එයින් අදහස් කරන්නේ අපට එතීමේ අංගයක් එක් කළ නොහැකි බවයි, අපට තවමත් අපේක්ෂිත ප්රති achieve ල ලබා ගත හැකිය.
භාවිතා කරනු වෙනුවට, position: absoluteමත #infoiඅංගයක්, අපි භාවිතා කරන්නේ position: relative. #infoiමූලද්රව්යය එහි පෙරනිමි ස්ථානයේ සිට .naviමූලද්රව්යයට පහළින් නැවත ස්ථානගත කිරීමට මෙය අපට ඉඩ දෙයි . සමග position: relativeඅපි සෘණ භාවිතා කළ හැකි topවන ප්රකෘති තත්ත්වය එය දක්වා ඉවත් කිරීමට අගය, leftවටිනාකම 100%භාවිතා ඍණ වූ පික්සල කිහිපයක් left: calc(100% - 52px)දකුණු පැත්තේ එය ස්ථානගත කිරීම.
/*
* The .navi properties are for styling only
* These properties can be changed or removed
*/
.navi {
background-color: #eaeaea;
height: 40px;
width: 100%;
}
/*
* Position the #infoi element in the top-right
* of the .wrapper element
*/
#infoi {
position: relative;
display: inline-block;
top: -40px;
left: calc(100% - 52px);
/*
* Styling only, the below can be changed or removed
* depending on your use case
*/
height: 20px;
padding: 10px 10px;
}
<div class="navi"></div>
<div id="infoi">
<img src="http://via.placeholder.com/32x20/000000/ffffff?text=?" height="20" width="32"/>
</div>
overflow: hidden,overflow: visibleඒ වෙනුවට භාවිතා කරන්න.