css3 伪元素

今天切图的时候给了一个列表,属于常见的列表,图片如下

这样的列表属于比较常见的列表了,在pc端上实现如下:

html:

<ul>
    <li>
        <div class="pure-g">
            <div class="pure-u-1-5 user-list-left">
                <span><img src="../img" ></span>
            </div>
            <div class="pure-u-4-5 user-list-right">
                <div class="user-list-right-l">
                    <p>
                        <span class="user-name">king</span>
                        <span class="user-sex-age">25</span>
                    </p>
                    <p>
                        <span class="user-intro">烘焙爱好者</span>
                    </p>
                </div>
                <div class="user-list-right-r user-relation-status">

                </div>
            </div>
        </div>
    </li>
</ul>

在mobile实现出来的结果不尽如人意,因为 user-list-left中的图片会随着窗口的变大变小而高度也有变化。为了保证 user-list-right 中的文字总是能够垂直居中,搜索过好多,发现实现的垂直居中都是相对于父元素高度固定的做到的。所以这种方法不能满足要求了。

在小伙伴的帮助下实现了几个版本可以做到文字垂直居中了。

<ul class="warp">
    <li>
       <img src="../images/PlumbCenter.jpg" />
       <div class="user-list-right">
            <p>
                <span class="user-name">king</span>
                <span class="user-sex-age">25</span>
            </p>
            <p>
                <span class="user-intro">烘焙爱好者</span>
            </p>
       </div>
    </li>
</ul>

css:

li{list-style: none;margin:5px;}
.wrap{width:60%;margin:0 auto;}
.wrap li{font-size: 0;}/*去display:block空隙*/
.wrap li img{display: inline-block;vertical-align: middle;width:20%;}
.wrap .user-list-right{font-size:12px;word-break:break-all;word-wrap:break-word;display: inline-block;width:80%;vertical-align: middle;text-align: center;}
.demoWrap li div p{line-height:24px;}

这种简化了文档结构,对img 和 user-list-right都采用了vertical-align: middle; 这下确实图片和文字都垂直居中了。不过发下了个问题就是user-list-right如果写border-bottom的话,会造成border-bottom靠上,而不是在li的底部。

小伙伴继续优化,给出了一种解决方案:

<ul class="warp">
    <li>
       <img src="../images/PlumbCenter.jpg" />
       <div class="user-list-right">
            <p>
                <span class="user-name">king</span>
                <span class="user-sex-age">25</span>
            </p>
            <p>
                <span class="user-intro">烘焙爱好者</span>
            </p>
       </div>
    </li>
</ul>

css:

li{list-style: none;margin:5px;}
.wrap{width:60%;margin:0 auto;}
.wrap li{position:relative;font-size: 0;}/*去display:block空隙*/
.wrap li img{display: inline-block;vertical-align: middle;width:20%;}
.wrap .user-list-right{font-size:12px;word-break:break-all;word-wrap:break-word;display: inline-block;width:80%;vertical-align: middle;text-align: center;}
.demoWrap li div p{line-height:24px;}
wrap li:after{
        content:"";
        width: 80%;
        border-bottom: 1px solid red;
        display: block;
        position: absolute;
        right: 0;
        bottom: 0;}

这种方案对li使用了position:relative,而对li:after进行处理,重写了宽度,采用绝对定位,完美的解决了页面在缩放中img变大变小的列表文字不居中的问题。

解决这个问题,学会了两点,尽量少些dom元素。使用伪元素。

伪元素的使用::first-letter :first-line :before :after

前面两个就不多说了,后面两个已经被大侠们玩坏了额,快点来学习学习

使用伪元素::before,::after

使用伪元素到底能做啥,来让你打开眼界吧,给你贴些那些大神们的例子吧。

1 使用before和after做出来的对话框,总算可以不用图片了http://nicolasgallagher.com/pure-css-speech-bubbles/demo/

看该实例时候注意三角形的方向,都是采用border去实现的,挺有意思的,下来我准备单独写个文章出来。

2 透明漸變的按鈕 http://jsfiddle.net/chriscoyier/hk6z9/1/

3 CSS GUI iconshttp://nicolasgallagher.com/pure-css-gui-icons/

4 最常用的就是清除浮动了

/*clear float*/
.clear::before, .clear::after {
    content: "";
    display: table;
}
.clear::after {
    clear: both;
}
.clear {
    zoom:1; /*IE6, IE7*/
}

5 用偽元素作 tooltip

<style>
.tooltip a {position: relative;}
.tooltip a::before {
    border-left: 10px solid transparent;
    border-right: 10px solid transparent;
    border-top: 10px solid #abcdef;
    position: absolute;
    left: 0%;
    bottom: 90%;
    content: "";
    height: 0;
    width: 0;
    opacity: 0;
    margin:0 0 20px 15px;
    transition: all 0.4s ease;
}
.tooltip a::after {
    border-radius: 5px;
    background: #abcdef;
    color: #000;
    position: absolute;
    left: 0%;
    bottom: 130%;
    content: attr(data-tooltip);
    white-space: nowrap;
    padding: 5px 15px;
    margin-bottom: 15px;
    opacity: 0;
    transition: all 0.4s ease;
}
.tooltip a:hover::before {bottom: 65%;}
.tooltip a:hover::after {bottom: 90%;}
.tooltip a:hover::after, .tooltip a:hover::before {opacity: 1;}
</style>
<p class="tooltip">

上面这些知识抛砖引玉,下来自己就好好学习吧。

伪元素注意内容:

看了这么多的伪元素好处,看看它的兼容性吧,兼容性这个是硬伤。

浏览器支持:before 和 :after 伪元素栈,像这样:

