巧妙利用before和after伪类实现文字的展开和收起

需求:一段文字,当收起的时候,显示4行,并且多余4行的部分用省略号表示,关键是在省略号前面留有空白部分来放一些图标等东西;展开的时候,全部显示。

例如下面的示例图:

收起的时候:

展开的时候:

在不用JS的情况下,如何能只用CSS就做到呢?

(一)先看下html结构

<div class="summary" data-content="天空为什么是蓝色×××"><p class="content">天空为什么是蓝色×××</p></div>

(二)再看下神奇的css

html,body,p{margin:0;padding: 0}
.summary{
    position: relative;
    overflow: hidden;
    margin-bottom: 5px;
    line-height: 22px;
    word-break: break-all;
    text-indent:5em;
}
.packup p{
    height: 90px;
}
.packup:before{
    display: block;
    content: attr(data-content);
    position: absolute;
    z-index: 1;
    left: 0;
    top: 0;
    height: 66px;//这里的高是3×22的结果,其中22是行高 ,3是4-1
    width: 100%;
    overflow: hidden;
    color: #000;
    background-color: #fff;
    text-indent: 5em;

}
.packup:after{
    display: -webkit-box;
    -webkit-box-orient: vertical;
    -webkit-box-sizing: border-box;
    box-sizing: border-box;
    -webkit-line-clamp: 4;//4就是需要在收起的时候显示的行数
    content: attr(data-content);
    position: absolute;
    left: 0;
    top: 0;
    width: 100%;
    height: 100%;
    text-indent: -4em;
    padding-right: 3em;
    color: #000;
    background-color: #fff;
}

关键的思路就是:用before显示的3行文字盖在after的文字上(before有个背景色,并且height很重要);用after显示4行文字,并且after的右边padding-right一定的距离,使得省略号的右边能够空出一定的位置。

在收起的时候,给summary加上packup的class值;在展开的时候,去掉summary上的packup这个class值。就能够做到图例上的样子了。

时间: 2024-08-26 03:56:44

巧妙利用before和after伪类实现文字的展开和收起的相关文章

利用:before和:after伪类制作CSS3 圆形按钮

预览截图: 制作步骤: 一, <head>标签结构 下面代码中使用了CSS3无前缀脚本prefixfree.js,可以省去CSS3中前缀“-moz”.“-webkit”.“-o”.“-ms” <head> <meta charset="utf-8"> <title>button</title> <script src="js/jquery.js" type="text/javascript&

利用jQuery.expr创建一个自己的伪类选择器

话说好久没来园子写博客了,哎,看来懒癌已经到晚期,得治... 进入正题.前段时间看到一段jQuery代码,代码里面用到了jQuery.expr这个对象.完全陌生又木有.翻了下jQuery的官方文档,没找到关于这个对象的解释,不过搜寻了一番过后终于在jQuery的选择器引擎——sizzle的文档里找到了线索.如果没猜错的话,这个对象应该是Sizzle.selectors对象的扩展.其实要验证这一点非常简单,我们把两个对象分别console.log出来对比下就知道了.页面引入jQuery和sizzl

利用CSS hover伪类改变其他元素的总结

:hover 伪类经常用于页面的一些鼠标交互.链接点击变化,增强页面的用户体验,但是可以用来改变其他元素样式,可以在不使用JS 的情况下,达到想要的页面效果. 1.hover改变自身的效果: 鼠标悬浮改变样式: HTML <div id="yanshi"> 演示 </div> CSS #yanshi{ width: 100px; height: 100px; transition: background-color 0.5s,color 0.5s; text-a

利用 :before :after伪类实现鼠标悬浮动画效果

1.最近在逛网站的时候,想找一下喜欢的鼠标悬浮效果,避免广告的嫌疑,直接放图了: 2.在实现的时候,如果在直接使用鼠标hover ,transform,进行过渡,不能达到想要的效果,因为同时只能触发一张图片的动画效果,鼠标一旦离开了图层,就会回到原始位置. 也就是说,要实现这样的效果,需要鼠标放在某一个块状区域,同时触发两个选择器,这样的效果如果使用css实现的话,只能使用伪类:before, :after实现. 3.直接上代码 HTML <div id="meizu1">

:before 和 :after 的内幕 以及伪类

:before 和 :after 的内幕 伪类 VS 伪元素 这两个概念很容易混淆,即使你Google或者查W3C的资料都不一定搞得清.答案其实很简单,如下: 伪类:作用对象是整个元素 首先,来看几个伪类 ? a:link {color:#111} a:hover {color:#222} div:first-child {color:#333} div:nth-child(3) {color:#444} 如你所见,尽管这些条件不是基于DOM的,但结果每一个都是作用于一个完整的元素,比如整个链接

:before 和 :after 的内幕 以及伪类 ( 转 )

原文链接    http://www.cnblogs.com/zhujl/archive/2012/05/08/2489411.html ------------------------------------------------------------------------------------------------------------------------------------ 伪类 VS 伪元素 这两个概念很容易混淆,即使你Google或者查W3C的资料都不一定搞得清.答

CSS3伪类实现动画旋转效果

一个简单的动画效果demo,keyframes为关键帧,图片贴在代码下方.利用了伪类实现css3动画效果,初学者可以看一下,恩.<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="Keywords" content="关键词"> <meta name="D

CSS3 选择器——伪类选择器

前面花了两节内容分别在<CSS3选择器--基本选择器>和<CSS3选择器--属性选择器>介绍了CSS3选择器中的基本选择器和属性选择器使用方法,今天要和大家一起学习CSS3选择器中的第三部分,也是最后一部分--伪类选择器.伪类选择器对于大家来说最熟悉的莫过于:link,:focus,:hover之类的了,因为这些在平时中是常用到的伪类选择器,那么先和大家一起简单总结一下CSS中常用的伪类选择器的使用方法,最后把重心放到CSS3新增加的":nth-child"选择

关于伪类元素:before和:after

关于伪类元素:before和:after Posted@2011-11-02 3:02 p.m. Categoriescss :before和:after的作用就是在指定的元素内容(而不是元素本身)之前或者之后插入一个包含content属性指定内容的行内元素,最基本的用法如下: #example:before { content: "#"; color: red; } #example:after { content: "$"; color: red; } 这段代码