Hoe kan ik een div maken die niet groter is dan de inhoud?

Ik heb een indeling die lijkt op:

<div>
    <table>
    </table>
</div>

Ik wil dat de divalleen zo breed wordt als mijn tablewordt.


Antwoord 1, autoriteit 100%

De oplossing is om je divin te stellen op display: inline-block.


Antwoord 2, autoriteit 13%

Je wilt een blokelement met wat CSS ‘shrink-to-fit’-breedte noemt en de specificatie biedt geen gezegende manier om zoiets te krijgen. In CSS2 is shrink-to-fit geen doel, maar een middel om een situatie aan te pakken waarin de browser “moet” een breedte uit het niets halen. Die situaties zijn:

  • zweven
  • absoluut gepositioneerd element
  • inline-blokelement
  • tabelelement

wanneer er geen breedte is opgegeven. Ik heb gehoord dat ze eraan denken toe te voegen wat je wilt in CSS3. Voor nu, doe het met een van de bovenstaande.

De beslissing om de functie niet direct beschikbaar te stellen lijkt misschien vreemd, maar er is een goede reden voor. Het is duur. Shrink-to-fit betekent minimaal twee keer formatteren: u kunt pas beginnen met het formatteren van een element als u de breedte kent, en u kunt de breedte niet berekenen zonder de volledige inhoud te doorlopen. Bovendien heb je niet zo vaak een krimpkous nodig als je zou denken. Waarom heb je extra div rond je tafel nodig? Misschien is het bijschrift van de tabel alles wat je nodig hebt.


Antwoord 3, autoriteit 9%

Ik denk dat het gebruik van

display: inline-block; 

zou werken, maar ik ben niet zeker van de browsercompatibiliteit.


Een andere oplossing zou zijn om je divin een andere divte stoppen (als je het blokkeringsgedrag wilt behouden):

HTML:

<div>
    <div class="yourdiv">
        content
    </div>
</div>

CSS:

.yourdiv
{
    display: inline;
}

Antwoord 4, autoriteit 9%

display: inline-blockvoegt een extra marge toe aan je element.

Ik zou dit aanraden:

#element {
    display: table; /* IE8+ and all other modern browsers */
}

Bonus:je kunt dat mooie nieuwe #elementnu ook gemakkelijk centreren door margin: 0 autotoe te voegen.


Antwoord 5, autoriteit 4%

Er zijn twee betere oplossingen

  1. display: inline-block;

    OF

  2. display: table;

Van deze twee is display:table;beter,omdat display: inline-block;een extra marge toevoegt.

Voor display:inline-block;kunt u de negatieve margemethode gebruiken om de extra spatie te corrigeren


Antwoord 6, autoriteit 3%

Wat voor mij werkt is:

display: table;

in de div. (Getest op Firefoxen Google Chrome).


Antwoord 7, autoriteit 3%

display: -moz-inline-stack;
display: inline-block;
zoom: 1;
*display: inline;

Foo Hack – Cross Browser-ondersteuning voor inline- blok Styling (2007-11-19).


Antwoord 8, autoriteit 2%

Ik weet niet in welke context dit zal verschijnen, maar ik denk dat de CSS-stijleigenschap floatofwel leftof rightdit effect zal hebben . Aan de andere kant heeft het ook andere bijwerkingen, zoals het laten zweven van tekst eromheen.

Corrigeer me alstublieft als ik het mis heb, ik weet het niet 100% zeker en kan het momenteel niet zelf testen.


Antwoord 9, autoriteit 2%

Het antwoord op je vraag ligt in de toekomst, mijn vriend …

namelijk “intrinsiek” komt met de laatste CSS3-update

width: intrinsic;

helaas loopt IEhiermee achter, dus het ondersteunt het nog niet

Meer hierover: CSS Intrinsic & Extrinsic Sizing Module Level 3en Kan ik gebruiken?: Intrinsic & Extrinsieke maatvoering.

Voor nu moet je tevreden zijn met <span>of <div>ingesteld op

display: inline-block; 

Antwoord 10

width:1px;
white-space: nowrap;

werkt prima voor mij 🙂


Antwoord 11

Een CSS2-compatibele oplossing is het gebruik van:

.my-div
{
    min-width: 100px;
}

Je kunt je div ook laten zweven, waardoor deze zo klein mogelijk wordt, maar je moet een clearfixals er iets in je div zweeft:

.my-div
{
    float: left;
}

Antwoord 12

OK,in veel gevallen hoeft u zelfs niets te doen, omdat div standaard heighten widthals automatisch heeft, maar als het niet jouw geval is, zal het toepassen van inline-block-weergave voor jou werken… kijk naar de code die ik voor je maak en het doet wat je zoekt:

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>

