CSS लंबवत फ़्लोटिंग divs को संरेखित करता है


88

मेरे पास एक div (#wrapper) है जिसमें 2 divs खड़े हैं।

मैं चाहूंगा कि दायां-दिव्य लंबवत संरेखित हो। मैंने ऊर्ध्वाधर-संरेखित करने की कोशिश की: मेरे मुख्य आवरण पर मध्य लेकिन यह काम नहीं कर रहा है। यह मुझे पागल कर रहा है!

आशा है कि कोई मदद कर सकता है।

http://cssdesk.com/LWFhW

HTML:

<div id="wrapper">
  <div id="left-div">
    <ul>
      <li>One</li>
      <li>Two</li>
    </ul>
  </div>  
  <div id="right-div">
    Here some text...
  </div>
</div>

सीएसएस:

#wrapper{
  width:400px;
  float:left;
  height:auto;
  border:1px solid purple;}

#left-div{
  width:40px;
  border:1px solid blue;
  float:left;}

#right-div{
  width:350px;
  border:1px solid red;
  float:left;}

ul{
  list-style-type: none;
  padding:0;
  margin:0;}

जवाबों:


67

आपको तैरते हुए तत्वों के साथ कोई भाग्य नहीं है। वे ऊर्ध्वाधर-संरेखित नहीं करते हैं,

आपको इसकी आवश्यकता है display:inline-block:

http://cssdesk.com/2VMg8

सावधान


सावधान रहें display: inline-block;क्योंकि यह तत्वों के बीच के सफेद-अंतरिक्ष को वास्तविक सफेद-अंतरिक्ष के रूप में व्याख्या करता है। यह इसे पसंद display: blockनहीं करता है।

मैं यह सलाह देता हूं:

(शून्य) font-sizeवाले तत्व को सेट करें 0और font-sizeतत्वों जैसे अपने आवश्यक मान को रीसेट करें

ul {
    margin: 0;
    padding: 0;
    list-style: none;
    font-size: 0;
}
ul > li {
    font-size: 12px;
}

यहां एक प्रदर्शन देखें: http://codepen.io/HerrSerker/pen/mslay


सीएसएस

#wrapper{
  width:400px;
  height:auto;
  border:1px solid green;
  vertical-align: middle;
  font-size: 0;
}

#left-div{
  width:40px;
  border:1px solid blue;
  display: inline-block;
  font-size: initial;
  /* IE 7 hack */
  *zoom:1;
  *display: inline;
  vertical-align: middle;
}

#right-div{
  width:336px;
  border:1px solid red;
  display: inline-block;  
  font-size: initial;
  /* IE 7 hack */
  *zoom:1;
  *display: inline;
  vertical-align: middle;
}
  

यह काम नहीं करेगा अगर #wrapper की ऊंचाई तय हो। # राइट-डिव # लेफ्ट-डिव के सापेक्ष केंद्रित है , न कि आवरण तत्व के सापेक्ष। ( inline-blockयह एक इनलाइन की तरह व्यवहार करता है जिसके imgपास alignविशेषता सेट है)
कोस्टा

@ कोस्टा यह जिस तरह से होना चाहिए, मुझे लगता है।
yunzen

इससे कोई फर्क नहीं पड़ता कि यह किस तरह से होना चाहिए, ऐसे कई मामले हैं जहां आप एक फ्लोटिंग तत्व का उपयोग करते हैं, और वहां हमेशा सीएसएस में सामान करने का एक तरीका है। हमेशा। सबसे सरल मामले में, फ्लोटेड टेक्स्ट का एक वर्टिकल-अलाइन: jsbin.com/UWeB/1/edit
vsync

11
लेकिन आपका समाधान भी काम नहीं करेगा, क्योंकि आप केवल फ़्लोट्स का उपयोग नहीं करने का निर्णय नहीं ले सकते हैं..पूरी बात यह है कि फ़्लोट्स का उपयोग करते समय किसी तरह ऊर्ध्वाधर-संरेखित करें।
vsync

2
मेरी सारी बात यह थी कि कभी-कभी इनलाइन-ब्लॉक एक विकल्प नहीं था और दूसरों की मदद के लिए एक उपयोग-केस दिया, जो Google के इस पृष्ठ पर समाप्त हो सकता है। असभ्य होने की कोई जरूरत नहीं थी।
जेमी बार्कर

20

आप इसे डिस्प्ले टेबल और डिस्प्ले टेबल-सेल के साथ आसानी से कर सकते हैं।

