शेष क्षैतिज स्थान को कैसे भरें?


419

मेरे पास 2 divs हैं: एक बाईं ओर और एक मेरे पृष्ठ के दाईं ओर है। बाईं ओर के एक में चौड़ाई तय है और मैं चाहता हूं कि शेष स्थान को भरने के लिए दाईं ओर से एक हो।

#search {
  width: 160px;
  height: 25px;
  float: left;
  background-color: #ffffff;
}

#navigation {
  width: 780px;
  float: left;
  background-color: #A53030;
}
<div id="search">Text</div>
<div id="navigation">Navigation</div>


11
#Navigation पर चौड़ाई और फ्लोट संपत्ति निकालें और यह काम करेगा।
जोहान लेनो


1
@alexchenco: आप हांक द्वारा प्रदान किए गए अपने चुने हुए उत्तर को अपडेट करना चाह सकते हैं
एड्रियन बनो

@ AdrienBe वास्तव में यदि आप रहस्य का जवाब देखते हैं तो मुझे लगता है कि एक और भी बेहतर है। यह सीएसएस का केवल एक ही लाइन है और यह केवल एक ही है कि मेरे लिए काम किया है (मैं नाव के साथ तीन कॉलम बना रही हूँ: छोड़ा; पहले दो तय चौड़ाई और अतिप्रवाह के साथ पर: पिछले एक पर स्वत: और यह बहुत अच्छा काम करता है)
edwardtyl

@edwardtyl मेला काफी वास्तव में, यह एक समान टेक्निक का उपयोग करने के लिए लगता है जैसा कि मैंने stackoverflow.com/questions/4873832/… के
एड्रियन बन

जवाबों:


71

यह आप के लिए जा रहे हैं पूरा करने के लिए लगता है।

#left {
  float:left;
  width:180px;
  background-color:#ff0000;
}
#right {
  width: 100%;
  background-color:#00FF00;
}
<div>
  <div id="left">
    left
  </div>
  <div id="right">
    right
  </div>
</div>


8
आपको चौड़ाई को हटाना होगा: सही div पर 100% हालांकि यह काम करने के लिए।
जोहान लेनो

250
इस समाधान में वास्तव में एक समस्या है। LEFT तत्व से रंग निकालने का प्रयास करें। आप देखेंगे कि RIGHT तत्व से रंग वास्तव में इसके नीचे छिपा है। सामग्री सही जगह पर जाने लगती है, लेकिन राइट div ही नहीं है।
व्योक्रॉट

5
+1 ने मेरी समस्या को भी हल किया। मैंने जो सीखा वह यह था कि मुझे फिलिंग डिव पर "फ्लोट: लेफ्ट" को हटाने की जरूरत थी। मैंने सोचा था कि पेज को
निहित करेगा

12
शायद यह देखने के लिए अच्छा है कि वायोटॉक्स टिप्पणी सही है, लेकिन अतिप्रवाह के साथ हल किया जा सकता है : सही कॉलम पर छिपा हुआ । डेनजेल ने इसका उल्लेख किया है, लेकिन उनका उत्तर स्वीकार नहीं है, इसलिए आप यह याद कर सकते हैं ...
रूड्ट

45
यह स्पष्ट रूप से गलत है, सही तत्व का पूर्ण आकार है, बस यह सामग्री बाएं तत्व के आसपास तैर रही है। यह कोई हल नहीं है, बस और अधिक भ्रम है।
रहस्योद

268

बूसली के उत्तर के साथ मुझे जो समस्या मिली, वह यह है कि यदि दायां कॉलम बाएं से अधिक लंबा है तो यह सिर्फ बाईं ओर लपेटेगा और पूरे स्थान को फिर से शुरू करेगा। यह वह व्यवहार नहीं है जिसकी मुझे तलाश थी। बहुत सारे 'समाधानों' के माध्यम से खोज करने के बाद मैंने तीन कॉलम पेज बनाने पर एक ट्यूटोरियल (अब लिंक मृत है) पाया।

लेखक तीन अलग-अलग तरीकों की पेशकश करता है, एक निश्चित चौड़ाई, एक तीन चर स्तंभों के साथ और दूसरा बाहरी स्तंभों और एक चर चौड़ाई मध्य के साथ। मुझे मिले अन्य उदाहरणों की तुलना में बहुत अधिक सुरुचिपूर्ण और प्रभावी। सीएसएस लेआउट की मेरी समझ में काफी सुधार हुआ।

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

यहाँ Stack Snippets & jsFiddle में एक डेमो है

#left {
  float: left;
  width: 180px;
}

#right {
  margin-left: 180px;
}

/* just to highlight divs for example*/
#left { background-color: pink; }
#right { background-color: lightgreen;}
<div id="left">  left  </div>
<div id="right"> right </div>

Boushley के उदाहरण के साथ बाएं कॉलम दूसरे कॉलम को दाईं ओर रखता है। जैसे ही बायाँ स्तंभ समाप्त होता है दाईं ओर फिर से पूरे स्थान को भरना शुरू कर देता है। यहाँ दायाँ स्तंभ बस पृष्ठ में आगे संरेखित करता है और बायाँ स्तंभ इसे बड़े वसा मार्जिन में रखता है। कोई प्रवाह बातचीत की जरूरत है।


