一.伪类和伪元素

CSS中伪类和伪元素有很多,也很好用!如果熟练使用的话可以解决很多问题

首先明白什么是伪类:伪类是基于当前元素的状态,而不是元素的id class等静态标志,它是动态变化的,它会在一个状态时得到一个伪类,在下一刻没有这个状态时失去这个伪类,它和class有点类似,但是是动态添加的,是文档外抽象的,所及叫伪类。

什么是伪元素:伪元素是对元素中特定的内容进行操作,它比伪类更加深入,所以它的动态性很低,他就是为了操作某个元素的比如第一行,或者第一个字符普通选择器无法操作的元素,它是基于元素的抽象,所以叫做伪元素。

after和befor伪元素,顾名思义,就是一个节点的前面和后面进行操作!通常我们需要给他的父元素设置after和before这样才会对它的子元素起作用,如果你直接给元素本身设置,那它是不会起你想要的作用的,为你带来一些别的效果!

CSS:

html:

浏览器执行效果

效果显而易见,content是必须的,用来装你要显示的内容,就算你不需要内容,也要写出来,写成content:“”;这样他才会起作用,否则它别的效果不会起作用!另外他们默认是display:inline是行内元素。

大家可能会对.phonenumber伪元素中content内容感兴趣,它是html和css中一些特殊符号的标识,更多的特殊符号大家可以看:http://www.cnblogs.com/pianruijie/p/7844428.html

在对a元素的伪元素中,我们可以用attr方法来获取一些元素的属性,如href,title,前提是它们得存在!

明白了after before的基本作用之后我们就可以做一些别的了,事实上很多时候它们起的作用可以让大家把一个元素当做三个元素使用!

我们这里做一件事情,用after before结合绝对定位实现float:center的效果

<div class = "box"><!--实现float:center-->
<img src="img/1.jpg" id = "logo" alt="" />
<div id = "left">
Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. Ut felis. Praesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna eros eu erat. Aliquam erat volutpat. Nam dui mi, tincidunt quis, accumsan porttitor, facilisis luctus, metus
</div>
<div id = "right">
Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. Ut felis. Praesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna eros eu erat. Aliquam erat volutpat. Nam dui mi, tincidunt quis, accumsan porttitor, facilisis luctus, metus
</div>
</div>
        .box{
width: 60%;
margin: 40px auto;
position: relative;
}
#logo{
width: 200px;
height: 150px;
position: absolute;
left:50%;
margin-left: -100px;
top:;
}
#left{
width: 49%;
float: left;
}
#right{
width: 49%;
float:right;
}
#left::before, #right::before { content: ""; width: 100px; height: 150px; }
#left:before { float: right; }
#right:before { float: left; }

看过之后发现原理其实很简单!就是一个left框一个right框用来装文本内容,分别设置左右浮动,然后中间的图片绝对定位,这时候你会发现你的图片覆盖在文本上面,你就需要让你的文本听话的让出一些位置给图片,从而让文本和图片都可以好好地显示。于是我们给left框和right框各自加了一个before伪元素,然后设置它们的宽为图片的一半,高和图片一样,然后一个设置左浮动一个设置右浮动,这样正好把图片装起来,看上去就是文本为图片让路了!

浏览器效果图:

二:解决父元素塌陷的几种方法。

首先明白什么时候会发生父元素塌陷:当父元素的高没有设置或者设置为auto,如果它的子元素浮动了,那么此时它的父元素就塌陷了,我们可以做一些事情!讲他的父元素撑起来

方法1:加一个after伪元素

为浮动元素的父元素设置一个agter伪元素,注意此时要将after设置为块级元素,inline或者inline-block不会起作用,其实上面三个属性都是必须的,至于他们的意图也很明显,content是必须的,clear需要清除浮动,负责他和浮动元素位于一行,而且高度为0,也还是不会起作用!

页面效果:

 

方法二:为父元素设置一个over-flow:hidden属性

这样可以触发BFC机制,什么叫BFC机制呢?

从上面可以看出来所谓的BFC机制就是块格式上下文,当元素中出现float不为none、position:absolute;、overflow不为visible的时候都会触发BFC机制。触发BFC后会为它的内容建立新的块格式化的上下文,就是格式化一下上下文即重新计算这个元素。这个计算就包括了内部所有元素包含了浮动的元素,因此才会解决塌陷问题。

这个代码就非常简单清晰了!
这是效果图:

明显也达到了效果!

————————我说的这些都是非常基础的东西!这些东西肯定有别的实现方法,我这里的这些是我经常用到的!如果大家有更多更好的方法,请提出来大家多多交流,共同进步!