#wrapper {
    width: 400px;
    float: left;
    height: auto;
    display: table;
    border: 1px solid green;
}

#right-div {
    width: 356px;
    border: 1px solid red;
    display: table-cell;
    vertical-align: middle;
}

संपादित करें: वास्तव में आपके लिए सीएसएस डेस्क पर जल्दी से गड़बड़ हो गई है - http://cssdesk.com/RXghg

अन्य संस्करण : Flexbox का उपयोग करें। यह काम करेगा लेकिन यह बहुत पुराना है - http://www.cssdesk.com/davf5

#wrapper {
    display: flex;
    align-items: center;
    border:1px solid green;
}

#left-div {
    border:1px solid blue;
}

#right-div {
    border:1px solid red;
}

1
हैलो स्पेसबियर्स। आपका सुझाव मेरे लिए काम नहीं कर रहा है क्योंकि मैं राइट-डिव के अतिप्रवाह को छिपा रहा हूं (मैंने कोड को सीएसएस डेस्क में जोड़ा)। आपके समाधान के साथ अतिप्रवाह छिपा नहीं है, div अपनी चौड़ाई का विस्तार करता है ...
मार्क

11

मुझे लगता है कि यह एक प्राचीन प्रश्न है, लेकिन मुझे लगा कि फ्लोट वर्टिकल अलाइनमेंट इश्यू का समाधान पोस्ट करना उपयोगी होगा।

जिस सामग्री को आप तैरना चाहते हैं, उसके चारों ओर एक आवरण बनाकर, फिर आप छद्म चयनकर्ताओं को आवरण के भीतर अपनी सामग्री को लंबवत रूप से संरेखित करने से पहले :: बाद या :: का उपयोग कर सकते हैं। आप उस सामग्री के आकार को समायोजित कर सकते हैं जो आप बिना संरेखण को प्रभावित किए बिना चाहते हैं। एकमात्र कैच यह है कि रैपर को अपने कंटेनर की 100% ऊंचाई भरनी चाहिए ।

http://jsfiddle.net/jmdrury/J53SJ/

एचटीएमएल

<div class="container">
    <span class="floater">
        <span class="centered">floated</span>
    </span>
    <h1>some text</h1>
</div>

सीएसएस

div {
    border:1px solid red;
    height:100px;
    width:100%;
    vertical-align:middle;
    display:inline-block;
    box-sizing: border-box;
}
.floater {
    float:right;
    display:inline-block;
    height:100%;
    box-sizing: border-box;
}
.centered {
    border:1px solid blue;
    height: 30px;
    vertical-align:middle;
    display:inline-block;
    box-sizing: border-box;
}
h1 {
    margin:0;
    vertical-align:middle;
    display:inline-block;
    box-sizing: border-box;
}
.container:after, .floater:after, .centered:after, h1:after {
    height:100%;
    content:'';
    font-size:0;
    vertical-align:middle;
    display:inline-block;
    box-sizing: border-box;
}

मुझे यकीन नहीं है कि आप क्या कर रहे हैं, लेकिन centeredकक्षा को हटाने और उस सीएसएस से बहुत सारे अनावश्यक सामान को साफ करने के बाद, यह अभी भी ऊर्ध्वाधर संरेखण ठीक करता है, बस (स्वरूपण के नुकसान के बारे में खेद है ...):div { border:1px solid red; height:100px; } .floater { float:right; height:100%; } h1 { vertical-align:middle; } .container:after, .floater:after, .centered:after { height:100%; content:''; font-size:0; vertical-align:middle; display:inline-block; }
SZ।


2

मैं फ़्लोट्स का उपयोग करने से बचने के लिए अपनी पूरी कोशिश करता हूं ... लेकिन - जब ज़रूरत होती है, तो मैं निम्नलिखित पंक्तियों का उपयोग करके मध्य में लंबवत संरेखित करता हूं:

position: relative;
top: 50%;
transform: translateY(-50%);

-1

मेरे संशोधनों का एकमात्र पतन यह है कि आपके पास एक सेट div ऊंचाई है ... मुझे नहीं पता कि यह आपके लिए कोई समस्या है या नहीं।

http://cssdesk.com/kyPhC


1
हेलो सीन। धन्यवाद, लेकिन मैं एक लचीले समाधान का उपयोग करने की कोशिश कर रहा हूं और इस प्रकार इस तरह के समाधान से बचने की उम्मीद कर रहा हूं ...
मार्क
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.