有一个问题是,在上述例子中,把段落内容的“浮动元素”去掉后,段落最后从“行”字开始换行了,“收起”却不换行,也就是会存在有两个字内容看不见情况。
<style>
.wrapper {
/*
使得 .text::before 有高度。
flex 布局的子项,可以通过百分比计算变化高度。
*/
display: flex;
overflow: hidden;
padding: 15px;
margin: 50px auto;
width: 800px;
border-right: 8px;
box-shadow: 20px 20px 60px #bebebe;
} .text {
position: relative;
display: -webkit-box;
overflow: hidden;
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
font-size: 20px;
text-align: justify;
text-overflow: ellipsis;
transition: .3s max-height;
}
/*
加了这个使得 .btn 可以占据第三行位置
从而使得省略号的位置不一定要在最右侧出现。
这是个很棒的操作。
在 .text 父元素中,内容都是行内元素,
text::before 元素float动到右边,高度为 .text 高度减去按钮高度。
*/
.text::before {
float: right;
content: '';
height: calc(100% - 24px);
} /*
起到障眼法作用
这个伪元素会紧接着在行内元素的后面
当段落内容不足以出现省略号的时候,伪元素会把“展开”按钮遮住。
*/
.text::after {
position: absolute;
content: '';
width: 999vw;
height: 999vw;
margin-left: -100px;
background-color: #000;
box-shadow: inset calc(100px - 999vw) calc(30px - 999vw) 0 0 #fff;
} /*
浮动元素占据顶部位置,文字环绕浮动元素
clear:right,是为了清除伪元素 .text::before 的影响。
因为伪元素也右浮动,所以 .btn 会水平宽度允许情况下,存在于伪元素左边,
可以视为如果没有伪元素,.btn 会在父元素最右边,所以这里使用 clear
使得 .btn换行。
*/
.btn {
float: right;
clear:right;
margin-left: 10px;
font-size: 16px;
padding: 0 8px;
color: #fff;
cursor: pointer;
background: #3F51B5;
line-height: 24px;
border-radius: 4px;
} /*
起到动态修改内容作用
撑起.btn高度
凡是用到动态修改内容的用 content
*/
.btn::before {content: '展开';} .exp { display: none; }
.exp:checked + .text {
max-height: 200000px; /*超出最大行高度就可以了*/
-webkit-line-clamp: 10000;
}
.exp:checked+.text::after{
visibility: hidden;
}
.exp:checked + .text .btn::before {
content: '收起';
} /* 有一个问题是,在上述例子中,把段落内容的“浮动元素”去掉后,段落最后从“行”字开始换行了,“收起”却不换行,也就是会存在有两个字内容看不见情况。*/
/*https://zhuanlan.zhihu.com/p/373359523*/
</style>
<div class="wrapper">
<input id="exp1" class="exp" type="checkbox" />
<div class="text">
<label class="btn" for="exp1"></label>
元素是如何定位的 正如我们前面提到的那样,当一个元素浮动之后,它会被移出正常的文档流,然后向左或者向右平移,一直平移直到碰到了所处的容器的边框,或者碰到另外一个浮动的元素。 在下面的图片中,有三个红色的正方形。其中有两个向左浮动,一个向右浮动。要注意到第二个向左浮动的正方形被放在第一个向左浮动的正方形的右边。如果还有更多的正方形这样浮动,它们会继续向右堆放,直到填满容器一整行,之后换行至下一行
</div>
</div>

内容记录源自:https://zhuanlan.zhihu.com/p/373359523 ,感谢分享。

