当前位置:首页 > 科技  > 软件

利用属性选择器对外部链接进行样式设计

来源: 责编: 时间:2023-11-30 09:26:09 168观看
导读你可能会注意到,你访问的一些网站上的外部链接旁边会显示一个小图标。这对用户来说非常有帮助,因为它让他们知道这个链接会将他们带到站点外部。我们可以简单地使用属性选择器来实现外部链接的自定义样式。使用属性选择

你可能会注意到,你访问的一些网站上的外部链接旁边会显示一个小图标。这对用户来说非常有帮助,因为它让他们知道这个链接会将他们带到站点外部。lIh28资讯网——每日最新资讯28at.com

我们可以简单地使用属性选择器来实现外部链接的自定义样式。lIh28资讯网——每日最新资讯28at.com

使用属性选择器

CSS 允许我们根据 HTML 元素的属性来设置样式,方法是将它们放在方括号中。例如,我们可以为具有 hidden 属性的任何元素设置 display 属性为 none:lIh28资讯网——每日最新资讯28at.com

[hidden] {  display: none;}

我们还可以在属性等于特定值时设置元素的样式。对于表单元素,我们可以为特定输入类型设置样式,而不必使用类:lIh28资讯网——每日最新资讯28at.com

input[type='checkbox'] {  accent-color: deeppink;}

对于我们的外部链接,当 href 属性包含指向外部网站的链接时,我们想要应用样式。我们不知道确切的值是什么(并且在样式表中添加每个单独的 URL 是不切实际的!),但我们知道内部链接(指向站点上其他帖子的链接)将以斜杠开头,而外部链接将以 https:// 开头。因此,我们可以只为以 http 开头的链接设置样式,通过在我们的属性选择器中插入一个 ^ 字符:lIh28资讯网——每日最新资讯28at.com

a[href^='http'] {  /* 外部链接的样式 */}

或者我们可以使用其他运算符来确定不同的样式条件:lIh28资讯网——每日最新资讯28at.com

/* 准确匹配 URL */a[href='https://css-irl.info'] {}/* URL 中任何位置有 'css' */a[href*='css'] {}/* 以 .info 结尾 */a[href$='.info'] {}/* 类中包含单词 'link' */a[class~='link'] {}

此外,通过在结束括号前添加 s 或 i,我们可以控制它们是区分大小写还是不区分大小写地比较:lIh28资讯网——每日最新资讯28at.com

/* 区分大小写 */a[href*='css-irl' s] {}/* 不区分大小写 */a[href*='css-irl' i] {}

设置伪元素的样式

对于我们的外部链接,我们将通过设置伪元素的样式来附加一个图标。这里我们使用 content 属性和一个 base64 编码的 SVG,因为图标非常简单。但你也可以使用一个图像 URL、另一个字符或表情符号。我们可以添加一个小边距,使其稍微远离文本。lIh28资讯网——每日最新资讯28at.com

