先来简略理解下盒模型:

在 css3 之前,盒模型默认为 box-sizing : content-box,这种模式下的盒模型计算大小方式为,width + padding + border ;

而 css3 中的盒模型为 box-sizing : border-box,比如,我们定义一个宽高为 300 的盒子,padding 为 20,border 为 10,

当我们添加box-sizing : border-box 后,这个盒子的实际大小还是 300 x 300,并不计算 padding 和 border,变化的是实际内容的大小。

再来说说 伪元素:

我们先来看一种写法:

div:hover::before{} /* 表示当 div hover 时,在当前 div 前面添加 */
div:hover::after{} /* 表示当 div hover 时,在当前 div 后面添加 */

这里直接说结论,其实,伪元素 就是一个行内元素,我们完全可以把它们看成是一个行内元素的盒子,使用伪元素必须添加 content : ' ' 属性。

下面,我们通过一个例子,来综合应用下盒模型与伪元素:

现在,我们有一个需求是这样的:当鼠标悬浮在图片上时,盒子大小本身不变化,图片上显示一个圆角的带有透明度的边框。

我们的第一反应自然是 使用 hover 来实现

第一种方案:

  div {
width: 790px;
height: 340px;
margin: 100px auto;
} div:hover {
border: 10px solid rgba(, , , 0.9);
}

这种方法并不能实现我们的需求,盒子会被撑大,并且,border 并没有显示在图片上,而是环绕在图片四周,那,我们添加 box-sizing : border-box 呢?显然也是不行的。

第二种方案:

  div {
width: 790px;
height: 340px;
margin: 100px auto;
box-sizing: border-box;
overflow: hidden;
} div img {
width: %;
height: %;
} div:hover {
border: 10px solid rgba(, , , 0.9);
}

我们将 img 的宽高设置为 100%,这种方法同样无法实现边框压在图片上的效果,会产生图片向小缩放的效果。

正确的方案:

      div {
width: 790px;
height: 340px;
margin: 100px auto;
position: relative;
border-radius: 8px;
overflow: hidden;
} div:hover::after {
content: '';
position: absolute;
top: ;
left: ;
width:%;
height:%;
border:10px solid rgba(,,,.);
box-sizing: border-box;
}

要实现边框压在图片上的效果,必须使用定位,上面我们说过,伪元素本身就是一个行内盒子,使用定位后,就可以随意设置大小,将伪元素定位到与父盒子相同的位置,且有相同的大小,此时再添加 box-sizing : border-box 保证div大小不变,即实现了我们上面所说的需求。

这里对于盒模型及伪元素的介绍并不全面,只是粗略的一带而过,如有不懂的读者,建议先搞清楚这两者,弄懂后,再来看本文案例,就会一目了然了。

以上,就是本文的全部内容~~~