Antwoord 13

Dit is genoemd in opmerkingen en is moeilijk te vinden in een van de antwoorden, dus:

Als u display: flexom wat voor reden dan ook gebruikt, kunt u in plaats daarvan het volgende gebruiken:

div {
    display: inline-flex;
}

Dit wordt ook breed ondersteund in alle browsers.


Antwoord 14

Voeg gewoon een stijl toe aan uw CSS-bestand

div { 
    width: fit-content; 
}

Antwoord 15

Je kunt deze code proberen. Volg de code in de CSS-sectie.

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>

16

U kunt het eenvoudig doen door display: inline;(of white-space: nowrap;).

Ik hoop dat je dit nuttig vindt.


17

U kunt inline-blockgebruiken als @ user473598, maar pas op voor oudere browsers.

/* Your're working with */
display: inline-block;
/* For IE 7 */
zoom: 1;
*display: inline;
/* For Mozilla Firefox < 3.0 */
display:-moz-inline-stack;

Mozilla ondersteunt helemaal niet inline-block, maar ze hebben -moz-inline-stackdie ongeveer hetzelfde is

Enkele cross-browser rond inline-blockDisplay Attribuut:
https://css-tricks.com/snippets/css/cross- Browser-inline-block /

U kunt enkele tests bekijken met dit kenmerk in: https://robertnyman.com/2010/02/24/css-display-inline-block-why-it-rocks-and-why-it-sucks/


18

<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>

Ik weet dat mensen soms niet van tafels houden, maar ik moet je vertellen, ik probeerde de CSS inline-hacks, en ze werkten een beetje in sommige dia’s, maar in anderen niet, dus het was echt gewoon gemakkelijk om de Het uitbreiden van Div in een tafel … en … het kan of niet de inline-eigenschap hebben en toch is de tafel degene die de totale breedte van de inhoud zal houden. =)


19

Probeer width: max-contenteigenschap om de breedte van de div aan te passen door de inhoudsgrootte van de inhoud.

Probeer dit voorbeeld,

<!DOCTYPE html>
<html>
<head>
<style>
div.ex1 {
  width:500px;
  margin: auto;
  border: 3px solid #73AD21;
}
div.ex2 {
  width: max-content;
  margin: auto;
  border: 3px solid #73AD21;
}
</style>
</head>
<body>
<div class="ex1">This div element has width 500px;</div>
<br>
<div class="ex2">Width by content size</div>
</body>
</html>

20

Een werkende demo is hier –

.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>

21

My CSS3 FLEXBOX-oplossing in twee smaken: degene op de top gedraagt ​​zich als een overspanning en degene aan de onderkant gedraagt ​​zich als een div, neemt alle breedte met behulp van een wikkel. Hun klassen zijn respectievelijk “top”, “onder” en “bottomper”.

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.

Antwoord 22

Knoeien met Firebug vond ik de eigenschapswaarde -moz-fit-contentdie precies doet wat de OP wilde en als volgt kon worden gebruikt:

width: -moz-fit-content;

Hoewel het alleen werkt in Firefox, kon ik geen equivalent vinden voor andere browsers zoals Chrome.


Antwoord 23

<div class="parentDiv" style="display:inline-block">
    // HTML elements
</div>

Hierdoor wordt de breedte van de bovenliggende div gelijk aan de breedte van het grootste element.


Antwoord 24

Probeer display: inline-block;. Gebruik de onderstaande css-code om compatibel te zijn met meerdere browsers.

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>

Antwoord 25

div{
width:fit-content;
}
<div>
    <table>
    </table>
</div>

Antwoord 26

Ik heb een soortgelijk probleem opgelost (waarbij ik display: inline-blockniet wilde gebruiken omdat het item gecentreerd was) door een span-tag toe te voegen aan de div-tag en het verplaatsen van de CSS-opmaak van de buitenste div-tag naar de nieuwe binnenste span-tag. Gooi dit er gewoon uit als een ander alternatief idee als display: inline blockgeen geschikt antwoord voor je is.


Antwoord 27

We kunnen elk van de twee manieren gebruiken voor het divelement:

display: table;

of,

display: inline-block; 

Ik gebruik liever display: table;, omdat het alle extra spaties op zichzelf verwerkt. Terwijl display: inline-blockwat extra ruimte nodig heeft.


Antwoord 28

div{
  width:auto;
  height:auto;
}

Antwoord 29

   .outer{
          width:fit-content;   
          display: flex;
          align-items: center;
    }
    .outer .content{
         width: 100%;
    }
<div class=outer>
    <div class=content>
       Add your content here
    </div>
</div>

Other episodes