after及before伪元素及解决父元素塌陷的几种方法的更多相关文章

  1. ie6下子元素撑大父元素

    今天遇到了一个问题.在给a元素定义hover并且增大尺寸时,IE6下该元素会把父元素撑大,而非IE浏览器则是表现为溢出效果不会撑大父元素(我想要的效果).解决IE6的这个问题是采用了一个定位+负边距的 ...

  2. JS子元素oumouseover触发父元素onmouseout

    原文:JS子元素oumouseover触发父元素onmouseout JavaScript中,父元素包含子元素: 当父级设置onmouseover及onmouseout时,鼠标从父级移入子级,则触发父 ...

  3. 子元素z-index高于父元素兄弟元素z-index被遮挡问题

    问题:最近在写样式时,遇到一个这样的问题,子元素的z-index值大于父元素兄弟元素z-index值,结果子元素超出父元素部分被父元素兄弟元素遮挡解决:将父元素的z-index值设置为大于兄弟元素z- ...

  4. 子div用了float浮动之后,如何撑开父元素,让父元素div自动适应高度的问题

    方法一: html: <div id="all1"> <div id="left1">1</div> <div id= ...

  5. 二、vue学习--父元素如何获取子元素的值,子元素如何获取父元素的值

      下图是父元素: 下图是子元素,获取父元素的值,使用props定义属性,这样就可以获取到父元素上传过来的set .place.type,拿到值就可以做一些自己的逻辑处理 二.子元素给父元素传值? 下 ...

  6. js进阶 11-8 jquery如何获取元素相对于父元素的位置

    js进阶 11-8  jquery如何获取元素相对于父元素的位置 一.总结 一句话总结:用jquery的position方法,但是使用这个方法的前提是父元素相对定位,子元素绝对定位,否则和offset ...

  7. parent([expr]) 取得一个包含着所有匹配元素的唯一父元素的元素集合。

    parent([expr]) 概述 取得一个包含着所有匹配元素的唯一父元素的元素集合.大理石构件 你可以使用可选的表达式来筛选. 参数 exprStringV1.0 用来筛选的表达式 示例 描述: 查 ...

  8. 使用flex防止fit-content子元素冲出父元素宽度的方法

    父元素设置了min-width:fit-content后,其宽度由子元素的宽度来决定 <!DOCTYPE html> <html lang="en"> &l ...

  9. 让div盒子相对父盒子垂直居中的几种方法

    div相对于父盒子垂直居中的几种方法,之前在网上看到很多种方法,确实说的很对,也很具体,但是我感觉对于初学者来说,一目了然是最重要的,所以,我把很高深的技巧,和很复杂的css样式都剔除掉,旨在让更多人 ...

随机推荐

  1. Vue 封装可向左向右查看图片列表的组件

    <template> <div class="content-container"> <div class="content-contain ...

  2. python-pytest学习

    一:pytest基于unittest之上的单元测试框架1.自动发现测试模块和测试方法:2.断言使用assert+表达式即可:3.可以设置会话级.模块级.类级.函数级的fixtures :数据准备+清理 ...

  3. this 指向详细解析(箭头函数)

    前言 this 指向问题是入坑前端必须了解知识点,现在迎来了ES6时代,因为箭头函数的出现,所以感觉有必要对 this 问题梳理一下,遂有此文 在非箭头函数下, this 指向调用其所在函数的对象,而 ...

  4. 七、Python-正则表达式

    一.正则式表达式语法 正则表达式是一种用来匹配字符串的强有力的武器,设计思想是一种描述性的语言来给字符串定义一个规则,烦死符合规则的字符串,就认为它匹配,否则不匹配 行定位符:用来描述字符串的边界 ^ ...

  5. uva-507

    题意:连续序列和最大,直接枚举..... 代码跑了2.4s.QAQ #include <string> #include<iostream> #include<map&g ...

  6. Spring 依赖注入(基本注入和自动适配注入)

    Spring 依赖注入 Spring框架的核心功能之一就是通过依赖注入的方式来管理Bean之间的依赖关系. 属性注入 构造注入 内部注入 自动装配 1.属性注入 IService: public in ...

  7. python_装饰器

    越来越觉得写一点技术博客是有多么重要了,明日复明日,现在就开始写吧! 1. 普通装饰器 装饰器的写法是一种语法糖,装饰器也还是一个函数而已,它接收一个函数对象作为参数,并返回一个新函数,主要是拓展原函 ...

  8. 深入理解Java虚拟机读书笔记4----虚拟机类加载机制

    四 虚拟机类加载机制 1 类加载机制     ---概念:虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型.     -- ...

  9. Django09-中间件

    一.前戏 之前通过给视图函数加装饰器来判断用户是否登录,把没有登录的用户请求跳转到登录页面.我们通过给几个特定视图函数加装饰器实现了这个需求.但是以后添加的视图函数可能也需要加上装饰器,这样稍微有点繁 ...

  10. Json.Net(Newtonsoft)系列教程 4.Linq To JSON

    转自:https://www.cnblogs.com/sczmzx/p/7813834.html   一.Linq to JSON是用来干什么的? Linq to JSON是用来操作JSON对象的.可 ...