css3 盒模型与 伪元素综合应用案例的更多相关文章

  1. CSS3盒模型温故

    CSS有一种基础设计模式叫盒模型,定义了Web页面中的元素是如何看做盒子来解析的.每一个盒子有不同的展示界面,下面就来介绍盒模型,主要有一下几种盒模型:inline.inline-block.bloc ...

  2. CSS3盒模型display:box详解

    display:box;box-flex是css3新添加的盒子模型属性,它的出现可以解决我们通过N多结构.css实现的布局方式.经典的一个布局应用就是布局的垂直等高.水平均分.按比例划分. 目前box ...

  3. css3 盒模型记

    css3 盒模型 css假定每个元素都会生成一个或多个矩形框,这称为元素框.各元素框中心有一个内容区.这个内容区周围有可选的内边距,边框和外边距.这些项之所以被认为是可选的,原因是它们的宽度可以设置为 ...

  4. css3 盒模型

    0,前言 在css2.1 之前,我们都熟知的两种盒模型,一种是w3c标准盒模型,另外一种是怪异模式下的盒模型.在css3之前我们一直使用的是标准盒模型,但是标准盒模型的宽度总是需要小心的去使用,稍有不 ...

  5. 第94天:CSS3 盒模型详解

    CSS3盒模型详解 盒模型设定为border-box时 width = border + padding + content 盒模型设定为content-box时 width = content所谓定 ...

  6. 5.css3盒模型--margin/border/padding/content

    1.css3盒模型: ①margin外边距: Margin-top,Margin-right,Margin-bottom,Margin-left ②Border边框: Border-width Bor ...

  7. CSS3 盒模型---css初始化会用到:box-sizing: border-box 盒子大小为 width 就是说 padding 和 border 是包含到width里面的

    CSS3中可以通过box-sizing 来指定盒模型,即可指定为content-box.border-box,这样我们计算盒子大小的方式就发生了改变. 可以分成两种情况: 1.box-sizing: ...

  8. css3盒模型

    css2.1盒模型: 当你定义盒子的宽高后:如果添加padding和border值后盒子的宽高会被撑大 盒子的高度=定义的高度+(padding-top + padding-bottom)+(bord ...

  9. CSS3盒模型之box-sizing

    这些天在做一个手机端的页面,遇到了一些问题!首当其冲的就是盒子的溢出问题!大家都知道,手机的尺寸各异,各种型号的手机多得能闪瞎你们的眼睛,为了能 让这些设置更好的浏览我们的页面,我们已经不能固定页面的 ...

随机推荐

  1. 用select实现多客户端连接

    server.c 把accept也看成是一个read类型的函数, 于是我们可以把sockfd也放入到select中 maxi标记当前客户端连接数组的最大下标 select返回值为当前已经准备就绪的fd ...

  2. Java并发AtomicLong接口

    java.util.concurrent.atomic.AtomicLong类提供了可以被原子地读取和写入的底层long值的操作,并且还包含高级原子操作. AtomicLong支持基础long类型变量 ...

  3. linux下对rpm源码手工打补丁

    前言 通常情况rpm包组件管理方式下的linux环境,常用打补丁的方式只有一种:修改spec文件定义的Patch和patch字段,其实spec文件中调用的底层命令还是patch.  因为业务需要要编译 ...

  4. poj3468 A Simple Problem with Integers (树状数组做法)

    题目传送门 A Simple Problem with Integers Time Limit: 5000MS   Memory Limit: 131072K Total Submissions: 1 ...

  5. java 多线程实现的四种方式

    一个线程的生命周期 线程是一个动态执行的过程,它也有一个从产生到死亡的过程. 下图显示了一个线程完整的生命周期. 新建状态: 使用 new 关键字和 Thread 类或其子类建立一个线程对象后,该线程 ...

  6. 对于一键退出APP功能实现的技术探讨

    在Android的开发过程中,会经常存在“一键退出APP”的需求.经过一段时间的整理,其主要实现方式有以下几种. 本质:一键结束当前APP的所有activity&一键结束当前APP进程,两者合 ...

  7. dubbo服务调试管理实用命令

    公司如果分项目组开发的,各个项目组调用各项目组的接口,有时候需要在联调环境调试对方的接口,可以直接telnet到dubbo的服务通过命令查看已经布的接口和方法,并能直接invoke具体的方法,我们可以 ...

  8. Linux中各类程序的配置文件位置

    目录 Linux中各类程序的配置文件位置 1.启动引导程序配置文件 2.系统启动文件核脚本 3.网络配置文件 4.超级服务程序配置文件和目录 5.硬件配置 6.硬件访问文件 7.扫描仪配置文件 8.打 ...

  9. Java集合体系结构(List、Set、Collection、Map的区别和联系)

    Java集合体系结构(List.Set.Collection.Map的区别和联系) 1.Collection 接口存储一组不唯一,无序的对象 2.List 接口存储一组不唯一,有序(插入顺序)的对象 ...

  10. Node.js require 方法

    Node.js 中存在 4 类模块(原生模块和3种文件模块),尽管 require 方法极其简单,但是内部的加载却是十分复杂的,其加载优先级也各自不同