我猜这两个属性并没有真正协同工作,但我的情况是:
我正在尝试创建工具提示组件。我的工具提示绝对定位,因为我不知道内容的长度是多少,没有宽度。因此,与宽度相关的CSS,文本只是形成一个高,瘦的列。我试过了max-width
,但就它本身而言,它什么也没做。所以我决定尝试white-space: nowrap
,虽然它很好地没有包装文本,但它似乎也没有以有用的方式表达最大宽度,而文本却超出了界限元素。
如果有一个干净的解决方案,我无法想到如何解决我的问题。我希望有一个绝对定位的div扩展到适合它的内容,直到达到最大值,此时它会包含。我看到的一个建议是将元素设置为弹性框,但据我所知,这对于IE来说不是很好,所以我认为在我的情况下是不可行的。有什么建议吗?
.wrapper {
position: relative;
display: inline;
}
.info {
position: absolute;
bottom: 1.2em;
left: 0;
}

<div class="wrapper">
<span>[ ? ]</span>
<div class="info">Any long text can go in here to test what goes wrong with wrapping.</div>
</div>
&#13;
答案 0 :(得分:4)
避免使用white-space:nowrap
因为这会将文本限制在一行。 max-width
应该使用具有显示绝对值但不在内联元素内的块级元素。要解决此问题,我将工具提示放在包装器块之外,并使用javascript将其放置在鼠标位置。
以下是针对您的问题的简单解决方案。单击“打开工具提示”以显示工具提示并移动滑块以更改max-width
的值。
showContext = function() {
var e = window.event;
var posX = e.clientX;
var posY = e.clientY;
var info = document.getElementById("info");
info.style.top = posY + "px";
info.style.left = posX + "px";
info.style.display = "block";
}
changeWidth = function(value) {
var info = document.getElementById("info");
info.style.maxWidth = value + "px";
}
.wrapper {
position: relative;
}
.info {
position: absolute;
max-width:300px;
display:none;
border:1px solid black;
background-color:white;
}
.range {
margin:10px 0px 10px 0px;
display:block;
}
<div class="wrapper">
max-width slider
<input id="range" class="range" type="range" min="100" max="600" oninput="changeWidth(this.value)"/>
<input type="button" value="open tooltip" onclick="javascript:showContext();" />
</div>
<div id="info" class="info">Any long text can go in here to test what goes wrong with wrapping.</div>
答案 1 :(得分:3)
我不确定你的目标是什么,因为有很多矛盾的事情正在发生。但我会尝试,希望你可以指导我找到你想要的解决方案:
https://jsfiddle.net/q7dyf6xh/
-stc=c99
看看这个小提琴,你可以看到工具提示现在有一个最大宽度。看看我正在使用的是什么:
.wrapper {
position: relative;
display: run-in;
}
.info {
position: absolute;
max-width: 200px;
white-space: pre-line;
}
:根据上下文
display: run-in;
:空格的序列将折叠成一个空格。文本将在必要时包装,并在换行符
为了更好地了解工作原理,请点击此处:
white-space :如果您使用 nowrap 文字,则永远不会换行到下一行。文本在同一行继续,直到遇到标记!
这表示您的white-space: pre-line;
仍在使用,但现在您已经溢出您的元素了。尝试为您的元素max-width
提供一个background-color
,您会发现它实际上只有max-width
定义的宽度。
请在此处查看元素如何溢出:https://jsfiddle.net/fcnh1qeo/
现在宽度overflow: hidden
仅显示包装盒内的文字。其他一切都被切断了!见这里:https://jsfiddle.net/0qn4wxkg/
我现在使用的是display: run-in;
和white-space: pre-line;
以及max-width: 200px
,它们可以为您提供所需的解决方案。不知道你使用它的上下文和代码更像是一个猜测而不是答案。但也许我可以引导您找到适合您需求的解决方案
干杯!
答案 2 :(得分:1)
添加min-width:100%
和white-space: nowrap;
.wrapper {
position: relative;
display: inline;
}
.info {
position: absolute;
min-width: 100%;
white-space: nowrap;
}
<div class="wrapper">
<span>[ ? ]</span>
<div class="info">Any long text can go in here to test what goes wrong with wrapping.</div>
</div>
答案 3 :(得分:1)
不是那个时候我自己也有类似的问题。我使用flexbox修复了它,这里已经在评论中提出了建议。
我的代码如下所示:
.has-tooltip {
display: inline-flex; align-items: flex-start
}
.has-tooltip > .tooltip {
padding: 1em;
max-width: 300px;
background: #bdc3c7;
word-wrap: break-word;
transform: translate(-50%,-110%)
}
我还将其复制到Connection Mux,以防你想看一下。 (:
答案 4 :(得分:1)
你这是行不通的。
如果您允许使用BR标签,这是一个有效的解决方案。我曾经多次使用工具提示,这是我拥有的最佳解决方案。
Codepen: https://codepen.io/btn-ninja/pen/JNJrgp
它的工作原理是使用带有css translate的white-space nowrap:
<button type="button" class="btn btn-block hasTooltip">
Tooltip on top
<i class="tip">Most tooltips are short<br>but you can add line breaks.</i>
</button>
<button type="button" class="btn btn-block hasTooltip right">
Tooltip on the right.
<i class="tip">Tooltip on right<br>vertically centered.</i>
</button>
.hasTooltip .tip {
position: absolute;
bottom: 100%; left: 50%;
transform: translateX(-50%); }
.hasTooltip.right .tip {
bottom: auto; left: 100%; top:50%;
transform: translateY(-50%); }
翻译允许绝对定位的工具提示相对于内容水平或垂直居中。带有BR的白色空间实现了长内容的包装,同时允许更短的工具提示匹配工具提示文本的宽度。
这是完整的CSS:
.hasTooltip {
position:relative; }
.hasTooltip .tip {
display:block;
background: #333; color: #fff;
box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.5);
font-size:inherit;
font-style:normal;
line-height: 1rem;
text-align:center;
padding: 8px 16px;
border-radius:4px;
margin-bottom:5px;
pointer-events: none;
position: absolute;
bottom: 100%; left: 50%; transform: translateX(-50%);
opacity: 0;
transition: opacity .34s ease-in-out;
white-space:nowrap;
z-index:99; }
.hasTooltip .tip:before {
content: "";
display:block; position:absolute; left:0; bottom:-5px;
width:100%; height:5px; }
.hasTooltip .tip:after {
border-left: solid transparent 6px;
border-right: solid transparent 6px;
border-top: solid #333 6px;
bottom: -4px;
content: "";
height: 0;
left: 50%;
margin-left: -6px;
position: absolute;
width: 0; }
.hasTooltip:focus .tip,
.hasTooltip:hover .tip {
opacity: 1;
pointer-events: auto; }
.hasTooltip.right .tip {
bottom: auto; left: 100%; top:50%; transform: translateY(-50%);
margin-bottom:0;
margin-left:5px; }
.hasTooltip.right .tip:before {
left:-5px; bottom:auto; }
.hasTooltip.right .tip:after {
border-left: 0;
border-top: solid transparent 6px;
border-bottom: solid transparent 6px;
border-right: solid #333 6px;
bottom:auto;
left: -4px;
top:50%;
margin-left: 0;
margin-top: -6px; }
答案 5 :(得分:1)
display="runin"
该元素生成一个run-in框。导入元素的作用类似于内联或块,具体取决于周围的元素。那是:
如果导入框包含块框,则与块相同。
如果在插件框后面有一个块框,则该插件框将成为块框的第一个内联框。
如果跟随一个内联框,则该插件框将成为一个块框。
pre-line
空白的序列已折叠。换行符在<br>
处换行,并根据需要填充换行符。
下表总结了各种white-space
值的行为:
max-width
CSS属性设置元素的最大宽度。它可以防止width属性的已使用值变得大于max-width.
.wrapper {
position: relative;
display: run-in;
top: 100px;
}
.info {
position: absolute;
bottom: 1.2em;
left: 0;
max-width: 200px;
white-space: pre-line;
background-color: #ddd;
}