शीर्ष -50% को -50% अनुवाद ऑफसेट की आवश्यकता क्यों है?
सीधे इस प्रश्न का उत्तर देने के बजाय, मैं और अधिक सामान्य प्रश्न का उत्तर देने जा रहा हूं:
CSS में स्थिति एंकरिंग कैसे काम करती है?
उम्मीद है, आम तौर पर सवाल का जवाब देने में, आप उन हिस्सों को समझेंगे जो आपके विशिष्ट मामले पर लागू होते हैं।
"स्थिति एंकरिंग" से आपका क्या अभिप्राय है?
स्थिति एंकरिंग तब होती है जब एक डोम नोड को इस तरह से तैनात किया जाता है कि वह किसी दिए गए आयाम में अपने माता-पिता के लिए "लंगर" हो। यदि नोड के ऊपर बाईं ओर अपने माता-पिता के ऊपर बाईं ओर लंगर डाला गया है, तो नोड्स उनके शीर्ष बाएं कोने में संरेखित रहेंगे, चाहे कोई भी तत्व का आकार हो।
स्थिति एंकरिंग कैसी दिखती है?
मैं आगे के सभी उदाहरणों के लिए एक टेम्पलेट का उपयोग करने जा रहा हूं, इसलिए आधार उदाहरण को समझना महत्वपूर्ण है।
.container {
background-image: -webkit-linear-gradient(left, darkred 0, darkred 50%, goldenrod 50%, goldenrod 100%), -webkit-linear-gradient(left, darkgreen 0, darkgreen 50%, darkblue 50%, darkblue 100%);
background-image: linear-gradient(to right, darkred 0, darkred 50%, goldenrod 50%, goldenrod 100%), linear-gradient(to right, darkgreen 0, darkgreen 50%, darkblue 50%, darkblue 100%);
background-position: top, bottom;
background-repeat: no-repeat;
background-size: 100% 50.1%, 100% 50.1%;
height: 70vh;
margin: 15vh 15vw;
position: relative;
width: 70vw;
}
.box {
background-image: -webkit-linear-gradient(left, red 0, red 50%, yellow 50%, yellow 100%), -webkit-linear-gradient(left, green 0, green 50%, blue 50%, blue 100%);
background-image: linear-gradient(to right, red 0, red 50%, yellow 50%, yellow 100%), linear-gradient(to right, green 0, green 50%, blue 50%, blue 100%);
background-position: top, bottom;
background-repeat: no-repeat;
background-size: 100% 50.1%, 100% 50.1%;
height: 50vmin;
position: absolute;
width: 50vmin;
}
<div class="container">
<div class="box"></div>
</div>
यह उदाहरण एक माता-पिता को दिखाता है .containerजिसमें गहरे लाल, गहरे पीले, गहरे हरे और गहरे नीले रंग के चतुर्भुज हैं जो आसानी से संरेखण देख सकते हैं। अंदर, इसमें एक .boxलाल, पीला, हरा और नीला रंग होता है, जो संरेखण के विपरीत होता है।
आगे के सभी उदाहरणों में संबंधित कोड को और अधिक बनाने के लिए इस बॉयलरप्लेट को छोटा किया जाएगा।
ध्यान दें कि डिफ़ॉल्ट रूप से, बच्चे के शीर्ष बाईं ओर माता-पिता के ऊपर बाईं ओर लंगर डाले हुए हैं।
जनक अनुचर
जनक प्रस्तोता का उपयोग करके समायोजित किया जा सकता top, bottom, left, और rightबच्चे तत्व पर गुण।
ऊपर
topसंपत्ति का उपयोग माता-पिता के शीर्ष किनारे पर बच्चे के शीर्ष किनारे को लंगर डालेगा।
मान लिया गया bottomहै top: 0कि डिफ़ॉल्ट रूप से अलग नहीं दिखाया जाएगाtop: auto
.container{background-image:-webkit-linear-gradient(left,darkred 0,darkred 50%,goldenrod 50%,goldenrod 100%),-webkit-linear-gradient(left,darkgreen 0,darkgreen 50%,darkblue 50%,darkblue 100%);background-image:linear-gradient(to right,darkred 0,darkred 50%,goldenrod 50%,goldenrod 100%),linear-gradient(to right,darkgreen 0,darkgreen 50%,darkblue 50%,darkblue 100%);background-position:top,bottom;background-repeat:no-repeat;background-size:100% 50.1%,100% 50.1%;height:70vh;margin:15vh 15vw;position:relative;width:70vw;}.box{background-image:-webkit-linear-gradient(left,red 0,red 50%,yellow 50%,yellow 100%),-webkit-linear-gradient(left,green 0,green 50%,blue 50%,blue 100%);background-image:linear-gradient(to right,red 0,red 50%,yellow 50%,yellow 100%),linear-gradient(to right,green 0,green 50%,blue 50%,blue 100%);background-position:top,bottom;background-repeat:no-repeat;background-size:100% 50.1%,100% 50.1%;height:50vmin;position:absolute;width:50vmin;}
.box {
top: 0;
}
<div class="container">
<div class="box"></div>
</div>
प्रतिशत का उपयोग करने से माता-पिता के ऊपर से दिए गए प्रतिशत में बच्चे के शीर्ष किनारे को संरेखित किया जाएगा।
top: 50% माता-पिता का मध्य है:
.container{background-image:-webkit-linear-gradient(left,darkred 0,darkred 50%,goldenrod 50%,goldenrod 100%),-webkit-linear-gradient(left,darkgreen 0,darkgreen 50%,darkblue 50%,darkblue 100%);background-image:linear-gradient(to right,darkred 0,darkred 50%,goldenrod 50%,goldenrod 100%),linear-gradient(to right,darkgreen 0,darkgreen 50%,darkblue 50%,darkblue 100%);background-position:top,bottom;background-repeat:no-repeat;background-size:100% 50.1%,100% 50.1%;height:70vh;margin:15vh 15vw;position:relative;width:70vw;}.box{background-image:-webkit-linear-gradient(left,red 0,red 50%,yellow 50%,yellow 100%),-webkit-linear-gradient(left,green 0,green 50%,blue 50%,blue 100%);background-image:linear-gradient(to right,red 0,red 50%,yellow 50%,yellow 100%),linear-gradient(to right,green 0,green 50%,blue 50%,blue 100%);background-position:top,bottom;background-repeat:no-repeat;background-size:100% 50.1%,100% 50.1%;height:50vmin;position:absolute;width:50vmin;}
.box {
top: 50%;
}
<div class="container">
<div class="box"></div>
</div>
top: 100% माता पिता के नीचे है:
.container{background-image:-webkit-linear-gradient(left,darkred 0,darkred 50%,goldenrod 50%,goldenrod 100%),-webkit-linear-gradient(left,darkgreen 0,darkgreen 50%,darkblue 50%,darkblue 100%);background-image:linear-gradient(to right,darkred 0,darkred 50%,goldenrod 50%,goldenrod 100%),linear-gradient(to right,darkgreen 0,darkgreen 50%,darkblue 50%,darkblue 100%);background-position:top,bottom;background-repeat:no-repeat;background-size:100% 50.1%,100% 50.1%;height:70vh;margin:15vh 15vw;position:relative;width:70vw;}.box{background-image:-webkit-linear-gradient(left,red 0,red 50%,yellow 50%,yellow 100%),-webkit-linear-gradient(left,green 0,green 50%,blue 50%,blue 100%);background-image:linear-gradient(to right,red 0,red 50%,yellow 50%,yellow 100%),linear-gradient(to right,green 0,green 50%,blue 50%,blue 100%);background-position:top,bottom;background-repeat:no-repeat;background-size:100% 50.1%,100% 50.1%;height:50vmin;position:absolute;width:50vmin;}
.box {
top: 100%;
}
<div class="container">
<div class="box"></div>
</div>
निचला एंकरिंग
बॉटम एंकरिंग बच्चे के निचले किनारे को अभिभावक के निचले किनारे पर लंगर डालेगी:
.container{background-image:-webkit-linear-gradient(left,darkred 0,darkred 50%,goldenrod 50%,goldenrod 100%),-webkit-linear-gradient(left,darkgreen 0,darkgreen 50%,darkblue 50%,darkblue 100%);background-image:linear-gradient(to right,darkred 0,darkred 50%,goldenrod 50%,goldenrod 100%),linear-gradient(to right,darkgreen 0,darkgreen 50%,darkblue 50%,darkblue 100%);background-position:top,bottom;background-repeat:no-repeat;background-size:100% 50.1%,100% 50.1%;height:70vh;margin:15vh 15vw;position:relative;width:70vw;}.box{background-image:-webkit-linear-gradient(left,red 0,red 50%,yellow 50%,yellow 100%),-webkit-linear-gradient(left,green 0,green 50%,blue 50%,blue 100%);background-image:linear-gradient(to right,red 0,red 50%,yellow 50%,yellow 100%),linear-gradient(to right,green 0,green 50%,blue 50%,blue 100%);background-position:top,bottom;background-repeat:no-repeat;background-size:100% 50.1%,100% 50.1%;height:50vmin;position:absolute;width:50vmin;}
.box {
bottom: 0;
}
<div class="container">
<div class="box"></div>
</div>
bottom: 50%माता-पिता का मध्य है, जिसके विपरीत बच्चे को जोड़ दिया गया है top: 50%:
.container{background-image:-webkit-linear-gradient(left,darkred 0,darkred 50%,goldenrod 50%,goldenrod 100%),-webkit-linear-gradient(left,darkgreen 0,darkgreen 50%,darkblue 50%,darkblue 100%);background-image:linear-gradient(to right,darkred 0,darkred 50%,goldenrod 50%,goldenrod 100%),linear-gradient(to right,darkgreen 0,darkgreen 50%,darkblue 50%,darkblue 100%);background-position:top,bottom;background-repeat:no-repeat;background-size:100% 50.1%,100% 50.1%;height:70vh;margin:15vh 15vw;position:relative;width:70vw;}.box{background-image:-webkit-linear-gradient(left,red 0,red 50%,yellow 50%,yellow 100%),-webkit-linear-gradient(left,green 0,green 50%,blue 50%,blue 100%);background-image:linear-gradient(to right,red 0,red 50%,yellow 50%,yellow 100%),linear-gradient(to right,green 0,green 50%,blue 50%,blue 100%);background-position:top,bottom;background-repeat:no-repeat;background-size:100% 50.1%,100% 50.1%;height:50vmin;position:absolute;width:50vmin;}
.box {
bottom: 50%;
}
<div class="container">
<div class="box"></div>
</div>
bottom: 100% माता-पिता का शीर्ष है:
.container{background-image:-webkit-linear-gradient(left,darkred 0,darkred 50%,goldenrod 50%,goldenrod 100%),-webkit-linear-gradient(left,darkgreen 0,darkgreen 50%,darkblue 50%,darkblue 100%);background-image:linear-gradient(to right,darkred 0,darkred 50%,goldenrod 50%,goldenrod 100%),linear-gradient(to right,darkgreen 0,darkgreen 50%,darkblue 50%,darkblue 100%);background-position:top,bottom;background-repeat:no-repeat;background-size:100% 50.1%,100% 50.1%;height:70vh;margin:15vh 15vw;position:relative;width:70vw;}.box{background-image:-webkit-linear-gradient(left,red 0,red 50%,yellow 50%,yellow 100%),-webkit-linear-gradient(left,green 0,green 50%,blue 50%,blue 100%);background-image:linear-gradient(to right,red 0,red 50%,yellow 50%,yellow 100%),linear-gradient(to right,green 0,green 50%,blue 50%,blue 100%);background-position:top,bottom;background-repeat:no-repeat;background-size:100% 50.1%,100% 50.1%;height:50vmin;position:absolute;width:50vmin;}
.box {
bottom: 100%;
}
<div class="container">
<div class="box"></div>
</div>
लेफ्ट एंकरिंग
leftसंपत्ति माता पिता के बाईं बढ़त के लिए बच्चे के बाएँ किनारे लंगर होगा।
मान लिया गया rightहै left: 0कि डिफ़ॉल्ट रूप से अलग नहीं दिखाया जाएगा left: auto।
left: 50% माता-पिता का मध्य है:
.container{background-image:-webkit-linear-gradient(left,darkred 0,darkred 50%,goldenrod 50%,goldenrod 100%),-webkit-linear-gradient(left,darkgreen 0,darkgreen 50%,darkblue 50%,darkblue 100%);background-image:linear-gradient(to right,darkred 0,darkred 50%,goldenrod 50%,goldenrod 100%),linear-gradient(to right,darkgreen 0,darkgreen 50%,darkblue 50%,darkblue 100%);background-position:top,bottom;background-repeat:no-repeat;background-size:100% 50.1%,100% 50.1%;height:70vh;margin:15vh 15vw;position:relative;width:70vw;}.box{background-image:-webkit-linear-gradient(left,red 0,red 50%,yellow 50%,yellow 100%),-webkit-linear-gradient(left,green 0,green 50%,blue 50%,blue 100%);background-image:linear-gradient(to right,red 0,red 50%,yellow 50%,yellow 100%),linear-gradient(to right,green 0,green 50%,blue 50%,blue 100%);background-position:top,bottom;background-repeat:no-repeat;background-size:100% 50.1%,100% 50.1%;height:50vmin;position:absolute;width:50vmin;}
.box {
left: 50%;
}
<div class="container">
<div class="box"></div>
</div>
left: 100% माता-पिता के दाईं ओर लटक रहे बच्चे को छोड़ देता है।
राइट एंकरिंग
rightसंपत्ति माता पिता के दाएं किनारे करने के लिए बच्चे के दाएं किनारे लंगर होगा:
right: 50%माता-पिता का मध्य है, जिसके विपरीत बच्चे को जोड़ दिया गया है left: 50%:
.container{background-image:-webkit-linear-gradient(left,darkred 0,darkred 50%,goldenrod 50%,goldenrod 100%),-webkit-linear-gradient(left,darkgreen 0,darkgreen 50%,darkblue 50%,darkblue 100%);background-image:linear-gradient(to right,darkred 0,darkred 50%,goldenrod 50%,goldenrod 100%),linear-gradient(to right,darkgreen 0,darkgreen 50%,darkblue 50%,darkblue 100%);background-position:top,bottom;background-repeat:no-repeat;background-size:100% 50.1%,100% 50.1%;height:70vh;margin:15vh 15vw;position:relative;width:70vw;}.box{background-image:-webkit-linear-gradient(left,red 0,red 50%,yellow 50%,yellow 100%),-webkit-linear-gradient(left,green 0,green 50%,blue 50%,blue 100%);background-image:linear-gradient(to right,red 0,red 50%,yellow 50%,yellow 100%),linear-gradient(to right,green 0,green 50%,blue 50%,blue 100%);background-position:top,bottom;background-repeat:no-repeat;background-size:100% 50.1%,100% 50.1%;height:50vmin;position:absolute;width:50vmin;}
.box {
right: 50%;
}
<div class="container">
<div class="box"></div>
</div>
right: 100% माता-पिता के बाईं ओर से लटका हुआ बच्चा छोड़ देता है।
बाल एंकरिंग
transformसंपत्ति का उपयोग करके माता-पिता के लंगर से बाल लंगर को स्वतंत्र रूप से समायोजित किया जा सकता है । विशेष रूप से translate, translateXऔर translateYकार्यों को एक अलग संरेखण का उपयोग करने के लिए बाल बॉक्स को टक्कर देने के लिए उपयोग किया जाएगा।
कारण यह काम करता है क्योंकि में प्रतिशत translateमूल्य के सापेक्ष हैं बच्चे , जबकि में प्रतिशत top, bottom, left, और rightगुण के सापेक्ष हैं माता पिता ।
लंबवत संरेखण
का उपयोग करके transform: translateY(), बच्चे के संरेखण को ऊपर या नीचे टकराया जा सकता है।
transform: translateY(0) बच्चे को छोड़ देगा जहां वह है, और आम तौर पर बहुत उपयोगी नहीं है।
जब बच्चा माता-पिता के शीर्ष पर लंगर डालेगा, transform: translateY(-50%)तो अपने केंद्र में बच्चे को संरेखित करेगा:
.container{background-image:-webkit-linear-gradient(left,darkred 0,darkred 50%,goldenrod 50%,goldenrod 100%),-webkit-linear-gradient(left,darkgreen 0,darkgreen 50%,darkblue 50%,darkblue 100%);background-image:linear-gradient(to right,darkred 0,darkred 50%,goldenrod 50%,goldenrod 100%),linear-gradient(to right,darkgreen 0,darkgreen 50%,darkblue 50%,darkblue 100%);background-position:top,bottom;background-repeat:no-repeat;background-size:100% 50.1%,100% 50.1%;height:70vh;margin:15vh 15vw;position:relative;width:70vw;}.box{background-image:-webkit-linear-gradient(left,red 0,red 50%,yellow 50%,yellow 100%),-webkit-linear-gradient(left,green 0,green 50%,blue 50%,blue 100%);background-image:linear-gradient(to right,red 0,red 50%,yellow 50%,yellow 100%),linear-gradient(to right,green 0,green 50%,blue 50%,blue 100%);background-position:top,bottom;background-repeat:no-repeat;background-size:100% 50.1%,100% 50.1%;height:50vmin;position:absolute;width:50vmin;}
.box {
top: 0;
transform: translateY(-50%);
}
<div class="container">
<div class="box"></div>
</div>
इसी तरह, जब बच्चे को माता-पिता के नीचे लंगर डाला जाता है, तो वह transform: translate(50%)अपने केंद्र में बच्चे को संरेखित करेगा:
.container{background-image:-webkit-linear-gradient(left,darkred 0,darkred 50%,goldenrod 50%,goldenrod 100%),-webkit-linear-gradient(left,darkgreen 0,darkgreen 50%,darkblue 50%,darkblue 100%);background-image:linear-gradient(to right,darkred 0,darkred 50%,goldenrod 50%,goldenrod 100%),linear-gradient(to right,darkgreen 0,darkgreen 50%,darkblue 50%,darkblue 100%);background-position:top,bottom;background-repeat:no-repeat;background-size:100% 50.1%,100% 50.1%;height:70vh;margin:15vh 15vw;position:relative;width:70vw;}.box{background-image:-webkit-linear-gradient(left,red 0,red 50%,yellow 50%,yellow 100%),-webkit-linear-gradient(left,green 0,green 50%,blue 50%,blue 100%);background-image:linear-gradient(to right,red 0,red 50%,yellow 50%,yellow 100%),linear-gradient(to right,green 0,green 50%,blue 50%,blue 100%);background-position:top,bottom;background-repeat:no-repeat;background-size:100% 50.1%,100% 50.1%;height:50vmin;position:absolute;width:50vmin;}
.box {
bottom: 0;
transform: translateY(50%);
}
<div class="container">
<div class="box"></div>
</div>
इसका मतलब यह भी है कि top: 100%इसके बराबर है bottom: 0; transform: translateY(100%):
.container{background-image:-webkit-linear-gradient(left,darkred 0,darkred 50%,goldenrod 50%,goldenrod 100%),-webkit-linear-gradient(left,darkgreen 0,darkgreen 50%,darkblue 50%,darkblue 100%);background-image:linear-gradient(to right,darkred 0,darkred 50%,goldenrod 50%,goldenrod 100%),linear-gradient(to right,darkgreen 0,darkgreen 50%,darkblue 50%,darkblue 100%);background-position:top,bottom;background-repeat:no-repeat;background-size:100% 50.1%,100% 50.1%;height:70vh;margin:15vh 15vw;position:relative;width:70vw;}.box{background-image:-webkit-linear-gradient(left,red 0,red 50%,yellow 50%,yellow 100%),-webkit-linear-gradient(left,green 0,green 50%,blue 50%,blue 100%);background-image:linear-gradient(to right,red 0,red 50%,yellow 50%,yellow 100%),linear-gradient(to right,green 0,green 50%,blue 50%,blue 100%);background-position:top,bottom;background-repeat:no-repeat;background-size:100% 50.1%,100% 50.1%;height:50vmin;position:absolute;width:50vmin;}
.box {
bottom: 0;
transform: translateY(100%);
}
<div class="container">
<div class="box"></div>
</div>
क्षैतिज संरेखण
उपयोग करते हुए transform: translateX(), बच्चे के संरेखण को बाएं या दाएं से टकराया जा सकता है।
transform: translateX(0) उस बच्चे को छोड़ देगा जहाँ वह डिफ़ॉल्ट रूप से है।
जब बच्चे को माता-पिता के बाईं ओर लंगर डाला जाता है, तो transform: translateX(-50%)वह अपने केंद्र में बच्चे को संरेखित करेगा:
.container{background-image:-webkit-linear-gradient(left,darkred 0,darkred 50%,goldenrod 50%,goldenrod 100%),-webkit-linear-gradient(left,darkgreen 0,darkgreen 50%,darkblue 50%,darkblue 100%);background-image:linear-gradient(to right,darkred 0,darkred 50%,goldenrod 50%,goldenrod 100%),linear-gradient(to right,darkgreen 0,darkgreen 50%,darkblue 50%,darkblue 100%);background-position:top,bottom;background-repeat:no-repeat;background-size:100% 50.1%,100% 50.1%;height:70vh;margin:15vh 15vw;position:relative;width:70vw;}.box{background-image:-webkit-linear-gradient(left,red 0,red 50%,yellow 50%,yellow 100%),-webkit-linear-gradient(left,green 0,green 50%,blue 50%,blue 100%);background-image:linear-gradient(to right,red 0,red 50%,yellow 50%,yellow 100%),linear-gradient(to right,green 0,green 50%,blue 50%,blue 100%);background-position:top,bottom;background-repeat:no-repeat;background-size:100% 50.1%,100% 50.1%;height:50vmin;position:absolute;width:50vmin;}
.box {
transform: translateX(-50%);
}
<div class="container">
<div class="box"></div>
</div>
इसी तरह, जब बच्चे को माता-पिता के अधिकार के लिए लंगर डाला जाता है, तो वह transform: translateX(50%)अपने केंद्र में बच्चे को संरेखित करेगा:
.container{background-image:-webkit-linear-gradient(left,darkred 0,darkred 50%,goldenrod 50%,goldenrod 100%),-webkit-linear-gradient(left,darkgreen 0,darkgreen 50%,darkblue 50%,darkblue 100%);background-image:linear-gradient(to right,darkred 0,darkred 50%,goldenrod 50%,goldenrod 100%),linear-gradient(to right,darkgreen 0,darkgreen 50%,darkblue 50%,darkblue 100%);background-position:top,bottom;background-repeat:no-repeat;background-size:100% 50.1%,100% 50.1%;height:70vh;margin:15vh 15vw;position:relative;width:70vw;}.box{background-image:-webkit-linear-gradient(left,red 0,red 50%,yellow 50%,yellow 100%),-webkit-linear-gradient(left,green 0,green 50%,blue 50%,blue 100%);background-image:linear-gradient(to right,red 0,red 50%,yellow 50%,yellow 100%),linear-gradient(to right,green 0,green 50%,blue 50%,blue 100%);background-position:top,bottom;background-repeat:no-repeat;background-size:100% 50.1%,100% 50.1%;height:50vmin;position:absolute;width:50vmin;}
.box {
right: 0;
transform: translateX(50%);
}
<div class="container">
<div class="box"></div>
</div>
left: 100%के बराबर है right: 0; transform: translateX(100%)।
केंद्र लंगर
केंद्रित करना सिर्फ बच्चे को माता-पिता के मध्य में संरेखित करने का विषय है, और फिर बच्चे के मूल को जगह में उछाल देना।
.container{background-image:-webkit-linear-gradient(left,darkred 0,darkred 50%,goldenrod 50%,goldenrod 100%),-webkit-linear-gradient(left,darkgreen 0,darkgreen 50%,darkblue 50%,darkblue 100%);background-image:linear-gradient(to right,darkred 0,darkred 50%,goldenrod 50%,goldenrod 100%),linear-gradient(to right,darkgreen 0,darkgreen 50%,darkblue 50%,darkblue 100%);background-position:top,bottom;background-repeat:no-repeat;background-size:100% 50.1%,100% 50.1%;height:70vh;margin:15vh 15vw;position:relative;width:70vw;}.box{background-image:-webkit-linear-gradient(left,red 0,red 50%,yellow 50%,yellow 100%),-webkit-linear-gradient(left,green 0,green 50%,blue 50%,blue 100%);background-image:linear-gradient(to right,red 0,red 50%,yellow 50%,yellow 100%),linear-gradient(to right,green 0,green 50%,blue 50%,blue 100%);background-position:top,bottom;background-repeat:no-repeat;background-size:100% 50.1%,100% 50.1%;height:50vmin;position:absolute;width:50vmin;}
.box {
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
}
<div class="container">
<div class="box"></div>
</div>
समरूपता के कारण, आप भी उपयोग कर सकते हैं:
bottom: 50%;
right: 50%;
transform: translate(50%, 50%);