Skip to content
This page has been auto-translated and may contain errors.View in English

बॉक्स मॉडल

docs.scrimba.com

एक बार जब आप CSS के साथ चीजों को स्पेस करना शुरू करते हैं, तो आप उसी पहेली का सामना करते हैं जो सभी को करना पड़ता है: आप एक width सेट करते हैं, कुछ पैडिंग जोड़ते हैं, और एलिमेंट आपने जितना पूछा था उससे चौड़ा निकलता है। दो पैराग्राफ संख्याओं से कहीं अधिक पास बैठते हैं। यह कोई बग नहीं है। यह बॉक्स मॉडल है, नियमों का वह समूह जो तय करता है कि हर एलिमेंट कितनी जगह लेता है, और एक बार जब आप इसे चित्रित कर सकते हैं, तो आपकी अधिकांश स्पेसिंग चिंताएं आश्चर्य नहीं रह जाती हैं।

हर एलिमेंट एक बॉक्स है

CSS पृष्ठ पर हर एलिमेंट को एक आयत के रूप में मानता है, यहां तक कि एक शब्द या लिंक भी। वह आयत अंदर से बाहर की ओर ढेर किए गए चार परतों से बनी है, और यह बॉक्स मॉडल है: बीच में कंटेंट, फिर इसके चारों ओर पैडिंग, फिर एक बॉर्डर, फिर बाहर की ओर मार्जिन।

दीवार पर एक फ्रेम की गई तस्वीर की कल्पना करें। तस्वीर कंटेंट है। तस्वीर के चारों ओर सफेद मैट पैडिंग है, फ्रेम के अंदर सांस लेने की जगह। लकड़ी का फ्रेम ही बॉर्डर है। और इस फ्रेम और अगले फ्रेम के बीच दीवार पर खाली जगह मार्जिन है। आप जो हर एलिमेंट स्टाइल करते हैं वह अंदर से बाहर की ओर उसी तरह पैकेज किया जाता है।

css
.card {
  padding: 16px;              /* कंटेंट के चारों ओर अंदर की जगह */
  border: 2px solid #333;     /* फ्रेम */
  margin: 24px;               /* बाहर की जगह, पड़ोसियों को दूर धकेलना */
}

हर एलिमेंट जो ब्राउज़र रेंडर करता है वह एक आयताकार बॉक्स है, और उस बॉक्स के केंद्र से बाहर की ओर मापी गई चार भाग हैं: कंटेंट बॉक्स (जहां आपका टेक्स्ट या इमेज रहता है), पैडिंग, बॉर्डर, और मार्जिन। आपने यह विचार पहले से ही CSS कैसे काम करता है में देखा है; बॉक्स मॉडल वह हिस्सा है जो आकार और स्पेसिंग को नियंत्रित करता है।

क्रम महत्वपूर्ण है क्योंकि प्रत्येक परत उससे पहले वाली को लपेटती है। पैडिंग कंटेंट और बॉर्डर के बीच बैठती है, इसलिए एक बैकग्राउंड रंग कंटेंट और पैडिंग को भरता है लेकिन बॉर्डर के बाहरी किनारे पर रुक जाता है। मार्जिन बॉर्डर के बाहर बैठता है और हमेशा पारदर्शी होता है, इसलिए आप मार्जिन को कोई रंग नहीं दे सकते।

css
.card {
  padding: 16px;              /* बॉर्डर के अंदर, बैकग्राउंड साझा करता है */
  border: 2px solid #333;
  margin: 24px;              /* बॉर्डर के बाहर, हमेशा पारदर्शी */
  background: #f4f4f4;       /* कंटेंट + पैडिंग भरता है, बॉर्डर पर रुकता है */
}

हर रेंडर किया गया एलिमेंट कम से कम एक आयताकार बॉक्स बनाता है, और बॉक्स मॉडल इसके चार नेस्टेड क्षेत्रों का विनिर्देश है। अंदर से बाहर की ओर: कंटेंट बॉक्स (एलिमेंट का टेक्स्ट, इमेज या चाइल्ड बॉक्स रखने वाला क्षेत्र), पैडिंग बॉक्स (कंटेंट प्लस पैडिंग, पारदर्शी स्पेस जो अभी भी एलिमेंट की बैकग्राउंड रखता है), बॉर्डर बॉक्स (पैडिंग बॉक्स प्लस बॉर्डर, दृश्यमान किनारा), और मार्जिन बॉक्स (बॉर्डर बॉक्स प्लस मार्जिन, सबसे बाहरी पारदर्शी क्षेत्र जो एलिमेंट को उसके पड़ोसियों से अलग करता है)।

