gpt4 book ai didi

html - 盒子中的多行有省略号和垂直对齐中间

转载 作者:太空狗 更新时间:2023-10-29 14:43:55 26 4
gpt4 key购买 nike

我有包含动态内容和多行文本的容器。如果文本不适合容器,我想显示省略号 (...)。它也应该垂直居中对齐。

我创建了一个 Codepen http://codepen.io/anon/pen/ewnxG使用此 HTML:

<div class="vertically-centered">vertically centered with</div>
<div class="vertically-centered">vertically centered with hello</div>
<div class="vertically-centered">one line</div>

和这个 CSS:

.vertically-centered {
border: 1px solid red;
height: 6rem;
overflow: hidden;
font-weight: bold;
font-size: 2.5rem;
text-overflow: ellipsis;
width: 300px;
line-height: 1.2;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
}

.vertically-centered:after {
content: "";
height: 100%;
display: inline-block;
vertical-align: middle;
}

在 IE11 和 Firefox 中,省略号“...”不见了,这对我来说没问题。在 Safari 和 Chrome 中它有效。

你看,第一个 div 不起作用,文本被截断了。第二个和第三个 div 有效。所以我的解决方案取决于文本长度。如何在不使用 JavaScript 的情况下解决这个问题?

最佳答案

请检查这个没有额外标记的简单解决方案:

.vertically-centered {
border: 1px solid red;
height: 6rem;
overflow: hidden;
font-weight: bold;
font-size: 2.5rem;
text-overflow: ellipsis;
width: 300px;
line-height: 1.2;
display: flex; /* enables centering for modern non-webkit browsers */
flex-direction: column;
justify-content: space-around; /* centers for modern non-webkit browsers */
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
-webkit-box-pack: center; /* centers in -webkit-box automagically! */
}
<div class="vertically-centered">vertically centered with</div>
<div class="vertically-centered">vertically centered with hello</div>
<div class="vertically-centered">one line</div>
您还可以在 edited CodePen example 中看到此解决方案的实际应用。 .

工作原理:您的原始代码已经为基于 WebKit 的浏览器使用了 Flexbox 布局(事实上,它是 Flexbox 的过时 2009 语法,但不幸的是,-webkit-line- clamp 不适用于新的实现)。 Flexbox 有自己的垂直居中机制。要在基于 WebKit 的浏览器中获得所需的行为,您只需删除 :after 伪元素并将以下代码行添加到 .vertically-centered :

   -webkit-box-pack: center;

对于其他现代浏览器,如 Firefox 22+ 和 IE11+,可以通过使用新版本的 Flexbox 实现相同的布局(除了省略号,但你说没关系):

   display: flex;
flex-direction: column;
justify-content: space-around;

这必须放在代码中 display: -webkit-box 之上,因此 Webkit 浏览器仍然可以应用 -webkit-line-clamp

您还可以通过添加其前缀版本的 Flexbox(2011 过渡语法)使其在 IE10 中工作:

   display: -ms-flexbox;
-ms-flex-direction: column;
-ms-flex-pack: center;

支持IE10的笔在这里:http://codepen.io/anon/pen/otHdm

:after 垂直居中方法在第一个“单元格”中不起作用,原因如下:对于 ilnine-level CSS 框(如通常的文本、内联 block 、图像等) vertical-align 调整构成line box 的所有此类框的基线(参见CSS2.1 spec)。计算线框的高度,使行中的所有行内级框都适合它,所以线框的高度不能小于其中最高的行内级框的高度。所以你的 :after 内联 block ,它获得容器高度的 100%,成为你 block 的 last 行中最高的元素,并且由于 vertical- align: middle 最后一行中 text 的基线移动到文本的垂直中间与这个高内联 block 的中间相交。当只有一个石灰(这是这种居中的典型用例)并且最后一行被 overflow 隐藏时,这是可以的,但当它可见时则不行。

关于html - 盒子中的多行有省略号和垂直对齐中间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25719238/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com