जब आप div टैग को बंद करते हैं, तो उस div के बाद की सामग्री को एक नई पंक्ति में प्रदर्शित किया जाना चाहिए लेकिन ऐसा नहीं हो रहा है। क्या आप कृपया बता सकते हैं कि क्यों?
फडिन

होना चाहिए: मार्जिन-लेफ्ट: 190px; आप भूल गए ';'। साथ ही मार्जिन-लेफ्ट 180px होना चाहिए।
फुडिन

4
नोट: यदि आप दाईं ओर निश्चित-चौड़ाई वाला तत्व चाहते हैं, तो इसे पहले कोड में रखना सुनिश्चित करें या इसे अगली पंक्ति में वैसे भी धकेल दिया जाएगा।
ट्रेवर

2
@RoniTovi, फ्लोटिंग एलिमेंट (ओं) को आपके html में फ्लोटिंग न होने से पहले आना चाहिए। jsfiddle.net/CSbbM/127
हांक

6
तो, यदि आप एक निश्चित चौड़ाई से बचना चाहते हैं तो आप यह कैसे करते हैं? दूसरे शब्दों में, बाएं कॉलम को केवल उतना ही चौड़ा होने दें, जितना कि बाकी होना चाहिए, और बाकी कॉलम को ऊपर उठाने की आवश्यकता है?
पैट्रिक सज्जापस्की

126

इसका समाधान डिस्प्ले प्रॉपर्टी से होता है।

मूल रूप से आपको दो विभाजनों को तालिका कोशिकाओं की तरह बनाने की आवश्यकता है। इसलिए उपयोग करने के बजाय float:left, आपको display:table-cellदोनों div पर उपयोग करना होगा , और गतिशील चौड़ाई div के लिए width:auto;भी आपको सेट करना होगा । दोनों डिवीजनों को display:tableसंपत्ति के साथ 100% चौड़ाई वाले कंटेनर में रखा जाना चाहिए ।

यहाँ सीएसएस है:

.container {display:table;width:100%}
#search {
  width: 160px;
  height: 25px;
  display:table-cell;
  background-color: #FFF;
}
#navigation {
  width: auto;
  display:table-cell;
  /*background-color: url('../images/transparent.png') ;*/
  background-color: #A53030;
}

*html #navigation {float:left;}

और HTML:

<div class="container">
   <div id="search"></div>
   <div id="navigation"></div>
</div>

महत्वपूर्ण: इंटरनेट एक्सप्लोरर के लिए आपको डायनामिक चौड़ाई div पर फ्लोट संपत्ति निर्दिष्ट करने की आवश्यकता है, अन्यथा स्थान नहीं भरा जाएगा।

मुझे उम्मीद है कि इससे आपकी समस्या दूर हो जाएगी। यदि आप चाहें, तो आपने मेरे ब्लॉग पर इसके बारे में लिखा पूरा लेख पढ़ सकते हैं ।


3
तब काम नहीं करता जब चौड़ाई के साथ div के अंदर की सामग्री: ऑटो व्यूपोर्ट में उपलब्ध बाकी जगह से बड़ा हो।
नाथन लॉयर

4
@ साइन, यह समाधान तालिकाओं का उपयोग नहीं करता है, और मुझे पता है कि तालिकाओं का उपयोग केवल सारणीबद्ध डेटा के लिए किया जाना चाहिए। इसलिए, यहाँ संदर्भ से बाहर है। वास्तविक तालिकाओं और प्रदर्शन: तालिका (+ अन्य भिन्नता) गुण पूरी तरह से अलग चीजें हैं।
Mihai Frentiu

1
@ मिहाई फ्रेंतिउ, किन तरीकों से प्रदर्शित होती है: तालिका वास्तविक तालिका तत्व से भिन्न होती है? मैं वास्तव में यह सीखना चाहूंगा यदि वे पूरी तरह से अलग चीजें हैं, तो धन्यवाद। =)
13

2
@eord, HTML तालिकाओं का उपयोग करने से तात्पर्य HTML कोड में संपूर्ण तालिका संरचना की परिभाषा से है। सीएसएस टेबल मॉडल आपको पूरे टेबल ट्री को परिभाषित किए बिना लगभग किसी भी तत्व को टेबल तत्व की तरह व्यवहार करने की अनुमति देता है।
Mihai Frentiu

1
@ मिहाई फ्रेंतिउ, उत्तर के लिए धन्यवाद। लेकिन टेबल तत्वों का आधा हिस्सा डिजाइन तत्वों के रूप में टेबल का उपयोग करने के साथ समस्या का व्यवहार नहीं है?
einord

123

इन दिनों, आपको flexboxविधि का उपयोग करना चाहिए (एक ब्राउज़र उपसर्ग के साथ सभी ब्राउज़रों के लिए अनुकूलित किया जा सकता है)।

.container {
    display: flex;
}

.left {
    width: 180px;
}

.right {
    flex-grow: 1;
}

अधिक जानकारी: https://css-tricks.com/snippets/css/a-guide-to-flexxbox/


सीएसएस विशेषता की एक अच्छी व्याख्या के लिए www.w3schools.com/cssref/css3_pr_flex-grow.asp देखें। एक सरल आधुनिक समाधान लेकिन पुराने ब्राउज़रों में काम नहीं कर सकता।
एडवर्ड

