मूल कंटेनर की 100% चौड़ाई के लिए एक निश्चित div सेट करें


83

मेरे पास कुछ गद्दी के साथ एक आवरण है, मेरे पास एक प्रतिशत (40%) चौड़ाई के साथ एक अस्थायी रिश्तेदार डिव है।

फ्लोटिंग रिलेटिव डिव के अंदर मेरे पास एक निश्चित डिव है जिसे मैं उसके माता-पिता के समान आकार देना चाहूंगा। मैं समझता हूं कि दस्तावेज़ के प्रवाह से एक निश्चित div हटा दिया जाता है और जैसे कि आवरण के पैडिंग को अनदेखा कर रहा है।

एचटीएमएल

<div id="wrapper">
  <div id="wrap">
    Some relative item placed item
    <div id="fixed"></div>
  </div>
</div>

सीएसएस

body { 
  height: 20000px 
}  
#wrapper {
  padding: 10%;
}  
#wrap { 
  float: left;
  position: relative;
  width: 40%; 
  background: #ccc; 
} 
#fixed { 
  position: fixed;
  width: inherit;
  padding: 0px;
  height: 10px;
  background-color: #333;
}

यहाँ अनिवार्य पहेली है: http://jsfiddle.net/C93mk/489/

क्या किसी को यह पूरा करने का एक तरीका पता है?

मैंने जिस उपलब्धि को हासिल करने की कोशिश की है, उस पर अधिक विस्तार दिखाने के लिए मैंने फिडेल में संशोधन किया है, इस भ्रम के लिए खेद है: http://jsfiddle.net/EVYRE/4/

जवाबों:


41

आप .wrapper के लिए गद्दी के बजाय .wrap कंटेनर के लिए मार्जिन का उपयोग कर सकते हैं:

body{ height:20000px }
#wrapper { padding: 0%; }
#wrap{ 
    float: left;
    position: relative;
    margin: 10%;
    width: 40%; 
    background:#ccc; 
}
#fixed{ 
    position:fixed;
    width:inherit;
    padding:0px; 
    height:10px;
    background-color:#333;    
}

jsfiddle


मेरे फिडेल को बेहतर ढंग से समझाने के लिए कि मैं क्या कर रहा हूँ: jsfiddle.net/EVYRE/4
जैक मर्डोक

@JackMurdoch, js के बिना एक ही रास्ता मुझे पता है और गुणों के calcलिए उपयोग में है । को देखो jsfiddlerightleft
YD1m

यह काम नहीं करेगा जब आवरण अधिकतम-चौड़ाई (उदाहरण में 600px) से नीचे सिकुड़ा हो, लेकिन मेरा मानना ​​है कि आप सही हैं कि इसे जावास्क्रिप्ट के बाहर नहीं किया जा सकता है। सहायता के लिए धन्यवाद।
जैक मर्डोक

5
यह वास्तव में काम नहीं करता है, इस फिडेल jsfiddle.net/EVYRE/4 को देखें । #Sidebar की चौड़ाई उसके माता-पिता (#sidebar_wrap) के सापेक्ष होगी, लेकिन ऐसा नहीं है, और यह उसके माता-पिता को पछाड़ देता है।
मिली

मुझे लगता है कि यह केवल इसलिए काम करता है क्योंकि निश्चित तत्व और विंडो के बीच केवल एक div है। यह काम नहीं करेगा यदि तय तत्व कई बार उन तत्वों
Jay

3

इस बारे में कैसे ?

$( document ).ready(function() {
    $('#fixed').width($('#wrap').width());
});

Jquery का उपयोग करके आप किसी भी प्रकार की चौड़ाई सेट कर सकते हैं :)

संपादित करें: जैसा कि टिप्पणियों में सपने द्वारा कहा गया है, इस प्रभाव के लिए सिर्फ JQuery का उपयोग व्यर्थ है और यहां तक ​​कि काउंटर उत्पादक भी है। मैंने उन लोगों के लिए यह उदाहरण बनाया है जो अपने पृष्ठों पर अन्य सामान के लिए JQuery का उपयोग करते हैं और इस भाग के लिए भी इसका उपयोग करने पर विचार करते हैं। मेरे द्वारा किए गए किसी भी असुविधा के लिए मैं माफी माँगता हूँ।