इस नेस्टिंग के दो परिणाम हैं जो लोगों को बाद में भ्रमित करते हैं। पहला, बैकग्राउंड पैडिंग बॉक्स को पेंट करते हैं, मार्जिन बॉक्स को नहीं, इसलिए पैडिंग आपको क्लिक योग्य, रंगीन इंटीरियर स्पेस देता है जबकि मार्जिन आपको खाली अलगाव देता है जिसे आप स्टाइल नहीं कर सकते। दूसरा, आपने जो width और height घोषित किए हैं वे डिफॉल्ट रूप से पूरे बॉक्स का वर्णन नहीं करते; वे केवल इसके एक क्षेत्र का वर्णन करते हैं, और कौन सा क्षेत्र box-sizing पर निर्भर करता है, जिसे अगले सेक्शन सटीक बनाते हैं।

css
.card {
  padding: 16px;
  border: 2px solid #333;
  margin: 24px;
  background: #f4f4f4;       /* कंटेंट + पैडिंग को पेंट करता है, कभी मार्जिन नहीं */
}
Junoहर एलिमेंट एक बॉक्स है हर एलिमेंट अंदर से बाहर की ओर चार परतों वाला बॉक्स है: कंटेंट, फिर पैडिंग, फिर बॉर्डर, फिर मार्जिन। फ्रेम की गई तस्वीर की तस्वीर, मैट, फ्रेम, अगले फ्रेम के लिए अंतराल। यह चित्र अपने दिमाग में रखें और इस चैप्टर का बाकी हिस्सा इसी से निकलता है।
Junoहर एलिमेंट एक बॉक्स है कंटेंट, पैडिंग, बॉर्डर, मार्जिन, बाहर की ओर लपेटते हुए। बैकग्राउंड कंटेंट और पैडिंग को भरता है और बॉर्डर पर रुकता है, और मार्जिन हमेशा पारदर्शी होता है, इसलिए margin कोई रंग नहीं लेता। नेस्टिंग को सीधा रखें और स्पेसिंग नियम मनमानी लगना बंद कर देंगे।
Junoहर एलिमेंट एक बॉक्स है चार नेस्टेड क्षेत्र: कंटेंट बॉक्स, पैडिंग बॉक्स, बॉर्डर बॉक्स, मार्जिन बॉक्स। बैकग्राउंड बॉर्डर बॉक्स तक पेंट करते हैं और कभी मार्जिन नहीं, इसलिए पैडिंग रंगीन इंटीरियर है और मार्जिन खाली अलगाव है। और आपका घोषित width केवल इन क्षेत्रों में से एक को ही साइज करता है, जो पूरी वजह है कि अगले सेक्शन पर box-sizing का अस्तित्व है।

padding, border, और margin

तीन स्पेसिंग परतें प्रत्येक एक काम करती हैं। पैडिंग अंदर की जगह है, कंटेंट और बॉर्डर के बीच। मार्जिन बाहर की जगह है, दूसरे एलिमेंट को दूर धकेलता है। बॉर्डर उनके बीच खींची गई रेखा है।

आप एक बार में सभी चार पक्षों के लिए एक value सेट कर सकते हैं, या एकल पक्ष को लक्ष्य कर सकते हैं:

css
.card {
  padding: 20px;             /* सभी चार पक्षों को 20px मिलते हैं */
  margin-bottom: 32px;       /* केवल नीचे का किनारा */
}

shorthand padding: 20px ऊपर, दाएं, नीचे और बाएं को एक साथ कहने का एक त्वरित तरीका है। जब आपको एक पक्ष बाकी से अलग चाहिए, तो margin-bottom जैसी विशिष्ट property तक पहुंचें।

पैडिंग बॉर्डर के अंदर की जगह है, मार्जिन बाहर की जगह है, और बॉर्डर उनके बीच का किनारा है। नियम यह है कि मार्जिन पड़ोसियों को दूर धकेलता है, पैडिंग एलिमेंट के अपने इंटीरियर को बढ़ाता है। यदि बैकग्राउंड अपने टेक्स्ट के विरुद्ध तंग लगता है, तो यह एक पैडिंग का काम है। यदि दो एलिमेंट बहुत पास बैठते हैं, तो यह एक मार्जिन का काम है।