4
फ्लेक्सबॉक्स एफटीडब्ल्यू ... मैंने इस धागे में अन्य सभी समाधानों की कोशिश की है, कुछ भी काम नहीं करता है, मैं इस फ्लेक्सबॉक्स समाधान की कोशिश करता हूं, यह तुरंत काम करता है ... शास्त्रीय सीएसएस (फ्लेक्सबॉक्स और सीएसएस ग्रिड के आगमन से पहले) पूरी तरह से लेआउट में बेकार है ... फ्लेक्स और ग्रिड नियम :-)
लेओ

इसे वर्तमान समय के लिए चयनित समाधान के रूप में स्वीकार किया जाना चाहिए। इसके अलावा, यह केवल "गैर-हैकिश" समाधान है।
ग्रेग

यह एक आकर्षण की तरह काम करता है, मेरे दिन की बचत करता है
n

tsbaa (यह स्वीकृत उत्तर होना चाहिए)
Ryo

104

चूंकि यह एक अधिक लोकप्रिय प्रश्न है, मैं BFC का उपयोग करके एक अच्छा समाधान साझा करने के लिए इच्छुक हूं। यहाँ
निम्नलिखित का कोडपेन नमूना ।

.left {
  float: left;
  width: 100px;
}
.right {
  overflow: auto;
}

इस मामले में, overflow: autoसंदर्भ व्यवहार को ट्रिगर करता है और सही तत्व का विस्तार केवल उपलब्ध शेष चौड़ाई तक करता है और .leftगायब होने पर यह स्वाभाविक रूप से पूर्ण चौड़ाई तक फैल जाएगा । कई यूआई लेआउट के लिए एक अत्यधिक उपयोगी और स्वच्छ चाल, लेकिन शायद "यह क्यों काम करता है" यह समझना मुश्किल है।


1
ओवरफ्लो के लिए ब्राउज़र समर्थन। IE4 !!! w3schools.com/cssref/pr_pos_overflow.asp
येवगेनी अफानसेयेव

1
कभी-कभी मैं ठीक तत्व पर एक बेकार क्षैतिज स्क्रॉलबार के साथ समाप्त होता हूं। वहाँ क्या समस्या है?
पैट्रिक सज्जापस्की

1
@PatrickSzalapski आप एक कोडपेन या इस तरह का मामला बना सकते हैं? अतिप्रवाह autoउसकी सामग्री के आधार पर ट्रिगर हो सकता है। आप एक ही प्रभाव प्राप्त करने के लिए किसी भी अन्य अतिप्रवाह मूल्य का उपयोग कर सकते हैं, hiddenआपके मामले के लिए बेहतर काम कर सकते हैं।
10

1
BFC क्या है, और क्या वेब पर BFC की व्याख्या करने वाला एक अच्छा सामान्य ट्यूटोरियल है?
लूलालाल

1
@ लालालाला इसका अर्थ ब्लॉक फॉरमेटिंग प्रसंग है । यहाँ एक और अधिक गहन व्याख्या है
बोबो

23

यदि आपको कुछ ब्राउज़रों के पुराने संस्करणों ( उदाहरण के लिए IE 10 8 या उससे कम) के साथ संगतता की आवश्यकता नहीं है, तो आप calc()CSS फ़ंक्शन का उपयोग कर सकते हैं :

#left {
   float:left;
   width:180px;
   background-color:#ff0000;
}

#right {
   float: left;
   width: calc(100% - 180px);
   background-color:#00FF00;
}

1
IE 9 और समर्थन कैल्क विशेषता। इस समाधान के साथ एकमात्र समस्या शायद हम बाएं स्तंभ की चौड़ाई नहीं जानते हैं या यह बदल जाता है।
अरासॉफ्ट 11

ठीक है, यह समाधान शायद एक लचीले मामले के लिए उन्मुख है और यह मानते हुए कि आप नहीं जानते हैं या आप मूल कंटेनर की चौड़ाई की परवाह नहीं करते हैं। प्रश्न में @alexchenco ने कहा कि वह "शेष स्थान" को भरना चाहता था ... मुझे लगता है कि वह वैध है :) और हाँ, IE 9 भी समर्थित है, नोट के लिए धन्यवाद;)
मार्कोस बी।

15

@ Boushley का जवाब सबसे नज़दीकी था, हालांकि एक समस्या है जिसका समाधान नहीं किया गया है। सही div ब्राउज़र की पूरी चौड़ाई लेता है; सामग्री अपेक्षित चौड़ाई लेती है। इस समस्या को बेहतर तरीके से देखने के लिए:

<html>
<head>
    <style type="text/css">
    * { margin: 0; padding: 0; }
    body {
        height: 100%;
    }
    #left {
        opacity: 0;
        height: inherit;
        float: left;
        width: 180px;
        background: green;
    }
    #right {
        height: inherit;
        background: orange;
    }
    table {
            width: 100%;
            background: red;
    }
    </style>
</head>
<body>
    <div id="left">
        <p>Left</p>
    </div>
    <div id="right">
        <table><tr><td>Hello, World!</td></tr></table>
    </div>
</body>
</html>

http://jsfiddle.net/79hpS/

सामग्री सही जगह (फ़ायरफ़ॉक्स में) है, हालाँकि, चौड़ाई गलत है। जब बाल तत्व वंशानुक्रम चौड़ाई प्राप्त करने लगते हैं (उदाहरण के साथ तालिका width: 100%) तो उन्हें ब्राउज़र के बराबर एक चौड़ाई दी जाती है, जिससे वे पृष्ठ के दाईं ओर से निकल जाते हैं और एक क्षैतिज स्क्रॉलबार (फ़ायरफ़ॉक्स में) बना लेते हैं या तैरते नहीं हैं और नीचे धकेल दिए जाते हैं ( क्रोम में)।

