පිළිගත් විසඳුම විශිෂ්ට ලෙස ක්රියා කරයි, නමුත් එය ක්රියාත්මක වන්නේ ඇයිද යන්න පිළිබඳ පැහැදිලි කිරීමක් 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
. පළමුව, #infoi
a ලබා දෙන්න 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
ඒ වෙනුවට භාවිතා කරන්න.