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

    SpringBoot使用一个全局的配置文件,配置文件名是固定的: •application.properties •application.yml 配置文件的作用:修改SpringBoot自动配置的默 ...

  2. spring-boot-learning自动配置原理

    启动器: spring-boot-starter:spring-boot场景启动器,帮我们倒入我们场景需要的组件依赖 不同的场景有不同的启动器: spring-boot-starter-web     ...

  3. chubby 是什么,和 zookeeper 比你怎么看?

    chubby 是 google 的,完全实现 paxos 算法,不开源.zookeeper 是 chubby的开源实现,使用 zab 协议,paxos 算法的变种.

  4. javascript入门教程(二):变量

    大家好,我从今天开始就会正式讲javascript的语法方面.变量 js中的变量一般使用var来声明(es6的let不在本教程讨论范围内),可以用来定义任何种类的变量,如果只对变量进行了定义而没有赋值 ...

  5. zhilizhili-ui 荡平ie8910 还我前端清净地

    zhilizhili-ui 给大家带来一个目前最新版本的ie8方案 特色 flexbox部分功能 vw vh calc部分功能 angular1.4 todo avalon是因为无法和polyfill ...

  6. python爬虫---链家网二手房价采集

    代码: import requests from lxml import etree import pandas as pd from pyecharts.charts import Bar from ...

  7. java中求一下2008年5月31日, 往前倒30天是哪天?

    题目9: 2008年5月31日, 往前倒30天是哪天?  import java.util.*; public class Test {     public static void main(Str ...

  8. 字符串反转&说反话

    题目描述 写出一个程序,接受一个字符串,然后输出该字符串反转后的字符串.(字符串长度不超过1000) 输入描述: 输入N个字符 输出描述: 输出该字符串反转后的字符串 示例1 输入 abcd 输出 d ...

  9. 一个chome的广告拦截小插件

    先附上下载地址:https://chromecj.com/productivity/2015-03/391.html 可以屏蔽绝大多数广告啊,浏览器用起来神清气爽! 下载完成后有一个名字为这个的文件, ...

  10. js new Date()参数格式

    最近在写页面使用new Date()获取时间戳在ie浏览器中测试发现无效:后来发现是参数格式问题, new Date()参数格式如下: 1.用整数初始化日期对象 var date1 = new Dat ...