溢出文本可以居中吗?

时间:2011-07-08 00:20:33

标签: css text overflow center alignment

当我为宽度大于文本宽度的元素指定text-align:center时,文本在元素的内容框中居中(如预期的那样)。

当我为宽度小于文本宽度的元素指定text-align:center时,文本将与内容框的左边缘对齐,并溢出内容框的右边缘。< / p>

您可以看到这两个案例的行动here

任何CSS魔法都可以使文本同样溢出内容框的左边缘和右边缘,以使其保持居中?

8 个答案:

答案 0 :(得分:88)

我知道这个问题已经过时了,但我遇到了同样的问题,并且发现了一个更简单的解决方案。 http://jsfiddle.net/7hy3w2jj/

<div>some text</div>
<div>
    <span class="text-overflow-center">some text that will overflow</span>
</div>

然后你只需要这个定义

.text-overflow-center {
    margin-left: -100%;
    margin-right: -100%;
    text-align: center;
}

如果您可以使用伪元素,则可以完全不使用html。 只需将这些定义添加到文本容器中即可。 http://jsfiddle.net/7287L9a8/

div:before {
    content: "";
    margin-left: -100%;
}
div:after {
    content: "";
    margin-right: -100%;
}

伪变体的唯一缺点是它只适用于一行文本。

答案 1 :(得分:14)

拯救魔法。如果有人感兴趣,您可以看到解决方案here

HTML:

<div id="outer">
    <div id="inner">
        <div id="text">some text</div>
    </div>
</div>
<div id="outer">
    <div id="inner">
        <div id="text">some text that will overflow</div>
    </div>
</div>

CSS:

#outer {
    display: block;
    position: relative;
    left: 100px;
    width: 100px;
    border: 1px solid black;
    background-color: silver;
}
#inner {
    /* shrink-to-fit width */
    display: inline-block;
    position: relative;
    /* shift left edge of text to center */
    left: 50%;
}
#text {
    /* shift left edge of text half distance to left */
    margin-left: -50%;
    /* text should all be on one line */
    white-space: nowrap;
}

答案 2 :(得分:9)

这看起来有些老问题。

现在我觉得flex有一些很好的答案。

你可以这样做:

<div id="small_div">overflowing text</div>

#small_div {
    display: flex;
    justify-content: center;
}

就是这样。

希望对你有所帮助!

答案 3 :(得分:0)

奇怪的要求。我会将框展开为文本大小。

一种可能的解决方案可能涉及否定文字缩进:text-indent: -50px;,但这不适用于较小的文本(在您的示例中为第一个DIV)。现在没有更好的想法。

答案 4 :(得分:0)

尝试

word-wrap:break-word;

而不是:

white-space:nowrap;

或者你只想在一条线上?

答案 5 :(得分:0)

这个似乎有效: 添加一个位置相对和左边的包装块:50%margin-left:-100%你可以看到它here 这是代码:

<style>
div {
    display: block;
    position: relative;
    left: 100px;
    height:1.5em;
    width: 100px;
    text-align: center;
    white-space: nowrap;
    border: 1px solid black;
    background-color: silver;
}
span{
    display:block;
    position:relative;
    left:50%;
    margin-left:-100%;
}
</style>
<div><span>some text</span></div>
<div><span>some text that will overflow</span></div>

答案 6 :(得分:0)

要使解决方案适用于多行文本,您可以通过将#inner从50%更改为25%来修改Nathan的解决方案。

答案 7 :(得分:0)

将最里面的div设为margin: 0 -50%。如果元素都是显示块或内联块并且文本对齐居中,则这为最内层元素的文本提供了更多的肩部空间。至少,它适合我。

相关问题