有一个问题是,在上述例子中,把段落内容的“浮动元素”去掉后,段落最后从“行”字开始换行了,“收起”却不换行,也就是会存在有两个字内容看不见情况。
<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-boot-菜鸟-properties配置

    如果测试结果出现中文乱码: 结果": Person{lastName='张胜男', age=11, boss=false, birth=Wed Nov 11 00:00:00 CST 202 ...

  2. @Autowired 注解有什么用?

    @Autowired 可以更准确地控制应该在何处以及如何进行自动装配.此注解用于在 setter 方法,构造函数,具有任意名称或多个参数的属性或方法上自动装配bean.默认情况下,它是类型驱动的注入. ...

  3. java-doc注释详解

    注释的分类 // 注释一行/* ...... */ 注释若干行/** ...... */ 注释若干行,并写入 javadoc 文档 列子 /** * show 方法的简述. * <p>sh ...

  4. Effective Java —— 消除过期的对象引用

    本文参考 本篇文章参考自<Effective Java>第三版第七条"Eliminate obsolete object references" Memory leak ...

  5. Python函数-导入模块的顺序及原理

    引入 当python导入模块,执行import语句时,到底进行了什么操作?按照python的文档,她执行了如下的操作: 第一步,创建一个新的module对象(它可能包含多个module) 第二步,把这 ...

  6. 给新手的最简单electron使用教程

    我花了两个月闲暇翻译完了文档,大概是目前最完整最实时的中文文档了,有需要可以去看看学学:github传送门,大多数的需求阅读文档即可解决,实际上,翻译文档正是我入门一项未知事物时的最简单常用的法子. ...

  7. 前端调试利器 - Charles

    Docs 开发之 Charles 配置指南 1.下载与安装 charles-proxy-4.1.4 .dmg56.12 MB已存到云盘下载 2.激活 使用公司正版license 激活 安装证书 点击证 ...

  8. apache开启图片缓存压缩

    ①-浏览器缓存图片信息 开启Apache的expires模块,重启Apache 2.在虚拟主机的配置文件里面,增加对图片信息缓存的配置,重启Apache 3.在网站目录里面填写测试代码 4.测试效果 ...

  9. redis迁移第三篇(cluster forget)

    1.删除错误节点,带有 fail,noaddr , 这种需要用 cluster forget redis集群迁移之后,由于之前的误操作,导致pod日志里面出现这样的错误,出现一会好一会不好的情况,就是 ...

  10. CVE 公开披露的网络安全漏洞列表

    CVE®是一份公开披露的网络安全漏洞列表, 官方地址为 : https://cve.mitre.org/cve/ 比如 mavenrepository 上阿里的Druid修复的漏洞的列表如下: