我有一個類似的布局:
<div>
<table>
</table>
</div>
我希望div只擴展到與我的表一樣寬。
解決方案是將div設置為display: inline-block。
您想要一個塊元素,它具有CSS所說的收縮到適合的寬度,而規范并沒有提供一個獲得這種東西的好方法。在CSS2中,縮小到合適并不是一個目標,而是指處理瀏覽器“不得不”憑空獲得寬度的情況。這些情況是:
漂浮物 絕對定位元素 內嵌塊元素 表格元素 當沒有指定寬度時。我聽說他們想在CSS3中加入你想要的東西。現在,湊合著用上面的一個。
不直接公開該特性的決定可能看起來很奇怪,但是有一個很好的理由。它是昂貴的。縮小到適合意味著至少格式化兩次:在知道一個元素的寬度之前,你不能開始格式化它,并且你不能在不遍歷整個內容的情況下計算寬度。另外,人們并不像想象的那樣經常需要收縮配合元件。為什么你的桌子周圍需要額外的格子?也許表格標題就是你所需要的。
我認為使用
display: inline-block;
可以工作,但是我不確定瀏覽器的兼容性。
另一個解決方案是將您的div包裝在另一個div中(如果您希望保持塊行為):
HTML:
<div>
<div class="yourdiv">
content
</div>
</div>
CSS:
.yourdiv
{
display: inline;
}
display: inline-block為元素添加額外的邊距。
我推薦這個:
#element {
display: table; /* IE8+ and all other modern browsers */
}
額外收獲:你現在也可以通過添加margin: 0 auto來輕松地將這個新奇的#元素居中。
你可以試試fit-content (CSS3):
div {
width: fit-content;
/* To adjust the height as well */
height: fit-content;
}
瀏覽器支持 規格 有兩個更好的解決方案
顯示:內嵌-塊;
運籌學
顯示:表格;
在這兩個顯示器之外:桌子;更好,因為顯示:inline-block;添加額外的邊距。
對于顯示:內嵌塊;您可以使用負邊距方法來修復額外的空間
對我有用的是:
display: table;
在div中。(在火狐和谷歌Chrome上測試)。
Foo Hack跨瀏覽器支持內嵌塊樣式(2007-11-19)。
不知道這將出現在什么樣的上下文中,但我相信CSS樣式的屬性浮動無論是向左還是向右都會有這種效果。另一方面,它也會有其他副作用,比如允許文本在它周圍浮動。
如果我錯了,請糾正我,我不是100%確定,目前也不能自己測試。
你問題的答案在未來,我的朋友...
即& quot內在的& quot即將推出最新的CSS3更新
width: intrinsic;
不幸的是IE落后于它,所以它還不支持它
關于它的更多信息:CSS內在& amp外部規模模塊級別3,我可以使用嗎?:內在& amp外在尺寸。
現在你必須滿足于& ltspan & gt或者& ltdiv & gt干勁十足地開始做;毅然開始
display: inline-block;
對我來說很好:)
兼容CSS2的解決方案是使用:
.my-div
{
min-width: 100px;
}
您也可以浮動您的div,這將迫使它盡可能小,但如果您的div中有任何內容是浮動的,您將需要使用clearfix:
.my-div
{
float: left;
}
評論中提到了這一點,但很難在其中一個答案中找到,所以:
如果您出于任何原因使用display: flex,您可以使用:
div {
display: inline-flex;
}
這也是跨瀏覽器的廣泛支持。
好的,在很多情況下你甚至不需要做任何事情,因為默認情況下div的高度和寬度是自動的,但是如果不是你的情況,應用內嵌塊顯示會對你有用...看看我為您創建的代碼,它能做您所需要的事情:
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>
只需設置寬度和高度,以適應內容。這很簡單。
div {
width: fit-content;
height: fit-content;
padding: 10px;
}
我在加padding:10px;。如果忽略它,div元素將完全粘在表格上,看起來有點笨拙。填充將在元素的邊框和內容之間創建給定的空間。但這是你的愿望,不是強制性的。
你可以試試這個代碼。遵循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>
只需在你的CSS文件中加入一個樣式
div {
width: fit-content;
}
嘗試使用width: max-content屬性根據內容大小調整div的寬度。
試試這個例子,
<!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>
只需使用display:inline;(或空白:nowrap).
我希望你覺得這是有用的。
您可以以@user473598的身份使用inline-block,但是要小心舊的瀏覽器..
/* Your're working with */
display: inline-block;
/* For IE 7 */
zoom: 1;
*display: inline;
/* For Mozilla Firefox < 3.0 */
display:-moz-inline-stack;
Mozilla根本不支持內聯塊,但是他們有-moz-inline-stack,也差不多
一些跨瀏覽器內聯塊顯示屬性: https://CSS-tricks . com/snippet/CSS/cross-browser-inline-block/
您可以在https://robertnyman . com/2010/02/24/CSS-display-inline-block-why-it-rocks-and-why-it-sucks/中看到一些帶有此屬性的測試
我知道人們有時不喜歡表格,但我必須告訴你,我嘗試了css內聯方法,它們在一些div中工作,但在其他div中不工作,所以,在表格中包含擴展div真的更容易...和...它可以有也可以沒有inline屬性,但仍然是這個表來保存內容的總寬度。=)
這里有一個工作演示-
.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 flexbox解決方案有兩種風格:頂部的表現像一個span,底部的表現像一個div,在包裝器的幫助下占據所有寬度。它們的類分別是“top”、“bottom”和“bottomwrapper”。
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.
通過篡改Firebug,我找到了屬性值-moz-fit-content,這正是OP想要的,可以如下使用:
width: -moz-fit-content;
雖然它只在Firefox上運行,但我找不到任何適用于Chrome等其他瀏覽器的等效軟件。
這將使父div寬度與最大元素寬度相同。
嘗試顯示:inline-block;。為了跨瀏覽器兼容,請使用下面的css代碼。
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>
div{
width:fit-content;
}
<div>
<table>
</table>
</div>
我已經解決了一個類似的問題(我不想使用display: inline-block,因為項目是居中的),方法是在div標簽中添加一個span標簽,并將CSS格式從外部div標簽移動到新的內部span標簽。如果display: inline block不適合你,就把它作為另一個選擇。
我們可以在div元素上使用兩種方法中的任何一種:
display: table;
或者,
display: inline-block;
我更喜歡用display:table;,因為它自己處理所有額外的空格。而顯示:內嵌塊需要一些額外的空間固定。