आप इसे सही कॉलम में जोड़कर आसानी से ठीक कर सकते हैं overflow: hidden। यह आपको सामग्री और div दोनों के लिए सही चौड़ाई देता है। इसके अलावा, तालिका सही चौड़ाई प्राप्त करेगी और उपलब्ध शेष चौड़ाई को भरेगी।

मैंने ऊपर दिए गए कुछ अन्य समाधानों की कोशिश की, वे कुछ बढ़त के मामलों के साथ पूरी तरह से काम नहीं करते थे और उन्हें ठीक करने के लिए वारंट के लिए बहुत दृढ़ थे। यह काम करता है और यह सरल है।

यदि कोई समस्या या चिंता है, तो उन्हें उठाने के लिए स्वतंत्र महसूस करें।


1
overflow: hiddenवास्तव में इसे ठीक करता है, धन्यवाद। (चिह्नित उत्तर गलत बीटीडब्लू है क्योंकि rightवास्तव में माता-पिता पर सभी उपलब्ध स्थान लेता है, आप तत्वों का निरीक्षण करते समय सभी ब्राउज़रों में इसे देख सकते हैं)
huysentruitw

1
क्या कोई समझा सकता है कि यह वास्तव में क्यों काम करता है? मुझे पता है कि मैंने यहां कहीं अच्छी व्याख्या देखी है, लेकिन मैं इसे ढूंढ नहीं पाया।
tomswift

2
@tomswift सेटिंग overflow: hiddenअपने स्वयं के ब्लॉक स्वरूपण संदर्भ में सही कॉलम डालता है। ब्लॉक तत्व उनके लिए उपलब्ध सभी क्षैतिज स्थान लेते हैं। देखें: developer.mozilla.org/en-US/docs/Web/Guide/CSS/…
John Kurlak

overflow:xxxविशेषता कुंजी है। जैसा कि आप कहते हैं, यह #rightनीचे का विस्तार करने से रोकता है #left। यह बहुत ही करीने से एक समस्या हल करता है जो मुझे jQuery UI resizable का उपयोग कर रहा था - #rightएक अतिप्रवाह विशेषता के साथ सेट और #leftresizable के रूप में सेट करने के साथ, आपके पास एक सरल जंगम सीमा है। Jsfiddle.net/kmbro/khr77h0t देखें ।
kbro

13

यहां स्वीकृत समाधान के लिए थोड़ा ठीक है, जो दाएं कॉलम को बाएं कॉलम के नीचे गिरने से रोकता है। एक मुश्किल समाधान के width: 100%;साथ बदल दिया overflow: hidden;, अगर किसी को यह पता नहीं था।

<html>

<head>
    <title>This is My Page's Title</title>
    <style type="text/css">
        #left {
            float: left;
            width: 180px;
            background-color: #ff0000;
        }
        #right {
            overflow: hidden;
            background-color: #00FF00;
        }
    </style>
</head>

<body>
    <div>
        <div id="left">
            left
        </div>
        <div id="right">


right
    </div>
</div>

http://jsfiddle.net/MHeqG/2600/

[संपादित करें] तीन कॉलम लेआउट के लिए एक उदाहरण भी देखें: http://jsfiddle.net/MHeqG/3148/


1
फिक्स्ड लोगो के साथ लचीली नेवी बार का सही समाधान।
ट्रंक

5

यदि आप 2 आइटमों के बीच फ्लेक्सबॉक्स में शेष स्थान को भरने का प्रयास कर रहे हैं, तो निम्न वर्ग को उस खाली जोड़े में 2 के बीच जोड़ दें जिसे आप अलग करना चाहते हैं:

.fill {
  // This fills the remaining space, by using flexbox. 
  flex: 1 1 auto;
}

4

उपयोग display:flex

<div style="width:500px; display:flex">
   <div style="width:150px; height:30px; background:red">fixed width</div>

   <div style="width:100%; height:30px; background:green">remaining</div>
</div>

1
यह जवाब 2014 से जॉर्डन के जवाब की नकल करता है।
TylerH

3

फ़्लोट्स का उपयोग करके इसे व्यवस्थित करने के लिए बूसली का जवाब सबसे अच्छा तरीका है। हालाँकि, यह इसकी समस्याओं के बिना नहीं है। विस्तारित तत्व के भीतर तैरता हुआ घोंसला आपके लिए उपलब्ध नहीं होगा; यह पेज को तोड़ देगा।

विस्तारित तत्व की बात आने पर मूल रूप से "इसे फेक" दिखाया गया है - यह वास्तव में फ्लोटिंग नहीं है, यह सिर्फ अपने मार्जिन का उपयोग करके निश्चित-चौड़ाई वाले फ्लोटेड तत्वों के साथ खेल रहा है।

तब समस्या यह है कि: विस्तार तत्व मंगाई नहीं गई है। यदि आप कोशिश करते हैं और किसी भी नेस्टेड को विस्तार तत्व के भीतर तैरते हुए देखा है, तो उन "नेस्टेड" फ्लोट किए गए आइटम वास्तव में बिल्कुल नेस्टेड नहीं हैं; जब आप clear: both;अपने "नेस्टेड" फ्लोटेड आइटम के नीचे छड़ी करने की कोशिश करते हैं , तो आप शीर्ष-स्तर की फ़्लोटिंग को भी साफ़ कर देंगे।