Chrome 2+,
Firefox 3.5+ (3.0 had partial support),
Safari 1.3+,
Opera 9.2+,
IE8+ (with some minor bugs),
几乎所有的移动浏览器。

伪元素不是决定性的 幸运的是,缺少伪元素不会造成大问题。大多数情况下,伪元素一般修饰(或者帮助)内容,不会给不支持的浏览器造成问题。所以,如果你的支持者具有较高的IE版本,你仍然可以在某种程度上使用它们。

一些提醒 正如前面提到的,伪元素不会出现在DOM中。这些元素不是真正的元素。因此,它们不是可用的。所以,不要使用伪元素生成内容,是您的网页的可用性和可访问性的关键。

另外一件需要记住的是,开发工具,例如火狐,不要用伪元素显示内容。所以,如果使用了,伪元素会造成难以维护和调试缓慢。

参考文章有:

http://blog.mukispace.com/pseudo-elements-10-examples/

http://blog.jobbole.com/49301/

时间: 2024-10-01 22:03:28

css3 伪元素的相关文章

使用 CSS3 伪元素实现立体的照片堆叠效

CSS3 里引入的伪元素让 Web 开发人员能够在不需要额外添加 HTML 标签的情况下制作出复杂的视觉效果.例如,:before 和 :after 这个两个 CSS3 伪元素就可以帮助你实现很多有趣的效果.本教程将告诉你如何使用 CSS3 为元素创建一组漂亮的图片堆叠效果. 效果演示     插件下载 您可能感兴趣的相关文章 Web 开发中很实用的10个效果[源码下载] 精心挑选的优秀jQuery Ajax分页插件和教程 12个让人惊叹的的创意的 404 错误页面设计 让网站动起来!12款优秀

CSS3伪元素 ::first-letter ::first-line ::selection

首先,关于伪元素的语法: 有的时候单冒号也能用,但最好写双冒号. 伪类:匹配的是元素(不同状态或结构的). 伪元素:匹配的是元素中的一部分内容(首字符,首行文本). ::first-letter 匹配 某元素的 首字符. 例: <!DOCTYPE html> <html> <head> <title>test010_伪元素选择器_::first-letter</title> <style type="text/css"&

CSS3伪元素、伪类选择器

伪元素选择器: ::first-letter:为某个元素中的文字的首字母或第一个字使用样式. ::first-line:为某个元素的第一行文字使用样式. ::before:在某个元素之前插入一些内容. ::after:在某个元素之后插入一些内容 ::selection:匹配元素中被用户选中或处于高亮状态的部分. 伪类选择器: :link:未访问的链接. :visited:已访问的链接. :hover:鼠标移动到链接上. :active:选定的链接.   原文地址:https://www.cnbl

css3伪元素

伪元素:::before  ::after *必须添加content属性,否则后期不可见 content: ""; *默认是行级元素,如果想设置宽高,就必须转换为块级元素 position: absolute; *行内元素,需要转换成块:display:block   float:**  position: E::first-letter文本的第一个字母或字(不是词组) E::first-line 文本第一行 E::selection 可改变选中文本的样式 原文地址:https://w

CSS3伪元素之Before/After

body{                 font-family: cursive;                 font-size: 14px;             }             .left{                 width:150px;                 height: 50px;                 background: #fff;                 position: relative;            

css3的伪(伪类和伪元素)大合集

本文讲css3的伪,不是讲它有多虚伪,而是说它的伪元素样式.不得不说以前虽知html伪元素,但很少用,后得知借助css3伪元素可以发挥极大的便利.故总结css3的伪如下: CSS中存在一些比较特殊的属性,称之为伪类,它们之中最常用的就是定义链接的伪:link,:visited,:hover,:active等.除了它们,还有一些不被常使用的伪类,有:focus,:first-child,:lang等. 如下将一一介绍各伪类的用法. CSS 伪类 (Pseudo-classes)实例: 超链接 本例

CSS3伪类和伪元素

作为一个CSS3初学不久者来说,很容易混淆单冒号(:)和双冒号(::)的用法,以为两者可以互换着来使用.我自己之前也混淆过他们,因为两者看起来太相像了,就像孪生兄弟.但实际上,他们的区别还是挺大的,最多算得上近房亲戚. 下面我们来开始讲讲单冒号(:)伪类和双冒号(::)伪元素有什么相同和不同点(另外在CSS2中单冒号":" 也叫做伪对象,具体可看看http://www.mb5u.com/tool/css2/) 单冒号(:)早在CSS中已经存在了,相信用惯CSS的码农肯定对:hover伪

【CSS进阶】伪元素的妙用--单标签之美

最近在研读 <CSS SECRET>(CSS揭秘)这本大作,对 CSS 有了更深层次的理解,折腾了下面这个项目: CSS3奇思妙想 -- Demo (请用 Chrome 浏览器打开,非常值得一看).采用单标签完成各种图案,许多图案与本文有关. 也希望觉得不错的同学顺手在我的 Github 点个 star : CSS3奇思妙想 . 正文从这里开始,本文主要讲述一下 伪元素 before 和 after 各种妙用.    :before和::before的区别 在介绍具体用法之前,简单介绍下伪类和

CSS3与页面布局学习总结(六)——CSS3新特性(阴影、动画、渐变、变形、伪元素等)

目录 一.阴影 1.1.文字阴影 1.2.盒子阴影 二.背景 2.1.背景图像尺寸 2.2.背景图像显示的原点 三.伪元素 3.1.before 3.2.after 3.3.清除浮动 四.圆角与边框 4.1.border-radius 圆角 4.2.边框图片border-image 五.变形 transform 5.1.rotate()2D旋转 5.2.设置原点 transform-origin 5.3.平移 translate() 5.4.缩放 scale 5.5.斜切扭曲skew 六.渐变