प्रत्येक एक shorthand लेता है जो ऊपर से घड़ी की ओर पक्षों को भरता है। एक value सभी चार पक्षों पर लागू होती है, दो values वर्टिकल फिर हॉरिजॉन्टल सेट करते हैं, चार values ऊपर, दाएं, नीचे, बाएं जाते हैं:

css
.hero {
  padding: 40px 24px;        /* ऊपर और नीचे 40px, बाएं और दाएं 24px */
  margin: 0 auto;            /* वर्टिकल मार्जिन नहीं, बाएं और दाएं को सेंटर करने के लिए auto */
}

.card {
  padding-left: 16px;        /* केवल एक किनारे अलग होने पर प्रति-पक्ष */
}

पैडिंग, बॉर्डर, और मार्जिन तीन स्वतंत्र स्पेसिंग कंट्रोल हैं जिनका अलग-अलग behavior है, एक ही अंतराल के तीन नाम नहीं। पैडिंग बॉर्डर के अंदर पारदर्शी क्षेत्र है जो अभी भी बैकग्राउंड रखता है और अभी भी क्लिक का जवाब देता है। मार्जिन बॉर्डर के बाहर पारदर्शी क्षेत्र है जो एलिमेंट को उसके siblings से अलग करता है और बैकग्राउंड नहीं रखता है। बॉर्डर खींची गई edge है जो भी layout space लेता है जो इसकी width के बराबर है।

तीनों घड़ी की ओर shorthand स्वीकार करते हैं (एक, दो, तीन, या चार values जो top / right / bottom / left में विस्तारित होती हैं), और तीनों के पास per-side longhands हैं। दो behaviors सटीकता से पकड़ने के लायक हैं। मार्जिन नकारात्मक हो सकते हैं, जो एक एलिमेंट को पड़ोसी की ओर या उसके ऊपर खींचता है और एक legitimate layout tool है, जबकि पैडिंग शून्य से नीचे नहीं जा सकता। और margin: 0 auto एक ब्लॉक को horizontally केंद्रीय करता है केवल जब एलिमेंट के पास एक definite width हो, क्योंकि auto leftover horizontal space को विभाजित करके resolve होता है, और यदि बॉक्स पहले से अपने कंटेनर को भर देता है तो कोई leftover space नहीं होता।

css
.hero {
  padding: 40px 24px;        /* घड़ी की ओर pairs: vertical, horizontal */
  margin: 0 auto;            /* केवल .hero पर set width के साथ केंद्रों */
  border-bottom: 1px solid #ddd;  /* border longhand, एक किनारा, 1px layout लेता है */
}

.card {
  margin-top: -8px;          /* नकारात्मक margin कार्ड को ऊपर की ओर खींचता है */
}
Junopadding, border, और margin पैडिंग बॉर्डर के अंदर की जगह है, मार्जिन बाहर की जगह है, और बॉर्डर उनके बीच की रेखा है। padding का उपयोग करें जब टेक्स्ट बॉक्स के अंदर तंग लगता है, और margin का उपयोग करें जब दो बॉक्स बहुत पास बैठते हैं। padding: 20px जैसी एक value सभी चार पक्षों को कवर करती है, या margin-bottom जैसी एक पक्ष का नाम दें जब केवल एक को बदलना हो।
Junopadding, border, और margin पैडिंग एलिमेंट के अपने इंटीरियर को बढ़ाता है, मार्जिन अपने पड़ोसियों को दूर धकेलता है, और यह जानना कि आप कौन सा चाहते हैं, बहुत सारे अनुमान बचाता है। shorthand ऊपर से घड़ी की ओर चलता है: सभी पक्षों के लिए एक value, फिर horizontal के लिए दो। जब एक बैकग्राउंड अपने टेक्स्ट पर बहुत कसकर लगता है तो आप जो चाहते हैं वह padding है, मार्जिन नहीं।
Junopadding, border, और margin पैडिंग बैकग्राउंड और क्लिक रखता है, मार्जिन पारदर्शी अलगाव है, और बॉर्डर real layout space लेता है जो इसकी width के बराबर है। मार्जिन नकारात्मक हो सकते हैं एलिमेंट को एक साथ खींचने के लिए, पैडिंग नहीं। और margin: 0 auto केवल एक ब्लॉक को केंद्रीय करता है जिसके पास एक definite width हो, क्योंकि auto के पास leftover space को विभाजित करने के लिए कोई जगह नहीं है अन्यथा।