फिर, Boushley के समाधान का उपयोग करने के लिए, मैं यह जोड़ना चाहूंगा कि आपको निम्नलिखित के रूप में एक div रखना चाहिए: .fakeFloat {height: 100%; चौड़ाई: 100%; बाईंओर तैरना; } और इसे सीधे विस्तारित div के भीतर रखें; सभी विस्तारित div की सामग्री को इस नकली तत्व के भीतर जाना चाहिए।

इस कारण से, मैं इस विशिष्ट मामले में तालिकाओं का उपयोग करने की सलाह दूंगा। फ्लोट किए गए तत्व वास्तव में आपके द्वारा किए गए विस्तार को करने के लिए डिज़ाइन नहीं किए गए हैं, जबकि तालिका का उपयोग करने वाला समाधान तुच्छ है। एक तर्क आम तौर पर बनाया जाता है कि फ्लोटिंग लेआउट के लिए अधिक उचित है, टेबल नहीं .. लेकिन आप यहाँ वैसे भी फ़्लोटिंग का उपयोग नहीं कर रहे हैं, आप इसे फ़ेक कर रहे हैं - और वह इस विशिष्ट मामले के लिए शैलीगत तर्क के उद्देश्य को पराजित करता है, मेरी विनम्र राय


लेआउट के लिए तालिकाओं का उपयोग न करें। आप उनकी ऊंचाई निर्धारित नहीं कर सकते। वे अपनी सामग्री रखने के लिए विस्तार करते हैं, और वे अतिप्रवाह का सम्मान नहीं करते हैं।
kbro

@kbro: लेआउट के लिए तालिकाओं का उपयोग न करें क्योंकि सामग्री और प्रदर्शन को अलग रखा जाना चाहिए। लेकिन अगर सामग्री को एक तालिका के रूप में संरचित किया जाता है, तो निश्चित रूप से इसे क्लिप किया जा सकता है overflow: hiddenjsfiddle.net/dave2/a5jbpc85
डेव

3

मैंने तरल के लिए उपरोक्त समाधान की कोशिश की, और एक निश्चित सही लेकिन उनमें से गैर ने काम किया (मुझे पता है कि सवाल रिवर्स के लिए है लेकिन मुझे लगता है कि यह प्रासंगिक है)। यहाँ क्या काम किया है:

.wrapper {margin-right:150px;}
.wrapper .left {float:left; width:100%; margin-right:-150px;}

.right {float:right; width:150px;}

<div class="wrapper"><div class="left"></div></div>
<div class="right"></div>

3

मुझे भी इसी तरह की समस्या थी और मुझे इसका समाधान मिला: https://stackoverflow.com/a/16909141/3934886

समाधान एक निश्चित केंद्र div और तरल पक्ष स्तंभों के लिए है।

.center{
    background:#ddd;
    width: 500px;
    float:left;
}

.left{
    background:#999;
    width: calc(50% - 250px);
    float:left;
}

.right{
    background:#999;
    width: calc(50% - 250px);
    float:right;
}

यदि आप एक निश्चित बाएँ स्तंभ चाहते हैं, तो बस उसी के अनुसार सूत्र बदलें।


IE8 तरह और केवल आंशिक रूप से पर IE9 (कुछ पुराने ब्राउज़र पर उपलब्ध नहीं caniuse.com/#feat=calc )
Landi

2

आप ग्रिड सीएसएस गुणों का उपयोग कर सकते हैं, अपने बक्से को सबसे स्पष्ट, साफ और सहज तरीके से संरचना कर सकते हैं।

#container{
    display: grid;
    grid-template-columns: 100px auto;
    color:white;
}
#fixed{
  background: red;
  grid-column: 1;
}
#remaining{
  background: green;
  grid-column: 2;
}
<div id="container">
  <div id="fixed">Fixed</div>
  <div id="remaining">Remaining</div>
</div>


1

मुझे आश्चर्य है कि कि कोई भी इस्तेमाल किया position: absoluteसाथposition: relative

तो, एक और समाधान होगा:

एचटीएमएल

<header>
  <div id="left"><input type="text"></div>
  <div id="right">Menu1 Menu2 Menu3</div>
</header>

सीएसएस

header { position: relative;  }
#left {
    width: 160px;
    height: 25px;
}
#right {
    position: absolute;
    top: 0px;
    left: 160px;
    right: 0px;
    height: 25px;
}

Jsfiddle उदाहरण


0

/ * * सीएसएस * /

#search {
 position: absolute;
 width: 100px;
}
.right-wrapper {
  display: table;
  width: 100%;
  padding-left:100px;
}
.right-wrapper #navigation {
 display: table-cell;
 background-color: #A53030;
}

/ * * html * /

<div id="search"></div>
<div class="right-wrapper">
   <div id="navigation"></div>
</div>

0

मेरे पास इसके लिए एक बहुत ही सरल उपाय है! // HTML

<div>
<div id="left">
    left
</div>
<div id="right">
    right
</div>

// सीएसएस

#left {
float:left;
width:50%;
position:relative;
background-color:red;
}
#right {
position:relative;
background-color:#00FF00;}