a[href^='http']::after {  content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewbox='0 0 12.2 12.2' width='14' height='14'%3E%3Cpath d='M5.7 0v1.5h4L4.5 6.7l1 1.1 5.3-5.2v3.9h1.4V0z'/%3E%3Cpath fill='none' d='M3.4 6.7l3-2.9H1.5v7h7V5.9l-3 2.9z'/%3E%3Cpath d='M8.5 5.9v4.9h-7v-7h4.9l1.5-1.6H0v10h10V4.4z'/%3E%3C/svg%3E");  margin-left: 0.25em;}

使用 content 属性和 SVG 的一个问题是我们无法完全控制图标的大小。它使用 SVG 的固有尺寸。如果我们想将图标应用于任何外部链接,而不考虑字体大小(例如标题),我们可能更适合使用 background-image 属性。我们可以设置宽度和高度(以 em 为单位,它们相对于字体大小),并使用 background-size 确保我们的 SVG 覆盖整个区域。lIh28资讯网——每日最新资讯28at.com

我们需要将 content 属性设置为空字符串,否则伪元素不会渲染。我们还需要将 display 属性设置为 inline-block。lIh28资讯网——每日最新资讯28at.com

(注:我使用了自定义属性来简化图像 URL 的表示。)lIh28资讯网——每日最新资讯28at.com

a[href^='http']::after {  content: '';  display: inline-block;  width: 1em;  height: 1em;  margin-left: 0.25em;  background-size: 100%;  background-image: url(--var(svgUrl));}

防止孤立图标

这种方法还有一点可以改进。目前,图标可能会换行到文本的下一行,留下一个不受欢迎的孤立图标。lIh28资讯网——每日最新资讯28at.com

图片图片lIh28资讯网——每日最新资讯28at.com

如果我们对伪元素添加 position: absolute,并对锚元素添加一些右侧填充,则图标将不会单独换行。lIh28资讯网——每日最新资讯28at.com

图片图片lIh28资讯网——每日最新资讯28at.com

a[href^='http'] {  padding-right: 1.25em;}a[href^='http']::after {  position: absolute;  content: '';  display: inline-block;  width: 1em;  height: 1em;  margin-left: 0.25em;  background-size: 100%;  background-image: url(--var(svgUrl));}

不幸的是,这个技巧在最新版本的 Chrome 中不起作用。lIh28资讯网——每日最新资讯28at.com

以下是完整代码:lIh28资讯网——每日最新资讯28at.com

*, *::before, *::after {  box-sizing: border-box;}body {  font-family: 'Helvetica', sans-serif;  line-height: 1.6;  margin: 0;  padding: 1em;}.container {  max-width: 380px;  overflow: hidden;  padding: 1rem;  border: 1px solid;  resize: horizontal;}a {  color: inherit;}a[href^='http'] {  padding-right: 1.25em;  background: pink;}a[href^='http']::after {  position: absolute;  content: '';  display: inline-block;  width: 1em;  height: 1em;  margin-left: 0.25em;  background-size: 100%;  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewbox='0 0 12.2 12.2' width='14' height='14'%3E%3Cpath d='M5.7 0v1.5h4L4.5 6.7l1 1.1 5.3-5.2v3.9h1.4V0z'/%3E%3Cpath fill='none' d='M3.4 6.7l3-2.9H1.5v7h7V5.9l-3 2.9z'/%3E%3Cpath d='M8.5 5.9v4.9h-7v-7h4.9l1.5-1.6H0v10h10V4.4z'/%3E%3C/svg%3E");  transform: translateY(0.25em);}

本文链接:http://www.28at.com/showinfo-26-35253-0.html利用属性选择器对外部链接进行样式设计

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 我们聊聊从头学服务器组件:在导航间保留状态

下一篇: 消息队列批量收发消息,请避开这五个坑!

标签:
  • 热门焦点
  • 轿车从天而降电动车主被撞身亡 超速抢道所致:现场视频让网友吵翻

    轿车从天而降电动车主被撞身亡 超速抢道所致:现场视频让网友吵翻

    近日,上海青浦区法院判决轿车从天而降电动车主被撞身亡案,轿车车主被判有期徒刑一年。案件显示当时男子驾驶轿车在上海某路段行驶,前车忽然转弯提速超车,
  • 三言两语说透设计模式的艺术-单例模式

    三言两语说透设计模式的艺术-单例模式

    写在前面单例模式是一种常用的软件设计模式,它所创建的对象只有一个实例,且该实例易于被外界访问。单例对象由于只有一个实例,所以它可以方便地被系统中的其他对象共享,从而减少
  • 一文掌握 Golang 模糊测试(Fuzz Testing)

    一文掌握 Golang 模糊测试(Fuzz Testing)

    模糊测试(Fuzz Testing)模糊测试(Fuzz Testing)是通过向目标系统提供非预期的输入并监视异常结果来发现软件漏洞的方法。可以用来发现应用程序、操作系统和网络协议等中的漏洞或
  • 一文搞定Java NIO,以及各种奇葩流

    一文搞定Java NIO,以及各种奇葩流

    大家好,我是哪吒。很多朋友问我,如何才能学好IO流,对各种流的概念,云里雾里的,不求甚解。用到的时候,现百度,功能虽然实现了,但是为什么用这个?不知道。更别说效率问题了~下次再遇到,
  • 破圈是B站头上的紧箍咒

    破圈是B站头上的紧箍咒

    来源 | 光子星球撰文 | 吴坤谚编辑 | 吴先之每年的暑期档都少不了瞄准追剧女孩们的古偶剧集,2021年有优酷的《山河令》,2022年有爱奇艺的《苍兰诀》,今年却轮到小破站抓住了追
  • 华为开发者大会2023日程公开:开设鸿蒙HarmonyOS 4体验区

    华为开发者大会2023日程公开:开设鸿蒙HarmonyOS 4体验区

    IT之家 7 月 31 日消息,华为今日公布了 HDC.Together 开发者大会 2023 的详细日程。整场大会将于 8 月 4 日-6 日之间举行,届时将发布最新一代鸿蒙 H
  • 2纳米决战2025

    2纳米决战2025

    集微网报道 从三强争霸到四雄逐鹿,2nm的厮杀声已然隐约传来。无论是老牌劲旅台积电、三星,还是誓言重回先进制程领先地位的英特尔,甚至初成立不久的新
  • 7月4日见!iQOO 11S官宣:“鸡血版”骁龙8 Gen2+200W快充加持

    7月4日见!iQOO 11S官宣:“鸡血版”骁龙8 Gen2+200W快充加持

    上半年已接近尾声,截至目前各大品牌旗下的顶级旗舰都已悉数亮相,而下半年即将推出的顶级旗舰已经成为了数码圈爆料的主流,其中就包括全新的iQOO 11S系
  • iQOO 11S或7月上市:搭载“鸡血版”骁龙8Gen2 史上最强5G Soc

    iQOO 11S或7月上市:搭载“鸡血版”骁龙8Gen2 史上最强5G Soc

    去年底,iQOO推出了“电竞旗舰”iQOO 11系列,作为一款性能强机,iQOO 11不仅全球首发2K 144Hz E6全感屏,搭载了第二代骁龙8平台及144Hz电竞屏,同时在快充
Top