"फ्लोटिंग रिलेटिव डिव के अंदर मेरे पास एक निश्चित डिव है जो मुझे उसके माता-पिता के समान आकार में पसंद आएगा" - "#wrap" के अंदर उसके पास '#' सब 'है जिसे वह' #wrap 'div के समान आकार पसंद करता है। (ऊंचाई पहले से ही निर्धारित है इसलिए मैंने इसे नहीं बदला)। कृपया मुझे समझाएं कि मुझे इसका कौन सा हिस्सा नहीं मिला? और परिणाम का कौन सा हिस्सा अन्य उत्तरों से अलग है?
हिस्ट्रो वल्कनोव

2
अरे दोस्त, कोई अपराध नहीं। वास्तव में सवाल यह था कि सीएसएस में एक उत्तर दिया जाए, जिसके लिए आपने jQuery पेश किया, जो उत्तर की तुलना में सुझाव होना चाहिए था।
स्वप्नदोष

मुझे पता है कि मैंने हाशिये के साथ दूसरे समाधान को भी उकेरा है, लेकिन मैं यह नहीं देखता कि कोई भी एक जेकरी समाधान क्यों नहीं कर सकता है। सोचिए अगर अब से 5-6 महीने बाद कोई व्यक्ति इस सवाल को गूगल के माध्यम से ढूंढता है और अपने मामले के लिए jquery समाधान को अधिक उपयुक्त मानता है?
हिस्टोरो वल्कनोव

1
मैं मानता हूं कि आपका समाधान jquery के दायरे में सही है, लेकिन सादे सीएसएस में नहीं। जब मैं 'jquery lib' का उपयोग नहीं कर रहा हूं, तो क्या आप मुझसे यह उम्मीद करते हैं कि आप इसे उपयोग कर सकते हैं क्योंकि मैंने jquery में एक सरल समाधान पाया है जैसे कि आपने पोस्ट किया है। Jquery lib फ़ाइल 32 KB zipped / 91.6 KB (उत्पादन मोड) या 252 KB (है) विकास मोड)। यह वास्तव में लायक नहीं है, तो jQuery के उपयोग के लिए किसी के लिए संभव नहीं है। साइट पर प्रदर्शन के मामले में jQuery या प्रमुख बिंदु का एक संभावित नुकसान
ड्रीमवेअर

4
यदि आप विंडो का आकार बदलते हैं तो यह टूट जाता है। अब आपको ऑनरेस्स कैलकुलेशन करना होगा, कूल, महंगा लग रहा है। एनटीआई
जेई

3

माता-पिता में एक परिवर्तन जोड़ने की कोशिश करें (कुछ भी करने की ज़रूरत नहीं है, एक शून्य अनुवाद हो सकता है) और निर्धारित बच्चे की चौड़ाई 100% पर सेट करें

body{ height:20000px }
#wrapper {padding:10%;}
#wrap{ 
    float: left;
    position: relative;
    width: 40%; 
    background:#ccc; 
    transform: translate(0, 0);
}
#fixed{ 
    position:fixed;
    width:100%;
    padding:0px;
    height:10px;
    background-color:#333;
}
<div id="wrapper">
    <div id="wrap">
    Some relative item placed item
    <div id="fixed"></div>
    </div>
</div>


1

पैरेंट डिव के बेस में फूटर को पिन करने के लिए आप पोजिशनिंग का उपयोग कर सकते हैं। मैंने रैप करने के लिए 10px पैडिंग-बॉटम भी जोड़ा है (पाद की ऊंचाई से मेल खाता)। पूर्ण स्थिति प्रवाह के बाहर के बजाय पैरेंट डिव के सापेक्ष है क्योंकि आपने पहले ही इसे स्थिति सापेक्ष विशेषता दे दी है।

body{ height:20000px }
#wrapper {padding:10%;}
#wrap{ 
    float: left;
    padding-bottom: 10px;
    position: relative;
    width: 40%; 
    background:#ccc; 
}
#fixed{ 
    position:absolute;
    width:100%;
    left: 0;
    bottom: 0;
    padding:0px;
    height:10px;
    background-color:#333;

}