लिंक: http://jsfiddle.net/MHeqG/


0

मेरे पास एक समान मुद्दा था और निम्नलिखित के साथ आया जिसने अच्छी तरह से काम किया

सीएसएस:

.top {
width: auto;
height: 100px;
background-color: black;
border: solid 2px purple;
overflow: hidden;
}
.left {
float:left;
width:100px;
background-color:#ff0000;
padding: 10px;
border: solid 2px black;
}
.right {
width: auto;
background-color:#00FF00;
padding: 10px;
border: solid 2px orange;
overflow: hidden;
}
.content {
margin: auto;
width: 300px;
min-height: 300px;
padding: 10px;
border: dotted 2px gray;
}

HTML:

<div class=top>top </div>
<div>
    <div class="left">left </div>
    <div class="right">
        <div class="content">right </div>
    </div>
</div>

जब खिड़की सिकुड़ जाती है तो यह विधि नहीं लपेटेगी लेकिन 'सामग्री' क्षेत्र का विस्तार करेगी। यह साइट मेनू (बाएं) के लिए एक स्थिर चौड़ाई रखेगा।

और ऑटो के लिए कंटेंट बॉक्स और लेफ्ट वर्टिकल बॉक्स (साइट मेनू) डेमो के लिए:

https://jsfiddle.net/tidan/332a6qte/


0

दाईं ओर की स्थिति relative, हटाने widthऔर floatगुणों को जोड़ने का प्रयास करें , फिर मूल्य के साथ संपत्ति जोड़ें leftऔर ।right0

इसके अलावा, आप इसकी स्थिति बनाए रखने के margin leftलिए मूल्य को लेफ्ट एलिमेंट की चौड़ाई (+ बीच में स्पेस की आवश्यकता होने पर कुछ पिक्सल के आधार पर) के साथ नियम जोड़ सकते हैं ।

यह उदाहरण मेरे लिए काम कर रहा है:

   #search {
        width: 160px;
        height: 25px;
        float: left;
        background-color: #FFF;
    }

    #navigation {  
        display: block;  
        position: relative;
        left: 0;
        right: 0;
        margin: 0 0 0 166px;             
        background-color: #A53030;
    }

0

.container {
  width:100%;
  display:table;
  vertical-align:middle;
}

.left {
  width:100%;
  display:table-cell;
  text-align:center;
}

.right {
  width:40px;
  height:40px;
  display:table-cell;
  float:right;
}
<div class="container">
  <div class="left">Left</div>
  <div class="right">Right</div>
</div

इसे इस्तेमाल करे। इसने मेरे लिए काम किया।


0

मैं दो दिनों से इस समस्या पर काम कर रहा हूं और एक समाधान है जो आपके और किसी और के लिए काम कर सकता है और बाईं ओर के चारों ओर लपेटे बिना स्क्रीन के शेष हिस्से में दाईं ओर भरने के लिए एक उत्तरदायी फिक्स्ड चौड़ाई बनाने की कोशिश कर रहा है। मेरा मानना ​​है कि पेज को ब्राउज़रों के साथ-साथ मोबाइल उपकरणों में भी उत्तरदायी बनाया जा सकता है।

यहाँ कोड है

// Fix the width of the right side to cover the screen when resized
$thePageRefreshed = true;
// The delay time below is needed to insure that the resize happens after the window resize event fires
// In addition the show() helps.  Without this delay the right div may go off screen when browser is refreshed 
setTimeout(function(){
    fixRightSideWidth();
    $('.right_content_container').show(600);
}, 50);

// Capture the window resize event (only fires when you resize the browser).
$( window ).resize(function() {
    fixRightSideWidth();
});

function fixRightSideWidth(){
    $blockWrap = 300; // Point at which you allow the right div to drop below the top div
    $normalRightResize = $( window ).width() - $('.left_navigator_items').width() - 20; // The -20 forces the right block to fall below the left
    if( ($normalRightResize >= $blockWrap) || $thePageRefreshed == true ){
        $('.right_content_container').width( $normalRightResize );
        $('.right_content_container').css("padding-left","0px");
        
        /* Begin test lines these can be deleted */
        $rightrightPosition = $('.right_content_container').css("right");
        $rightleftPosition = $('.right_content_container').css("left");
        $rightwidthPosition = $('.right_content_container').css("width");
        $(".top_title").html('window width: '+$( window ).width()+"&nbsp;"+'width: '+$rightwidthPosition+"&nbsp;"+'right: '+$rightrightPosition);
        /* End test lines these can be deleted */
    
    
    }
    else{
        if( $('.right_content_container').width() > 300 ){
            $('.right_content_container').width(300);
        }
        
        /* Begin test lines these can be deleted */
        $rightrightPosition = $('.right_content_container').css("right");
        $rightleftPosition = $('.right_content_container').css("left");
        $rightwidthPosition = $('.right_content_container').css("width");
        $(".top_title").html('window width: '+$( window ).width()+"&nbsp;"+'width: '+$rightwidthPosition+"&nbsp;"+'right: '+$rightrightPosition);
        /* End test lines these can be deleted */
    
    }
    if( $thePageRefreshed == true ){
        $thePageRefreshed = false;
    }
}
/* NOTE: The html and body settings are needed for full functionality
and they are ignored by jsfiddle so create this exapmle on your web site
*/
html {
    min-width: 310px;
    background: #333;
    min-height:100vh;
}

