有一个问题是,在上述例子中,把段落内容的“浮动元素”去掉后,段落最后从“行”字开始换行了,“收起”却不换行,也就是会存在有两个字内容看不见情况。
<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. js获取元素本身相关值

    Element.getBoundingClientRect()方法返回元素的大小及其相对于视口的位置. getClientRects() 方法返回的一组矩形的集合, 即:是与该元素相关的CSS 边框集 ...

  2. Tomcat安装流程(无图简易)

    笔记:web->3小结

  3. Idea学习之"使用SVN如何查看哪一行是哪一个人写的历史日志"

    点击出的方法 结果图 点击记录,显示详细

  4. C++函数声明的时候后面加const

    非静态成员函数后面加const(加到非成员函数或静态成员后面会产生编译错误),表示成员函数隐含传入的this指针为const指针,决定了在该成员函数中,任意修改该类中成员的操作都是不允许的(因为隐含了 ...

  5. python学习笔记(二)——程序结构

    1. 选择结构: if 语句:单分支.双分支.多分支 **单分支结构** if 条件表达式: 语句块 **双分支结构** if 条件表达式: 语句块 else: 语句块 **多分支结构** if 条件 ...

  6. 用Weex开发的V2EX三端app,附探坑总结

    项目地址 git传送门(内附项目预览) Weex环境配置 npm install -g weex npm install -g weexpack # weex客户端的cli npm install - ...

  7. 《深入理解ES6》笔记——块级作用域绑定(1)

    本章涉及3个知识点,var.let.const,现在让我们了解3个关键字的特性和使用方法. var JavaScript中,我们通常说的作用域是函数作用域,使用var声明的变量,无论是在代码的哪个地方 ...

  8. uView的DatetimePicker详解

    uView UI号称: 是全面兼容nvue的uni-app生态框架,全面的组件和便捷的工具会让您信手拈来,如鱼得水 亲身感受,用起来真的坑太多, 官方文档太简洁, 很多配置都没说明也没代码, 上百度查 ...

  9. JavaScript实现有农历和节气节假日的日历

    运行效果: 源代码: 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta http-equiv="Content ...

  10. [ Skill ] map mapc mapcan mapcar mapcon maplist mapinto

    https://www.cnblogs.com/yeungchie/ 几种 map 函数的差异 map map( lambda(( a b ) println( list( a b )) ) list ...