box-sizing: content-box vs border-box

यहाँ वह आश्चर्य है जो लगभग हर किसी को पकड़ता है। आप एक कार्ड को width: 300px पर सेट करते हैं, कुछ पैडिंग जोड़ते हैं, और कार्ड पृष्ठ पर 300 पिक्सल से चौड़ा निकलता है। आपने कोई गलती नहीं की। डिफॉल्ट रूप से, width केवल बीच में कंटेंट को मापता है, और कोई भी पैडिंग और बॉर्डर ऊपर जोड़े जाते हैं।

एक लाइन की fix है जो width को वैसे व्यवहार करने देती है जैसे आप उम्मीद करते हैं। box-sizing: border-box सेट करें, और अब width जो आप type करते हैं वह बॉक्स की पूरी width है, पैडिंग और बॉर्डर सहित:

css
.card {
  box-sizing: border-box;    /* width अब पैडिंग और बॉर्डर को शामिल करता है */
  width: 300px;
  padding: 20px;             /* कार्ड 300px चौड़ा रहता है, 340px नहीं */
}

डिफॉल्ट रूप से हर एलिमेंट box-sizing: content-box का उपयोग करता है, जिसका मतलब है कि आपने जो width सेट किया है वह केवल कंटेंट बॉक्स पर लागू होता है। पैडिंग और बॉर्डर तब इसके बाहर जोड़े जाते हैं, इसलिए बॉक्स जो आप पृष्ठ पर देखते हैं वह आपके द्वारा type की गई संख्या से चौड़ा है। यह एक सौ blown-out layouts के पीछे classic sizing gotcha है।

गणित एक बार करो और यह स्पष्ट है। content-box के साथ, एक 300px width प्लस प्रत्येक पक्ष पर 20px पैडिंग प्लस प्रत्येक पक्ष पर 2px बॉर्डर 300 + 40 + 4 = 344px पर रेंडर करता है। border-box पर स्विच करें और width अब बॉर्डर बॉक्स का अर्थ है: पैडिंग और बॉर्डर को अंदर से घटाया जाता है, इसलिए एलिमेंट बिल्कुल 300px रहता है और कंटेंट भीतर फिट करने के लिए shrink होता है।

css
.card {
  box-sizing: content-box;   /* the default */
  width: 300px;
  padding: 20px;
  border: 2px solid #333;
  /* actual rendered width: 300 + 20 + 20 + 2 + 2 = 344px */
}

क्योंकि यह लगभग हमेशा वह है जो आप चाहते हैं, standard move यह है कि इसे universal selector के साथ globally सेट करें ताकि हर एलिमेंट opt in करे:

css
* {
  box-sizing: border-box;    /* एक नियम, हर जगह predictable sizing */
}

box-sizing तय करता है कि आपका width और height किस क्षेत्र को measure करते हैं, और इसके दो values हैं। initial value content-box है: width कंटेंट बॉक्स सेट करता है, और पैडिंग और बॉर्डर उस width के बाहर lay out होते हैं, इसलिए बॉर्डर बॉक्स, पृष्ठ पर actual footprint, width + padding-left + padding-right + border-left + border-right है। विकल्प border-box है: width सीधे बॉर्डर बॉक्स सेट करता है, और ब्राउज़र अंदर से पैडिंग और बॉर्डर को घटाता है, कंटेंट बॉक्स को जो कुछ भी बचा है उसमें shrink करता है।

अंकगणित को सटीकता से कहना लायक है, क्योंकि यह पूरी वजह है कि property मौजूद है। width: 300px; padding: 20px; border: 2px को देखते हुए:

css
/* content-box (default): padding और border ऊपर जोड़ते हैं */
.card {
  box-sizing: content-box;
  width: 300px;
  padding: 20px;
  border: 2px solid #333;
  /* border box = 300 + 40 + 4 = 344px; content box = 300px */
}

/* border-box: padding और border declared width में खाते हैं */
.card {
  box-sizing: border-box;
  width: 300px;
  padding: 20px;
  border: 2px solid #333;
  /* border box = 300px; content box = 300 - 40 - 4 = 256px */
}

border-box की सिफारिश करें: यह sizing को composable बनाता है। कारण व्यावहारिक है: border-box के साथ, width: 25% पर declared columns का एक सेट कंटेनर के एक चौथाई पर रहता है चाहे आप कितना भी पैडिंग जोड़ें, क्योंकि पैडिंग अब बाहरी size को नहीं बदलता है। यह predictability ही है कि क्यों near-universal reset इसे सब कुछ पर लागू करता है, आमतौर पर pseudo-elements सहित, इसलिए कुछ भी quietly content-box पर वापस न जाए:

css
*, *::before, *::after {
  box-sizing: border-box;
}

एक precision note: यह केवल width और height को govern करता है। मार्जिन हमेशा बॉर्डर बॉक्स के बाहर होते हैं चाहे box-sizing कुछ भी हो, इसलिए वे कभी भी declared size की ओर count नहीं करते, जो directly margin collapsing से नीचे जुड़ता है। यदि आपको इन बॉक्सों को reliably size करने के लिए units चाहिए, तो sizing units कवर करता है कि कैसे percentages, rem, और viewport units resolve होते हैं।

Junobox-sizing: content-box vs border-box डिफॉल्ट रूप से, width जो आप सेट करते हैं वह केवल बीच में कंटेंट को measure करते हैं, इसलिए पैडिंग और बॉर्डर बॉक्स को आपके द्वारा type की गई संख्या से बड़ा बनाते हैं। box-sizing: border-box सेट करना इसे ठीक करता है: width पूरा बॉक्स बन जाती है, पैडिंग और बॉर्डर शामिल। यह मुझे बहुत समय के लिए catch किया, इसलिए इसे जल्दी याद रखने के लायक है।
Junobox-sizing: content-box vs border-box डिफॉल्ट content-box का अर्थ है कि width केवल कंटेंट को size करते हैं, इसलिए पैडिंग और बॉर्डर real box को चौड़ा करते हैं जितना आपने ask किया। एक 300px कार्ड 20px पैडिंग और एक 2px बॉर्डर के साथ actually 344px पर renders होता है। border-box पर स्विच करें और width का अर्थ पूरा बॉक्स है, जो कि * पर globally इसे सेट करना standard है अधिकांश stylesheets की पहली line है।
Junobox-sizing: content-box vs border-boxcontent-box अपने width के बाहर पैडिंग और बॉर्डर जोड़ते हैं, इसलिए एक 300px बॉक्स 344px बन जाता है; border-box उन्हें अंदर से घटाता है और इसे 300px पर रखता है। border-box तक पहुंचें क्योंकि percentage widths composable रहते हैं जब पैडिंग अब बाहरी size को नहीं बदलता है। इसे * प्लस pseudo-elements पर लागू करें ताकि कुछ भी quietly default पर वापस न जाए।

Margin collapsing

एक और आश्चर्य, और यह margins stacking के बारे में है। दो पैराग्राफों को एक दूसरे के ऊपर रखें, पहले को 24px bottom margin दें और दूसरे को 16px top margin दें, और आप शायद उनके बीच 40px का अंतराल expect करते हैं। आपको actually 24px मिलता है।

इसे margin collapsing कहा जाता है। जब दो vertical margins मिलते हैं, तो ब्राउज़र उन्हें एक साथ नहीं जोड़ता है। यह दोनों में से बड़े को रखता है और छोटे को फेंक देता है। तो बड़ा margin जीतता है, और अंतराल 24px है, 40px नहीं। यह केवल top और bottom margins के साथ होता है, कभी padding के साथ नहीं।

css
.intro {
  margin-bottom: 24px;
}
.details {
  margin-top: 16px;
  /* उनके बीच अंतराल 24px है, बड़ा margin, 40px नहीं */
}

जब एक ब्लॉक का bottom margin अगले का top margin से मिलता है, तो दोनों add up नहीं होते हैं। वे दोनों में से बड़े के बराबर एक single margin में collapse हो जाते हैं। एक पैराग्राफ को margin-bottom: 24px दें और अगले को margin-top: 16px दें, और उनके बीच की जगह 24px है, 40px नहीं। यह margin collapsing है, और यह केवल vertical margins को प्रभावित करता है।