CSS展开收起的更多相关文章

  1. [TimLinux] CSS 纯CSS实现动画展开/收起功能

    内容转自CSS世界,理解之后进行了简化,简化后代码: <!DOCTYPE html> <html> <head> <meta charset=utf-8 /& ...

  2. css实现侧边展开收起

    前言:因为突然想研究研究侧边栏滑动展开收起怎么做的,就去baidu了一下transition. 详情 内容1 内容1 内容1 内容1 内容1 右侧有实现demo.就是那个绿色的详情 先来看一下我的代码 ...

  3. 跨平台移动开发 Xuijs超轻量级的框架 Dom与Event简洁代码实现文本展开收起

    Dom与Event简洁代码实现文本展开收起 Xuijs超轻量级的框架 Dom与Event实现文本展开收起 效果图 示例代码 <!DOCTYPE html PUBLIC "-//W3C/ ...

  4. el-upload上传列表实现 展开 收起

    # el-upload上传列表实现 展开 收起 #### 无图言*,所以先上最终效果图(想参考代码的可以直接滑到最后) ### 具体实现思路 注意: 每个人的项目环境以及需求,都不尽相同,所以这里仅仅 ...

  5. HTML-003-模拟IDE代码展开收起功能简单示例

    当先我们在日常的编程开发工作中使用编程工具(例如 Eclipse.Sublime 等等)都有相应的代码折叠展开功能,如下图所示,极大的方便了我们的编码工作.

  6. Vue 实现点击展开收起

    Vue 展开收起功能实现 之前写项目的时候提到了一个需求 展开/收起 所有内容的需求 .因之前一值是重构,自己写功能还是比较少的,于是网上搜了一下,发现很多东西其实是jq的功能 虽然可以拿过来用,但是 ...

  7. javasript简单实现文字的展开收起(无动画)

    今天在工作遇到展开和收起的需求,在网上找了很多方法,今天来写一下我觉得比较简单的方法 在项目中需要达到如图这种效果 首先想的是使用overflow简单且粗暴,在需要展开的的文字定义样式 { overf ...

  8. vue.js 实现点击展开收起动画

    最近公司项目加了个页面,其中要求是这样的,点击对应列表,展开和收起, 其实就是显示和隐藏内容部分:说来惭愧,我花了半天时间才搞出来(自黑一下~), ,,接下来分享给大家,先上效果图: .vue页面: ...

  9. 不使用字体图标和图片,只使用css如何做出展开收起的效果

    <i class="iconArrow" :class="[ littleNavState === item.meta.id ? 'arrowOpen' : '' ...

随机推荐

  1. Spring Framework 有哪些不同的功能?

    轻量级 - Spring 在代码量和透明度方面都很轻便.IOC - 控制反转 AOP - 面向 切面编程可以将应用业务逻辑和系统服务分离,以实现高内聚.容器 - Spring 负 责创建和管理对象(B ...

  2. springboot使用策略模式实现一个基本的促销

    策略模式 定义了算法族,分别封装起来,让它们之间可以互相替换, 此模式让算法的变化独立于使用算法的客户 源码:https://github.com/youxiu326/sb_promotion.git ...

  3. java中的方法覆盖(Overriding)和方法重载(Overloading)是什么意思?重写跟重载的区别?

    java中的方法重载发生在同一个类里面两个或者多个方法的方法名相同但是参数不同的情况.与此相对,方法覆盖是说子类重新定义了父类的方法.方法覆盖必须有相同的方法名,参数列表和返回类型. 覆盖者可能不会限 ...

  4. leetcode_两数之和

    给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那 两个 整数,并返回它们的数组下标. 你可以假设每种输入只会对应一个答案.但是,数组中同 ...

  5. 攻防世界 NaNNaNNaNNaN-Batman

    NaNNaNNaNNaN-Batman 下载出一个文件我们一开始不知道是个啥,我们拉入到sublime中看一下 我们可以发现在最开始的位置有一个_是一段函数变量,最后的eva()那个是执行函数代码,但 ...

  6. react开发教程(六)React与DOM

    ReactDOM findeDOMNode 语法:DOMElement findDOMNode(ReactComponent component)描述:获取改组件实例相对应的DOM节点 案例: imp ...

  7. WebGL2系列之顶点数组对象

    使用了顶点缓冲技术后,绘制效率有了较大的提升.但是还有一点不尽如人意,那就是顶点的位置坐标.法向量.纹理坐标等不同方面的数据每次使用时需要单独指定,重复了一些不必要的工作.WebGL2提供了一种专门用 ...

  8. github 上有趣又实用的前端项目(持续更新,欢迎补充)

    github 上有趣又实用的前端项目(持续更新,欢迎补充) 1. reveal.js: 幻灯片展示框架 一个专门用来做 HTML 幻灯片的框架,支持 HTML 和 Markdown 语法. githu ...

  9. c++实现中介者模式--虚拟聊天室

    内容: 在"虚拟聊天室"实例中增加一个新的具体聊天室类和一个新的具体会员类,要求如下: 1. 新的具体聊天室中发送的图片大小不得超过20M. 2. 新的具体聊天室中发送的文字长度不 ...

  10. [ Shell ] 通过 Shell 脚本导出 GDSII/OASIS 文件

    https://www.cnblogs.com/yeungchie/ 常见的集成电路版图数据库文件格式有 GDSII 和 OASIS,virtuoso 提供了下面两个工具用来在 Shell 中导出版图 ...