html文本向右下移动

首页 > 实用技巧 > 作者:YD1662023-11-30 03:00:48

  1. 动态高度

上面虽然完成了右下加环绕,但是高度是固定的,如何动态设置呢?这里可以用到 calc 计算,用整个容器高度减去按钮的高度即可,如下

.text::before{ content: ''; float: right; width: 0; height: calc(100% - 24px); }

html文本向右下移动,(9)

很可惜,好像并没有什么效果,打开控制台看看,结果发现 calc(100% - 24px) 计算高度为 0

html文本向右下移动,(10)

原因其实很容易想到,就是 高度 100% 失效 的问题,关于这类问题网上的分析有很多,通常的解决方式是给父级指定一个高度,但是这里的高度是动态变化的,而且还有展开状态,高度更是不可预知,所以设置高度不可取。

除此之外,其实还有另一种方式,那就是利用 flex 布局。大概的方法就是在 flex 布局的子项中,可以通过百分比来计算变化高度,具体可参考 w3.org 中关于 css-flexbox 的描述

If the flex item has align-self: stretch, redo layout for its contents, treating this used size as its definite cross size so that percentage-sized children can be resolved.

因此,这里需要给 .text 包裹一层,然后设置 display: flex

<div class="wrap"> <div class="text"> <button class="btn">展开</button> 浮动元素是如何定位的 正如我们前面提到的那样,当一个元素浮动之后,它会被移出正常的文档流,然后向左或者向右平移,一直平移直到碰到了所处的容器的边框,或者碰到另外一个浮动的元素。 </div> </div>

.wrap{ display: flex; }

实践下来,display: grid 和 display: -webkit-box 同样有效,原理类似

这样下来,刚才的计算高度就生效了,改变文本的行数,同样位于右下角~

html文本向右下移动,(11)

除此之外,动态高度也可以采用负的 margin 来实现(性能会比 calc 略好一点)

.text::before{ content: ''; float: right; width: 0; /*height: calc(100% - 24px);*/ height: 100%; margin-bottom: -24px; }

到这里,右下角环绕的效果就基本完成,省略号也是位于展开按钮之前的,完整代码可以查看 codepen 右下角多行展开环绕效果

4.其他浏览器的兼容处理

上面的实现是最完美的处理方式。原本以为兼容性没什么大问题的,毕竟只用到了文本截断和浮动,-webkit-line-clamp 虽然是 -webkit- 前缀,不过 firefox 也是支持的,打开一看傻了眼,Safarifirefox 居然全乱了!

html文本向右下移动,(12)

上一页12345下一页

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.