img标签添加::before ::after 伪元素无效,伪元素增加:hover伪类无效

1 问题

  • img标签添加::before ::after 伪元素无效
  • 伪元素增加:hover伪类无效

2 解决

  • 只能在img前后增加dom元素
  • 可以这样写:hover::before{} :hover::after{}

3 分析

3.1 定义

::before 创建一个伪元素,其将成为匹配选中的元素的第一个子元素。常通过 content 属性来为一个元素添加修饰性的内容。此元素默认是行级的。
::after 会创建一个伪元素,作为所选元素的最后一个子元素。它通常用于为具有 content 属性的元素添加修饰内容。默认情况下,它是行向布局的。

备注: ::before 和 ::after 生成的伪元素是行级盒子,就好像它们是应用它们的元素或“源元素”的直接子元素,因此不能应用于替换元素(如 <img>),它们的内容在不受当前文档样式的影响的情况下被替换。

3.2 可替换元素

在 CSS 中,可替换元素(replaced element)的展现效果不是由 CSS 来控制的。这些元素是一种外部对象,它们外观的渲染,是独立于 CSS 的。

简单来说,它们的内容不受当前文档的样式的影响。CSS 可以影响可替换元素的位置,但不会影响到可替换元素自身的内容。某些可替换元素,例如 <iframe> 元素,可能具有自己的样式表,但它们不会继承父文档的样式。

CSS 能对可替换元素产生的唯一影响在于,部分属性支持控制元素内容在其框中的位置或定位方式。

3.1.1 典型可替换元素
  • <iframe>
  • <video>
  • <embed>
  • <img>
3.1.2 特定情况下被作为可替换元素处理
  • <option>
  • <audio>
  • <canvas>
  • <object>

HTML 规范也说了 <input> 元素可替换,因为 “image” 类型的 <input> 元素就像 <img> 一样被替换。但是其他形式的控制元素,包括其他类型的 <input> 元素,被明确地列为非可替换元素(non-replaced element)。该规范用术语小挂件(Widget)来描述它们默认的限定平台的渲染行为。
用 CSS content 属性插入的对象是匿名的可替换元素。它们并不存在于 HTML 标记中,因此是“匿名的”。

详见MDN

4 探索其他伪元素在img上的使用

::selection CSS 伪元素应用于文档中被用户高亮的部分(比如使用鼠标或其他选择设备选中的部分)

只有以下css属性,可以在::selection设置

  • color
  • background-color
  • cursor
  • caret-color
  • outline and its longhands
  • text-decoration and its associated properties
  • text-emphasis-color
  • text-shadow
img{
  &::selection {
    background-color: orange;
  }
}

使用::selection之前

在这里插入图片描述

使用::selection之后

在这里插入图片描述

5 其他伪元素

5.1 ::first-letter

选中某块级元素第一行的第一个字母,并且文字所处的行之前没有其他内容

p{
  &::first-letter {
    color: orange;
    font-size:24px
  }
}

在这里插入图片描述

5.2 ::first-line

在某块级元素的第一行应用样式。第一行的长度取决于很多因素,包括元素宽度,文档宽度和文本的文字大小。

::first-line 伪元素只能在块容器中,所以,::first-line伪元素只能在一个 display 值为 block, inline-block, table-cell 或者 table-caption中有用.。在其他的类型中,::first-line 是不起作用的。

p{
  &::first-line {
    color: orange;
    font-size:24px
  }
}

在这里插入图片描述

  • 27
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以尝试以下代码实现你的需求: HTML代码: ```html <div class="tu"> <img src="img/11.jpg"> </div> ``` CSS代码: ```css .tu { position: relative; width: 400px; /* 图片宽度 */ height: 300px; /* 图片高度 */ overflow: hidden; /* 隐藏超出部分 */ } .tu:before, .tu:after { content: ""; position: absolute; top: 50%; /* 上下居中 */ margin-top: -20px; /* 图标高度的一半 */ width: 40px; /* 图标宽度 */ height: 40px; /* 图标高度 */ background-color: rgba(0, 0, 0, 0.5); /* 图标背景颜色 */ color: #fff; /* 图标颜色 */ text-align: center; line-height: 40px; font-size: 24px; cursor: pointer; opacity: 0; /* 初始透明度为0 */ transition: all 0.3s; /* 过渡效果 */ } .tu:before { left: 10px; /* 左图标位置 */ content: "<"; } .tu:after { right: 10px; /* 右图标位置 */ content: ">"; } .tu:hover:before, .tu:hover:after { opacity: 1; /* 鼠标悬停时透明度为1 */ } .tu:hover:before { left: 0; /* 左图标位置调整 */ } .tu:hover:after { right: 0; /* 右图标位置调整 */ } ``` 解释: 1. 使用 `position: relative` 让 `.tu` 相对定位,以便后续绝对定位图标的参考点。 2. 使用 `overflow: hidden` 隐藏超出部分,以确保只显示一张图片。 3. 使用 `:before` 和 `:after` 伪元素在左右两侧添加图标,并使用 `opacity` 控制初始透明度为0,使用 `transition` 添加过渡效果。 4. 使用 `:hover` 伪类控制鼠标悬停时图标的透明度和位置。 注意: 1. 图标样式可以根据需要自行调整。 2. 图片宽度和高度需要根据实际情况设置。 3. 图片需要放在 `.tu` 容器内,否则图标可能会出现定位问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值