http://jsfiddle.net/C93mk/497/


मैंने शुरुआत में यह कोशिश की थी लेकिन समस्या यह है कि जब आप इसे स्क्रॉल करते हैं तो बाकी हिस्सों के साथ चलता है, इस प्रकार यह वास्तव में निश्चित स्थिति का व्यवहार नहीं है
थिंकबोनोबो

1

आदमी आपका कंटेनर मूल तत्व की चौड़ाई का 40% है

लेकिन जब आप स्थिति का उपयोग करते हैं: निश्चित, चौड़ाई व्यूपोर्ट (दस्तावेज़) की चौड़ाई पर आधारित होती है ...

के बारे में सोच, मुझे एहसास हुआ कि आपके मूल तत्व में 10% पैडिंग (बाएं और दाएं) हैं, इसका मतलब है कि आपके तत्व में कुल पृष्ठ चौड़ाई का 80% है। इसलिए आपके तय तत्व का कुल चौड़ाई के 80% के आधार पर 40% होना चाहिए

तो आपको बस अपनी # क्लास को बदलने की जरूरत है

#fixed{ 
    position:fixed;
    width: calc(80% * 0.4);
    height:10px;
    background-color:#333;
}

यदि आप sass, postcss या किसी अन्य css संकलक का उपयोग करते हैं, तो जब आप मूल तत्व के पैडिंग मान को बदलते हैं तो आप लेआउट को तोड़ने से बचने के लिए चर का उपयोग कर सकते हैं।

यहाँ अपडेटेड फिडेल है http://jsfiddle.net/C93mk/2343/

मुझे आशा है कि यह मदद करता है, का संबंध है


0

अपने अंतिम jsfiddle के शीर्ष पर , आप बस एक चीज से चूक गए:

#sidebar_wrap {
  width:40%;
  height:200px;
  background:green;
  float:right;
}
#sidebar {
  width:inherit;
  margin-top:10px;
  background-color:limegreen;
  position:fixed;
  max-width: 240px; /*This is you missed*/
}

लेकिन, इससे आपकी समस्या का समाधान कैसे होगा? सरल, यह समझाने की सुविधा देता है कि पहले की अपेक्षा बड़ा क्यों है।

फिक्स्ड एलिमेंट #sidebarविंडो के आकार को आधार के रूप में उपयोग करेगा, अपने स्वयं के आकार को पाने के लिए, हर दूसरे निश्चित तत्व की तरह, एक बार इस तत्व को परिभाषित करने width:inheritऔर #sidebar_wrapचौड़ाई में मूल्य के रूप में 40% होने के बाद, फिर गणना करेगा window.width * 40%, तब जब आपकी विंडो की चौड़ाई आपके से बड़ी हो .containerचौड़ाई, #sidebarसे बड़ा होगा #sidebar_wrap

यह तरीका है, #sidebar_wrapइससे बड़ा होने से रोकने के लिए, आपको अपनी अधिकतम चौड़ाई निर्धारित करनी चाहिए #sidebar_wrap

इस jsfiddle की जाँच करें जो एक कामकाजी कोड दिखाता है और बेहतर तरीके से समझाता है कि यह कैसे काम करता है।


-3

निकालें Padding: 10%;या का उपयोग पिक्सल के बजाय प्रतिशत के लिए.wrap

उदाहरण देखें: http://jsfiddle.net/C93mk/493/

HTML:

<div id="wrapper">
    <div id="wrap">
    Some relative item placed item
    <div id="fixed"></div>
    </div>
</div>

सीएसएस:

body{ height:20000px }
#wrapper {padding:10%;}
#wrap{ 
    float: left;
    position: relative;
    width: 200px; 
    background:#ccc; 
}
#fixed{ 
    position:fixed;
    width:inherit;
    padding:0px;
    height:10px;
    background-color:#333;

}

उसे #wrap पर प्रतिशत होने के लिए चौड़ाई चाहिए। लेकिन आप के साथ एक निश्चित रखा है।
अचिन्त्य समिंदिका

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