body{
	background: #333;
	background-color: #333;
	color: white;
    min-height:100vh;
}

.top_title{
  background-color: blue;
  text-align: center;
}

.bottom_content{
	border: 0px;
	height: 100%;
}

.left_right_container * {
    position: relative;
    margin: 0px;
    padding: 0px;
    background: #333 !important;
    background-color: #333 !important;
    display:inline-block;
    text-shadow: none;
    text-transform: none;
    letter-spacing: normal;
    font-size: 14px;
    font-weight: 400;
    font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;
    border-radius: 0;
    box-sizing: content-box;
    transition: none;
}

.left_navigator_item{
	display:inline-block;
	margin-right: 5px;
	margin-bottom: 0px !important;
	width: 100%;
	min-height: 20px !important;
	text-align:center !important;
	margin: 0px;
	padding-top: 3px;
	padding-bottom: 3px;
	vertical-align: top;
}

.left_navigator_items {
    float: left;
    width: 150px;
}

.right_content_container{
    float: right;
    overflow: visible!important;
    width:95%; /* width don't matter jqoery overwrites on refresh */
    display:none;
    right:0px;
}

.span_text{
	background: #eee !important;
	background-color: #eee !important;
	color: black !important;
	padding: 5px;
	margin: 0px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<div class="top_title">Test Title</div>
<div class="bottom_content">
    <div class="left_right_container">
        <div class="left_navigator_items">
            <div class="left_navigator_item">Dashboard</div>
            <div class="left_navigator_item">Calendar</div>
            <div class="left_navigator_item">Calendar Validator</div>
            <div class="left_navigator_item">Bulletin Board Slide Editor</div>
            <div class="left_navigator_item">Bulletin Board Slide Show (Live)</div>
            <div class="left_navigator_item">TV Guide</div>
        </div>
        <div class="right_content_container">
            <div class="span_text">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam ullamcorper maximus tellus a commodo. Fusce posuere at nisi in venenatis. Sed posuere dui sapien, sit amet facilisis purus maximus sit amet. Proin luctus lectus nec rutrum accumsan. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Ut fermentum lectus consectetur sapien tempus molestie. Donec bibendum pulvinar purus, ac aliquet est commodo sit amet. Duis vel euismod mauris, eu congue ex. In vel arcu vel sem lobortis posuere. Cras in nisi nec urna blandit porta at et nunc. Morbi laoreet consectetur odio ultricies ullamcorper. Suspendisse potenti. Nulla facilisi.

Quisque cursus lobortis molestie. Aliquam ut scelerisque leo. Integer sed sodales lectus, eget varius odio. Nullam nec dapibus lorem. Aenean a mattis velit, ut porta nunc. Phasellus aliquam volutpat molestie. Aliquam tristique purus neque, vitae interdum ante aliquam ut.

Pellentesque quis finibus velit. Fusce ac pulvinar est, in placerat sem. Suspendisse nec nunc id nunc vestibulum hendrerit. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Mauris id lectus dapibus, tempor nunc non, bibendum nisl. Proin euismod, erat nec aliquet mollis, erat metus convallis nulla, eu tincidunt eros erat a lectus. Vivamus sed mattis neque. In vitae pellentesque mauris. Ut aliquet auctor vulputate. Duis eleifend tincidunt gravida. Sed tincidunt blandit tempor.

Duis pharetra, elit id aliquam placerat, nunc arcu interdum neque, ac luctus odio felis vitae magna. Curabitur commodo finibus suscipit. Maecenas ut risus eget nisl vehicula feugiat. Sed sed bibendum justo. Curabitur in laoreet dolor. Suspendisse eget ligula ac neque ullamcorper blandit. Phasellus sit amet ultricies tellus.

In fringilla, augue sed fringilla accumsan, orci eros laoreet urna, vel aliquam ex nulla in eros. Quisque aliquet nisl et scelerisque vehicula. Curabitur facilisis, nisi non maximus facilisis, augue erat gravida nunc, in tempus massa diam id dolor. Suspendisse dapibus leo vel pretium ultrices. Sed finibus dolor est, sit amet pharetra quam dapibus fermentum. Ut nec risus pharetra, convallis nisl nec, tempor nisl. Vivamus sit amet quam quis dolor dapibus maximus. Suspendisse accumsan sagittis ligula, ut ultricies nisi feugiat pretium. Cras aliquam velit eu venenatis accumsan. Integer imperdiet, eros sit amet dignissim volutpat, tortor enim varius turpis, vel viverra ante mauris at felis. Mauris sed accumsan sapien. Interdum et malesuada fames ac ante ipsum primis in faucibus. Ut vel magna commodo, facilisis turpis eu, semper mi. Nulla massa risus, bibendum a magna molestie, gravida maximus nunc.</div>
        </div>
    </div>
</div>

यहाँ मेरी फ़ाइडल है जो आपके लिए काम कर सकती है जैसा कि मेरे लिए था। https://jsfiddle.net/Larry_Robertson/62LLjapm/


0

वस्तुओं और कंटेनरों के लिए नियम;

Container: {*** display: table; ***}
Items: {*** display: table-cell; width: 100%; ***}

सफेद-स्थान का उपयोग करें : नॉरैप; उनके अविनाशी के लिए अंतिम मदों में ग्रंथों के लिए।

आइटम X% | आइटम Y% | आइटम Z%

कुल लंबाई हमेशा = 100%!

अगर

Item X=50%
Item Y=10%
Item z=20%

फिर

आइटम X = 70%

आइटम X प्रमुख है (पहले आइटम सीएसएस लेआउट में प्रमुख हैं)!

अधिकतम सामग्री आज़माएं ; कंटेनर में div प्रसार के लिए अंदर div के लिए संपत्ति:

div[class="item"] {
...
  width: -webkit-max-content;
  width: -moz-max-content;
  width: max-content;
...

}


0

सबसे आसान उपाय मार्जिन का उपयोग करना है। यह भी उत्तरदायी होगा!

<div style="margin-right: auto">left</div>
<div style="margin-left: auto; margin-right:auto">center</div>
<div style="margin-left: auto">right</div>

0

सबसे सरल उपाय सिर्फ बाईं div div को 100% के बराबर बनाना है - दाएँ div की चौड़ाई और उनके बीच कोई मार्जिन।

<div class="cont">
  <div class="search">
    Big Logo Text
  </div>
  <nav>
    <ul class="navbar">
      <li><a href="#1">NavLink1</a></li>
      <li><a href="#2">NavLink2</a></li>
      <li><a href="#3">NavLink3</a></li>
      <li><a href="#4">NavLink4</a></li>
      <li><a href="#5">NavLink5</a></li>
    </ul>
  </nav>
</div>

.cont{
  display: inline-grid;
  grid-template-columns: 160px 10px calc(100% - 170px);
  grid-template-rows: auto;
  grid-template-areas: "search .  navigation";
  width: 100%;
  height: auto;
  text-align: center;
}

.search {
  grid-area: search;
  height: 90px;
  background-color: #00FF00;
  line-height: 80px;
  font-size: 1.4rem;
  font-weight: 600;
}
nav {
  grid-area: navigation;
  height: 90px;
  background-color: #A53030;
}

.navbar{
  display: flex;
  height: 30px;
  width: 100%;
  padding: 0%;
  list-style-type: none;
  flex-flow: row wrap;
  flex: 0 1 auto;
  justify-content: space-between;
  align-content: flex-start;
  align-items: flex-start;
}

.navbar a{
    outline: 0;
    text-decoration: none;
}

https://codepen.io/tamjk/pen/dybqKBN


-2

मैं इस समस्या में कुछ jqueryUI नियंत्रण लेआउट की कोशिश कर रहा था । यद्यपि अब सामान्य दर्शन "के DIVबजाय " का उपयोग करता है TABLE, मैंने अपने मामले में TABLE का उपयोग करते हुए बहुत बेहतर काम पाया। विशेष रूप से, यदि आपको दो तत्वों (जैसे, ऊर्ध्वाधर केंद्र, क्षैतिज केंद्र, आदि) के भीतर सीधा संरेखण करने की आवश्यकता है, तो टेबल के साथ उपलब्ध विकल्प इसके लिए सरल, सहज नियंत्रण देते हैं।

यहाँ मेरा समाधान है:

<html>
<head>
  <title>Sample solution for fixed left, variable right layout</title>
  <style type="text/css">
    #controls {
      width: 100%;
    }
    #RightSide {
      background-color:green;
    }
  </style>