इसे जानने का कारण यह है कि यह changes कैसे आप spacing के बारे में सोचते हैं। यदि एक gap दोनों संख्याओं से छोटा है तो suggest करते हैं, तो आप शायद एक collapse देख रहे हैं, और छोटे margin में जोड़ना तब तक कुछ नहीं करता जब तक यह बड़े को pass न कर दे। vertical rhythm को नियंत्रित करने का clean तरीका margin को केवल एक दिशा में सेट करना है, उदाहरण के लिए हर ब्लॉक पर margin-bottom और कोई margin-top नहीं, इसलिए collapsing के पास कुछ नहीं resolve करना है।

css
.article > * {
  margin-top: 0;
  margin-bottom: 24px;       /* एक दिशा, इसलिए gaps predictable हैं */
}

Margin collapsing वह नियम है कि normal flow में adjoining vertical margins एक में merge करते हैं, जिसका आकार दोनों में से बड़ा है (या most positive, नकारात्मक के साथ largest positive और most negative को sum करके handled)। Normal flow किसी भी flex, grid, या float से बदले जाने से पहले block boxes की default top-to-bottom stacking है। .intro को 24px bottom margin दें और .details को 16px top margin दें और अंतराल 24px है, क्योंकि ब्राउज़र दोनों को एक single collapsed margin में resolve करता है।

precise part यह जानना है कि क्या करता है और क्या collapse नहीं करता है, क्योंकि escapes हैं कि आप एक surprise को कैसे रोकते हैं:

  • यह केवल vertical margins को प्रभावित करता है। Horizontal margins कभी collapse नहीं करते; side-by-side दो एलिमेंट हमेशा अपने facing margins को add करते हैं।
  • दोनों margins के बीच कुछ भी collapse को रोकता है: एक border, कोई भी padding, या parent पर content एक child के margin और अपने स्वयं के बीच।
  • Margins एक formatting context boundary को cross करके collapse नहीं करते हैं। एक flex या grid container अपने children के लिए एक बनाता है, इसलिए items इसके अंदर कभी अपने margins को collapse नहीं करते हैं, जो एक कारण है कि modern layouts float-era ones से अधिक predictable लगते हैं।
  • एक parent और अपने first या last child एक दूसरे को through collapse कर सकते हैं जब कोई भी उन्हें अलग न करे, इसलिए एक child का top margin unexpectedly parent के बाहर दिखाई दे सकता है। parent में padding-top या एक border जोड़ना इसे रोकता है।
css
/* Collapse होता है: normal flow में adjacent siblings */
.intro { margin-bottom: 24px; }
.details { margin-top: 16px; }   /* gap 24px में resolves होता है */

/* Collapse रुका: margins के बीच एक border */
.section {
  border-top: 1px solid #eee;    /* अब दोनों margins apply होते हैं, कोई merge नहीं */
}
JunoMargin collapsing जब एक bottom margin एक top margin से मिलता है, तो ब्राउज़र बड़े को रखता है और छोटे को drop करता है, उन्हें add करने के बजाय। तो 24px below 16px above से मिलता है 24px gap देता है, 40px नहीं। यह केवल top और bottom margins के साथ होता है, और यह सभी को पहली बार आश्चर्यचकित करता है।
JunoMargin collapsing blocks के बीच vertical margins दोनों में से बड़े में collapse होते हैं, कभी sum नहीं, इसलिए एक gap संख्याओं से छोटा हो सकता है जो suggest करते हैं। जब ऐसा होता है, तो छोटे margin में बढ़ाना तब तक कुछ नहीं करता जब तक यह बड़े को overtake न कर दे। केवल एक दिशा में margin सेट करना, जैसे हर ब्लॉक पर margin-bottom, पूरी चीज़ को sidestep करता है।
JunoMargin collapsing normal flow में adjoining vertical margins larger value में merge करते हैं, और horizontal margins कभी नहीं। उनके बीच एक border या padding collapse को रोकता है, और flex और grid containers इसे पूरी तरह से रोकते हैं क्योंकि वे एक नया formatting context बनाते हैं। parent-and-first-child case को देखें, जहां एक child का top margin parent से बाहर निकलता है जब तक आप padding-top या एक border जोड़कर इसे hold न करें।