提问人: 提问时间:1/17/2009 最后编辑:Peter Mortensen 更新时间:9/13/2023 访问量:1865064
如何使 div 不大于其内容?
How can I make a div not larger than its contents?
答:
不知道这将在什么上下文中出现,但我相信 CSS 样式的属性要么或将会产生这种效果。另一方面,它也会有其他副作用,例如允许文本在其周围漂浮。float
left
right
如果我错了,请纠正我,我不是 100% 确定,目前无法自己测试。
与 CSS2 兼容的解决方案是使用:
.my-div
{
min-width: 100px;
}
你也可以浮动你的 div,这将使它尽可能小,但如果你的 div 内的任何内容浮动,你需要使用 clearfix:
.my-div
{
float: left;
}
你想要一个块元素,它具有CSS所谓的收缩宽度,而规范没有提供一种有福的方式来获得这样的东西。在 CSS2 中,缩小到适合不是目标,而是意味着处理浏览器“必须”凭空获得宽度的情况。这些情况是:
- 浮
- 绝对定位元素
- inline-block 元素
- table 元素
当未指定宽度时。我听说他们想在 CSS3 中添加你想要的东西。现在,请凑合使用上述方法之一。
不直接公开该功能的决定可能看起来很奇怪,但这是有充分理由的。它很贵。缩小以适应意味着至少格式化两次:在知道元素的宽度之前,您不能开始格式化元素,并且您无法计算没有穿过整个内容的宽度。此外,人们并不像人们想象的那样经常需要收缩以适应元件。为什么你的桌子周围需要额外的 div?也许表格标题就是您所需要的。
评论
inline-block
我认为使用
display: inline-block;
可以工作,但是我不确定浏览器的兼容性。
另一种解决方案是将你的包装在另一个中(如果你想保持块行为):div
div
HTML格式:
<div>
<div class="yourdiv">
content
</div>
</div>
CSS:
.yourdiv
{
display: inline;
}
评论
display: -moz-inline-stack;
display: inline-block;
zoom: 1;
*display: inline;
Foo Hack – 跨浏览器支持内联块样式 (2007-11-19)。
解决方案是将 你的 设置为 .div
display: inline-block
评论
span
div
ul
display: inline-block
display: inline-block
margin: 0 auto;
text-align: center;
inline-block
auto
margin: 0 auto;
0
fit-content
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>
我知道人们有时不喜欢表格,但我必须告诉你,我尝试了 css 内联技巧,它们在某些 div 中有点工作,但在其他 div 中则不行,所以,将扩展的 div 包含在表格中真的更容易......和。。。它可以有或没有 inline 属性,但表仍然是将包含内容总宽度的表。=)
width:1px;
white-space: nowrap;
对我来说效果很好:)
对我有用的是:
display: table;
在。(在 Firefox 和 Google Chrome 上测试)。div
这似乎在所有浏览器上都适用于我。示例是我在网上和时事通讯中使用的实际广告。只需更改 div 的内容即可。它将根据您指定的填充量进行调整和收缩包装。
<div style="float:left; border: 3px ridge red; background: aqua; padding:12px">
<font color=red size=4>Need to fix a birth certificate? Learn <a href="http://www.example.com">Photoshop in a Day</a>!
</font>
</div>
评论
<font>
display: inline-block
为您的元素添加额外的边距。
我会推荐这个:
#element {
display: table; /* IE8+ and all other modern browsers */
}
奖金:现在,您还可以通过添加 .#element
margin: 0 auto
篡改 Firebug 我找到了属性值,它完全符合 OP 的要求,可以按如下方式使用:-moz-fit-content
width: -moz-fit-content;
虽然它仅适用于 Firefox,但我找不到其他浏览器(例如 Chrome)的任何等效产品。
评论
fit-content
我通过在标签内添加标签并将 CSS 格式从外部标签移动到新的内部标签来解决类似的问题(我不想使用,因为项目居中)。如果不适合您,只是将其作为另一个替代想法扔在那里。display: inline-block
span
div
div
span
display: inline block
我试过了,它奏效了!div.classname{display:table-cell;}
你可以试试fit-content
(CSS3):
div {
width: fit-content;
/* To adjust the height as well */
height: fit-content;
}
评论
margin: auto
你问题的答案在于未来,我的朋友......
即“intrinsic”将随最新的 CSS3 更新一起推出
width: intrinsic;
不幸的是,IE落后了,所以它还不支持它
更多信息:CSS Intrinsic & Extrinsic Sizing Module Level 3 和 Can I Use?: Intrinsic & Extrinsic Sizing
现在,您必须满意或设置为<span>
<div>
display: inline-block;
评论
修订(如果您有多个孩子,则有效): 您可以使用 jQuery(查看 JSFiddle 链接)
var d= $('div');
var w;
d.children().each(function(){
w = w + $(this).outerWidth();
d.css('width', w + 'px')
});
不要忘记包括 jQuery...
评论
您可以简单地使用 (或 )。display: inline;
white-space: nowrap;
我希望你觉得这有用。
就个人而言,我只是这样做:
HTML代码:
<div>
<table>
</table>
</div>
CSS代码:
div {
display: inline;
}
如果你在 div 上应用浮点数,它也可以工作,但显然,你需要在下一个 HTML 元素上应用“清除两者”的 CSS 规则。
如果你有容器断行,在几个小时后寻找一个好的CSS解决方案,但一无所获,我现在改用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>
评论
工作演示在这里-
.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>
有两种更好的解决方案
display: inline-block;
或
display: table;
在这两个 display:table;
中更好,因为增加了额外的边距。display: inline-block;
因为您可以使用负边距方法来修复多余的空间display:inline-block;
只是
<div style="display: inline;">
<table>
</table>
</div>
我的 CSS3 flexbox 解决方案有两种风格:顶部的 flexbox 行为类似于 span,底部的 flexbox 行为类似于 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.
评论
display: inline-flex;
我们可以在 div
元素上使用两种方式中的任何一种:
display: table;
或
display: inline-block;
我更喜欢使用 ,因为它可以自行处理所有多余的空间。虽然需要一些额外的空间固定。display: table;
display: inline-block
您可以@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/snippets/css/cross-browser-inline-block/inline-block
您可以在以下位置看到一些具有此属性的测试: https://robertnyman.com/2010/02/24/css-display-inline-block-why-it-rocks-and-why-it-sucks/
我会设置padding: -whateverYouWantpx;
评论
div{
width:auto;
height:auto;
}
评论
<div class="parentDiv" style="display:inline-block">
// HTML elements
</div>
这将使父 div 宽度与最大元素宽度相同。
评论
好的,在许多情况下,您甚至不需要做任何事情,因为默认情况下 div has 和 auto,但如果不是您的情况,应用显示将为您工作......看看我为你创建的代码,它正在做你想要的: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>
尝试。为了使其跨浏览器兼容,请使用以下 css 代码。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>
只需在CSS文件中加入样式即可
div {
width: fit-content;
}
评论
这在评论中已经提到过,很难在其中一个答案中找到,所以:
如果您出于任何原因使用,则可以改用:display: flex
div {
display: inline-flex;
}
评论
caniuse
您可以将其用于父元素display: flex
#parentElement {
display: flex;
flex-direction: column;
align-items: flex-start;
}
如果我们定义一个全局变量并将其用于两者会怎样?
:root {
--table-width: 400px;
}
.container{
width:var(--table-width);
border: 1px solid black; // easy visualization
}
.inner-table {
width:var(--table-width);
border: 1px solid red; // easy visualization
}
<div class="container">
<table class="inner-table">
<tr>
<td>abc</td>
</tr>
</table>
</div>
我有一个内部,只是设置容器对我有用。span
div
margin: auto
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>
您可以使用 和 宽度供您选择。这使得 div 不大于其内容。height: 100%
评论
尝试使用 property 根据其内容大小调整 div 的宽度。width: max-content
试试这个例子,
<!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>
div{
width:fit-content;
}
<div>
<table>
</table>
</div>
评论
width: -moz-fit-content;
.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>
只需将宽度和高度设置为 fit-content。这很简单。
div {
width: fit-content;
height: fit-content;
padding: 10px;
}
我正在添加填充:10px;。如果省略它,div 元素将完全粘在表格上,看起来会有点笨拙。填充将在元素的边框和其内容之间创建给定的空间。但这是你的愿望,不是强制性的。
评论
adding: 10px;
似乎这是一个 13 年前的问题。
.div{
display:inline-block;
}
或
.div{
display:inline-flex;
}
现在可以工作几天,没有任何兼容性问题。
解决方案是将 .table-badge 类设置为显示:inline-block
评论