</head>

<body>
<div id="controls">
  <table border="0" cellspacing="2" cellpadding="0">
    <TR>
      <TD>
        <button>
FixedWidth
        </button>
      </TD>
      <TD width="99%" ALIGN="CENTER">
        <div id="RightSide">Right</div>
      </TD>
    </TR>
  </table>
</div>
</body>
</html>

9
आपको कभी भी, कभी भी, लेकिन सारणीबद्ध डेटा के लिए कभी भी सारणी का उपयोग नहीं करना चाहिए। कभी।
mmmeff

1
तालिकाओं के साथ समस्या यह है कि मार्कअप भ्रामक होगा यदि आप जो प्रदर्शित करने का प्रयास कर रहे हैं वह सारणीबद्ध डेटा नहीं है। आप मार्कअप ले जाने अर्थ के सिद्धांत की उपेक्षा करने के लिए चुनते हैं, तो आप के रूप में अच्छी वापस करने के लिए मिल सकता है <font>, <b>आदि एचटीएमएल विकसित अतीत कि प्रस्तुति पर कम ध्यान दें।
विल्किनेमेनी

4
पता नहीं क्यों हर कोई टेबल के बारे में पता लगाता है। कभी-कभी वे उपयोगी होते हैं।
जेंडीग जूल

आप किसी तालिका की ऊंचाई तय नहीं कर सकते। यदि सामग्री बड़ी हो जाती है, तो तालिका में है। और यह सम्मान नहीं करता है overflow
kbro

@ जैन्डीग: स्पष्टीकरण के लिए मिहाई फ्रेंटियू का जवाब देखें। CSS का पूरा उद्देश्य सामग्री को उपस्थिति से अलग करना है। display:tableगैर-सारणीबद्ध डेटा के वांछित स्वरूप को प्राप्त करने के लिए गुणों का उपयोग करना साफ है। लेआउट को नियंत्रित करने के लिए HTML टेबल्स में पेज कॉलम या फॉर्म नियंत्रण जैसे गैर-सारणीबद्ध डेटा को मजबूर करना अशुद्ध है।
डेव
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.