मेरे पास एक लेआउट है:
<div>
<table>
</table>
</div>
मैं चाहूंगा div
कि मेरे table
बनने तक केवल उतना ही विस्तार हो।
मेरे पास एक लेआउट है:
<div>
<table>
</table>
</div>
मैं चाहूंगा div
कि मेरे table
बनने तक केवल उतना ही विस्तार हो।
जवाबों:
समाधान आपके div
लिए सेट करना है display: inline-block
।
span
या एक div
या ul
कुछ और का उपयोग कर सकते हैं , महत्वपूर्ण हिस्सा उस कंटेनर के लिए है जिसे आप न्यूनतम चौड़ाई में रखना चाहते हैं, उसके पास CSS संपत्ति हैdisplay: inline-block
display: inline-block
संपत्ति सेट margin: 0 auto;
होने के बाद उम्मीद के मुताबिक काम नहीं होगा। उस स्थिति में यदि मूल कंटेनर है text-align: center;
तो inline-block
तत्व क्षैतिज रूप से केंद्रित होगा।
inline-block
मेरे लिए काम नहीं किया, लेकिन inline-flex
डीआईडी।
आप एक ब्लॉक एलीमेंट चाहते हैं जिसमें सीएसएस को सिकोड़-से-फिट चौड़ाई कहा जाता है और कल्पना ऐसी चीज प्राप्त करने के लिए एक धन्य तरीका प्रदान नहीं करती है। CSS2 में, हटना-फिट होना एक लक्ष्य नहीं है, लेकिन इसका मतलब है कि ऐसी स्थिति से निपटने के लिए जहां ब्राउज़र को "पतली हवा से चौड़ाई प्राप्त करना" है। वे परिस्थितियाँ हैं:
जब कोई चौड़ाई निर्दिष्ट नहीं है। मैंने सुना है कि आप CSS3 में जो चाहते हैं उसे जोड़ने के बारे में सोचते हैं। अभी के लिए, उपरोक्त में से एक के साथ करें।
सुविधा को सीधे उजागर नहीं करने का निर्णय अजीब लग सकता है, लेकिन एक अच्छा कारण है। ये महंगा है। सिंक-टू-फिट का मतलब है कम से कम दो बार स्वरूपण: आप किसी तत्व को तब तक प्रारूपित करना शुरू नहीं कर सकते जब तक कि आपको उसकी चौड़ाई का पता न चल जाए, और आप संपूर्ण सामग्री से गुजरने वाली चौड़ाई w / o की गणना नहीं कर सकते। इसके अलावा, एक को फिट-टू-फिट तत्व की आवश्यकता नहीं होती है जितनी बार एक सोच सकता है। आपको अपनी तालिका के चारों ओर अतिरिक्त div की आवश्यकता क्यों है? हो सकता है कि टेबल कैप्शन आप सभी की जरूरत है।
inline-block
लिए बिल्कुल इरादा है और समस्या को पूरी तरह हल करता है।
content-box, max-content, min-content, available, fit-content, auto
fit-content
कीवर्ड (अस्तित्व में नहीं है जब यह उत्तर पहली बार लिखा गया था, और अभी भी पूरी तरह से समर्थित नहीं है ) आपको स्पष्ट रूप से "सिकोड़ने योग्य" एक तत्व के लिए नौकरशाही का आकार घटाने के लिए अनुमति देता है, यदि आप यहाँ सुझाए गए किसी भी हैक की आवश्यकता को दूर करते हैं। केवल समर्थन के साथ ब्राउज़र को लक्षित करने के लिए पर्याप्त भाग्यशाली है। फिर भी; ये अभी के लिए उपयोगी रहें!
float
मैं क्या करने की जरूरत है!
मुझे लगता है का उपयोग कर
display: inline-block;
काम करेगा, हालांकि मैं ब्राउज़र संगतता के बारे में निश्चित नहीं हूं।
एक और उपाय यह होगा कि आप अपने div
को दूसरे में लपेटें div
(यदि आप ब्लॉक व्यवहार बनाए रखना चाहते हैं):
HTML:
<div>
<div class="yourdiv">
content
</div>
</div>
सीएसएस:
.yourdiv
{
display: inline;
}
*display: inline; *zoom: 1;
। मैंने इस विशेष स्थिति के लिए परीक्षण नहीं किया है, लेकिन मैंने हमेशा अतीत में पाया है कि hasLayout हैक केवल IE7 या IE8 के लिए IE7-mode (या qu8 में IE8!) के लिए आवश्यक है।
inline-block
7. IE में सक्षम
display: inline-block
आपके तत्व में एक अतिरिक्त मार्जिन जोड़ता है।
मैं इसकी सिफारिश करूंगा:
#element {
display: table; /* IE8+ and all other modern browsers */
}
बोनस: अब आप आसानी से उस फैंसी नए केंद्र को आसानी #element
से जोड़ सकते हैं margin: 0 auto
।
position: absolute
<IE8 के लिए एक सशर्त टिप्पणी आवश्यक है।
display: inline-block
कोई मार्जिन नहीं जोड़ा जाता है। लेकिन सीएसएस इनलाइन तत्वों के बीच दिखाए जाने वाले व्हाट्सएप को संभालता है।
position: absolute
आप कोशिश कर सकते हैं fit-content
(CSS3):
div {
width: fit-content;
/* To adjust the height as well */
height: fit-content;
}
मेरे लिए क्या काम करता है:
display: table;
में div
। ( फ़ायरफ़ॉक्स और गूगल क्रोम पर परीक्षण किया गया )।
border-collapse: separate;
स्टाइल सेट करना होगा । यह कई ब्राउज़रों में डिफ़ॉल्ट है, लेकिन अक्सर css चौखटे जैसे बूटस्ट्रैप इसे फिर से निर्धारित करते हैं collapse
।
दो बेहतर उपाय हैं
display: inline-block;
या
display: table;
इन दोनों में display:table;
से बेहतर है, क्योंकि display: inline-block;
एक अतिरिक्त मार्जिन जोड़ता है।
के लिए display:inline-block;
आप नकारात्मक मार्जिन विधि का उपयोग कर सकते हैं अतिरिक्त स्थान तय करने के लिए
display:table
बेहतर क्यों है?
display:table
ब्लॉक स्वरूपण संदर्भ में तत्व को छोड़ देता है, इसलिए आप हमेशा की तरह मार्जिन आदि के साथ इसकी स्थिति को नियंत्रित कर सकते हैं। display:-inline-*
दूसरी ओर, तत्व को इनलाइन फॉर्मेटिंग संदर्भ में डालता है, जिसके कारण ब्राउज़र इसके चारों ओर अनाम ब्लॉक आवरण बना देता है, जिसमें वंशानुगत फ़ॉन्ट / लाइन-ऊंचाई सेटिंग्स के साथ लाइन बॉक्स होता है, और ब्लॉक को उस लाइन बॉक्स में सम्मिलित करें (संरेखित करें) यह मूल रूप से आधारभूत रूप से लंबवत है)। इसमें अधिक "जादू" और इसलिए संभावित आश्चर्य शामिल है।
display: -moz-inline-stack;
display: inline-block;
zoom: 1;
*display: inline;
फू हैक - इनलाइन-ब्लॉक स्टाइलिंग के लिए क्रॉस ब्राउज़र समर्थन (2007-11-19) ।
-moz-inline-stack
किस संदर्भ यह दिखाई देगा में जानते हुए भी नहीं है, लेकिन मेरा मानना है कि सीएसएस शैली की संपत्ति float
या तो left
या right
इस प्रभाव पड़ेगा। दूसरी ओर, इसके अन्य दुष्प्रभाव भी होंगे, जैसे कि पाठ को इसके आसपास तैरने की अनुमति देना।
कृपया मुझे सही करें अगर मैं गलत हूं, तो मैं 100% निश्चित नहीं हूं, और वर्तमान में मैं खुद इसका परीक्षण नहीं कर सकता।
आपके प्रश्न का उत्तर भविष्य में मेरे मित्र देता है ...
अर्थात् "आंतरिक" नवीनतम CSS3 अद्यतन के साथ आ रहा है
width: intrinsic;
दुर्भाग्य से IE इसके साथ पीछे है इसलिए यह अभी तक इसका समर्थन नहीं करता है
इसके बारे में और अधिक: सीएसएस आंतरिक और बाहरी नौकरशाही का आकार घटाने मॉड्यूल 3 और मैं उपयोग कर सकते हैं? : आंतरिक और बाहरी नौकरशाही का आकार घटाने ।
अभी के लिए आपको संतुष्ट होना होगा <span>
या <div>
सेट करना होगा
display: inline-block;
intrinsic
मान के रूप में गैर-मानक है। यह वास्तव में है width: max-content
। उस या पहले से जुड़े मसौदे पर एमडीएन पृष्ठ देखें ।
CSS2 के संगत समाधान का उपयोग करना है:
.my-div
{
min-width: 100px;
}
आप अपनी डिव को भी फ्लोट कर सकते हैं जो इसे जितना संभव हो उतना छोटा करने के लिए मजबूर करेगा, लेकिन अगर आपके डिव के अंदर कुछ भी फ्लोटिंग है तो आपको क्लीयरफिक्स का उपयोग करना होगा।
.my-div
{
float: left;
}
width:1px;
white-space: nowrap;
मेरे लिए ठीक काम करता है :)
ठीक है, कई मामलों में आपको डिफॉल्ट डिव के रूप में height
और width
ऑटो के रूप में कुछ भी करने की आवश्यकता नहीं है , लेकिन अगर यह आपका मामला नहीं है, तो आपके inline-block
लिए काम करने वाला प्रदर्शन लागू करना ... मैं आपके लिए बनाए गए कोड को देखता हूं और यह करता हूं आप क्या खोज रहे हैं:
div {
display: inline-block;
}
<div>
<table>
<tr>
<td>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi ultrices feugiat massa sed laoreet. Maecenas et magna egestas, facilisis purus quis, vestibulum nibh.</td>
<td>Nunc auctor aliquam est ac viverra. Sed enim nisi, feugiat sed accumsan eu, convallis eget felis. Pellentesque consequat eu leo nec pharetra. Aenean interdum enim dapibus diam.</td>
<td>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi ultrices feugiat massa sed laoreet. Maecenas et magna egestas, facilisis purus quis, vestibulum nibh.</td>
</tr>
</table>
</div>
इसका उल्लेख टिप्पणियों में किया गया है और इनमें से किसी एक उत्तर को खोजना मुश्किल है:
यदि आप किसी display: flex
भी कारण से उपयोग कर रहे हैं , तो आप इसके बजाय उपयोग कर सकते हैं:
div {
display: inline-flex;
}
display: flex;
आप inline-block
@ user473598 के रूप में उपयोग कर सकते हैं , लेकिन पुराने ब्राउज़रों से सावधान रहें।
/* Your're working with */
display: inline-block;
/* For IE 7 */
zoom: 1;
*display: inline;
/* For Mozilla Firefox < 3.0 */
display:-moz-inline-stack;
मोज़िला इनलाइन-ब्लॉक का बिल्कुल समर्थन नहीं करता है, लेकिन उनके पास -moz-inline-stack
जो है वह उसी के बारे में है
inline-block
प्रदर्शन विशेषता के आसपास कुछ क्रॉस-ब्राउज़र :
https://css-tricks.com/snippets/css/cross-browser-inline-block/
आप इस विशेषता के साथ कुछ परीक्षण देख सकते हैं: https://robertnyman.com/2010/02/24/css-display-inline-block-why-it-rocks-and-why-it-sucks/
inline-block
3.0 (2008) से समर्थन करता है । स्रोत: developer.mozilla.org/en-US/docs/Web/CSS/…
बस अपनी CSS फ़ाइल में एक शैली डालें
div {
width: fit-content;
}
-moz-fit-content
एफएफ के लिए उपयोग कर सकते हैं , संभवतः अन्य विक्रेता उपसर्ग अपने स्वयं की अनुमति देंगे ...
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td>
<div id="content_lalala">
this content inside the div being inside a table, needs no inline properties and the table is the one expanding to the content of this div =)
</div>
</td>
</tr>
</table>
मुझे पता है कि लोग कभी-कभी तालिकाओं को पसंद नहीं करते हैं, लेकिन मैं आपको बताना चाहता हूं, मैंने सीएसएस इनलाइन हैक की कोशिश की, और वे थोड़े से div में काम करते हैं, लेकिन दूसरों में ऐसा नहीं है, इसलिए वास्तव में विस्तार करने वाले div को घेरना आसान था एक तालिका ... और ... इसमें इनलाइन संपत्ति हो सकती है या नहीं और फिर भी तालिका वह है जो सामग्री की कुल चौड़ाई रखने वाली है। =)
एक कार्यशील डेमो यहां है-
.floating-box {
display:-moz-inline-stack;
display: inline-block;
width: fit-content;
height: fit-content;
width: 150px;
height: 75px;
margin: 10px;
border: 3px solid #73AD21;
}
<h2>The Way is using inline-block</h2>
Supporting elements are also added in CSS.
<div>
<div class="floating-box">Floating box</div>
<div class="floating-box">Floating box</div>
<div class="floating-box">Floating box</div>
<div class="floating-box">Floating box</div>
<div class="floating-box">Floating box</div>
<div class="floating-box">Floating box</div>
<div class="floating-box">Floating box</div>
<div class="floating-box">Floating box</div>
</div>
मेरा CSS3 फ्लेक्सबॉक्स दो फ्लेवर में समाधान: शीर्ष पर एक स्पान की तरह व्यवहार करता है और सबसे नीचे एक डिव की तरह व्यवहार करता है, एक आवरण की मदद से सभी चौड़ाई लेता है। उनकी कक्षाएं क्रमशः "टॉप", "बॉटम" और "बॉटमवॉपर" हैं।
body {
font-family: sans-serif;
}
.top {
display: -webkit-inline-flex;
display: inline-flex;
}
.top, .bottom {
background-color: #3F3;
border: 2px solid #FA6;
}
/* bottomwrapper will take the rest of the width */
.bottomwrapper {
display: -webkit-flex;
display: flex;
}
table {
border-collapse: collapse;
}
table, th, td {
width: 280px;
border: 1px solid #666;
}
th {
background-color: #282;
color: #FFF;
}
td {
color: #444;
}
th, td {
padding: 0 4px 0 4px;
}
Is this
<div class="top">
<table>
<tr>
<th>OS</th>
<th>Version</th>
</tr>
<tr>
<td>OpenBSD</td>
<td>5.7</td>
</tr>
<tr>
<td>Windows</td>
<td>Please upgrade to 10!</td>
</tr>
</table>
</div>
what you are looking for?
<br>
Or may be...
<div class="bottomwrapper">
<div class="bottom">
<table>
<tr>
<th>OS</th>
<th>Version</th>
</tr>
<tr>
<td>OpenBSD</td>
<td>5.7</td>
</tr>
<tr>
<td>Windows</td>
<td>Please upgrade to 10!</td>
</tr>
</table>
</div>
</div>
this is what you are looking for.
display: inline-flex;
। क्रोम 62, फ़ायरफ़ॉक्स 57, और सफारी 11 के लिए उपसर्ग के बिना BTW यह काम करता है
कोशिश करो display: inline-block;
। इसके लिए क्रॉस ब्राउज़र संगत होना चाहिए नीचे दिए गए सीएसएस कोड का उपयोग करें।
div {
display: inline-block;
display:-moz-inline-stack;
zoom:1;
*display:inline;
border-style: solid;
border-color: #0000ff;
}
<div>
<table>
<tr>
<td>Column1</td>
<td>Column2</td>
<td>Column3</td>
</tr>
</table>
</div>
फायरबग के साथ छेड़छाड़ से मुझे संपत्ति का मूल्य मिला -moz-fit-content
जो वास्तव में ओपी चाहता था और जिसका पालन किया जा सकता था:
width: -moz-fit-content;
हालाँकि यह केवल फ़ायरफ़ॉक्स पर काम करता है, मैं क्रोम जैसे अन्य ब्राउज़रों के लिए कोई समकक्ष नहीं पा सका।
fit-content
। फ़ायरफ़ॉक्स केवल चौड़ाई का समर्थन करता है। अन्य ब्राउज़र इसे अच्छी तरह से समर्थन करते हैं।
आप इस कोड को आज़मा सकते हैं। CSS सेक्शन में कोड का पालन करें।
div {
display: inline-block;
padding: 2vw;
background-color: green;
}
table {
width: 70vw;
background-color: white;
}
<div>
<table border="colapsed">
<tr>
<td>Apple</td>
<td>Banana</td>
<td>Strawberry</td>
</tr>
<tr>
<td>Apple</td>
<td>Banana</td>
<td>Strawberry</td>
</tr>
<tr>
<td>Apple</td>
<td>Banana</td>
<td>Strawberry</td>
</tr>
</table>
</div>
मैंने एक समान समस्या हल की है (जहां मैं उपयोग नहीं करना चाहता था display: inline-block
क्योंकि आइटम को केंद्रित किया गया था) span
टैग के अंदर एक टैग जोड़कर div
, और सीएसएस स्वरूपण को बाहरी div
टैग से नए आंतरिक span
टैग में ले जा रहा है। बस इसे एक और वैकल्पिक विचार के रूप में बाहर फेंकना यदि display: inline block
आपके लिए उपयुक्त उत्तर नहीं है।
यदि आपके पास कंटेनर तोड़ने वाली लाइनें हैं, तो घंटों के बाद एक अच्छे सीएसएस समाधान की तलाश में है और कोई भी नहीं ढूंढ रहा है , मैं अब इसके बजाय jQuery का उपयोग करता हूं :
$('button').click(function(){
$('nav ul').each(function(){
$parent = $(this).parent();
$parent.width( $(this).width() );
});
});
nav {
display: inline-block;
text-align: left; /* doesn't do anything, unlike some might guess */
}
ul {
display: inline;
}
/* needed style */
ul {
padding: 0;
}
body {
width: 420px;
}
/* just style */
body {
background: #ddd;
margin: 1em auto;
}
button {
display: block;
}
nav {
background: #bbb;
margin: 1rem auto;
padding: 0.5rem;
}
li {
display: inline-block;
width: 40px;
height: 20px;
border: solid thin #777;
margin: 4px;
background: #999;
text-align: center;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button>fix</button>
<nav>
<ul>
<li>3</li>
<li>.</li>
<li>1</li>
<li>4</li>
</ul>
</nav>
<nav>
<ul>
<li>3</li>
<li>.</li>
<li>1</li>
<li>4</li>
<li>1</li>
<li>5</li>
<li>9</li>
<li>2</li>
<li>6</li>
<li>5</li>
<li>3</li>
<li>5</li>
</ul>
</nav>
संशोधित (यदि आपके कई बच्चे हैं तो काम करता है): आप jQuery का उपयोग कर सकते हैं (JSFiddle लिंक देखें)
var d= $('div');
var w;
d.children().each(function(){
w = w + $(this).outerWidth();
d.css('width', w + 'px')
});
JQuery को शामिल करना न भूलें ...