我想要为我的网站(WordPress)中的所有外部链接设置样式。我正在尝试以下代码:
.post p a[href^="http://"]:after
但是WordPress在链接中放置了整个URL...那么,我如何为所有不以http://www.mywebsite.com开头的链接设置样式呢?
谢谢。
我想要为我的网站(WordPress)中的所有外部链接设置样式。我正在尝试以下代码:
.post p a[href^="http://"]:after
但是WordPress在链接中放置了整个URL...那么,我如何为所有不以http://www.mywebsite.com开头的链接设置样式呢?
谢谢。
a[href]:not(:where(
/* exclude hash only links */
[href^="#"],
/* exclude relative but not double slash only links */
[href^="/"]:not([href^="//"]),
/* domains to exclude */
[href*="//stackoverflow.com"],
/* subdomains to exclude */
[href*="//meta.stackoverflow.com"],
)):after {
content: '↗️';
}
<strong>Internal sites:</strong>
<br>Lorem <a href="http://stackoverflow.com">http://stackoverflow.com</a> ipsum
<br>Lorem <a href="/a/5379820">/a/5379820</a> ipsum
<br>Lorem <a href="//stackoverflow.com/a/5379820">//stackoverflow.com/a/5379820</a> ipsum
<br>Lorem <a href="https://dev59.com/G2435IYBdhLWcg3wfgQf#5379820">https://dev59.com/G2435IYBdhLWcg3wfgQf#5379820</a> ipsum
<br>Lorem <a href="https://dev59.com/G2435IYBdhLWcg3wfgQf#5379820">https://dev59.com/G2435IYBdhLWcg3wfgQf#5379820</a> ipsum
<br>Lorem <a href="https://meta.stackoverflow.com/">https://meta.stackoverflow.com/</a> ipsum
<br>Lorem <a href="ftp://stackoverflow.com">ftp://stackoverflow.com</a> ipsum
<br><br>
<strong>External sites:</strong>
<br>Lorem <a href="ftp://google.com">ftp://google.com</a> ipsum
<br>Lorem <a href="https://google.com">https://google.com</a> ipsum
<br>Lorem <a href="http://google.com">http://google.com</a> ipsum
<br>Lorem <a href="https://www.google.com/search?q=stackoverflow">https://www.google.com/search?q=stackoverflow</a>
<br>Lorem <a href="//www.google.com/search?q=stackoverflow">//www.google.com/search?q=stackoverflow</a>
<br><br>
<strong>Other anchor types</strong>
<br>Lorem <a>no-href</a> ipsum
<br>Lorem <a href="#hash">#hash</a> ipsum
使用一些特殊的CSS语法,您可以轻松地实现此功能。以下是一种应该适用于HTTP和HTTPS协议的方法:
a[href^="http://"]:not([href*="stackoverflow.com"]):after,
a[href^="https://"]:not([href*="stackoverflow.com"]):after {
content: '↗️';
}
这种方法展示了类似维基百科的外部链接:
a[href^="http"]:after {
content: " " url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAVklEQVR4Xn3PgQkAMQhDUXfqTu7kTtkpd5RA8AInfArtQ2iRXFWT2QedAfttj2FsPIOE1eCOlEuoWWjgzYaB/IkeGOrxXhqB+uA9Bfcm0lAZuh+YIeAD+cAqSz4kCMUAAAAASUVORK5CYII=);
}
这里可以找到一个示例:http://jsfiddle.net/ZkbKp/
一个简单的规则,不涉及硬编码:
a[href*="//"] { /* make me do stuff */ }
适用于所有方案。具有识别错误内部URL的附加好处。对于将内部链接伪装为外部链接的链接,只需在相对URL前缀中加上//
。
感谢Mark Battistella在2012年在CSS-Tricks上发布此片段。
更新:根据实际使用,我个人发现上述方法存在问题,因为它会为所有绝对链接设置样式,这可能会在某些情况下导致意外的样式(例如,在Brave中,当您下载页面以进行离线查看时)。我的建议是改用a[rel*="external"]::after
并装饰您的外部链接。
a[rel=external]
结合使用。 - vhsa[href^="http://"]:not([href*="maggew.com"]):after {
content: " " url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAVklEQVR4Xn3PgQkAMQhDUXfqTu7kTtkpd5RA8AInfArtQ2iRXFWT2QedAfttj2FsPIOE1eCOlEuoWWjgzYaB/IkeGOrxXhqB+uA9Bfcm0lAZuh+YIeAD+cAqSz4kCMUAAAAASUVORK5CYII=);
}
<a href="http://gebfire.com" target="_blank">External</a>
这是我用于自定义图像(如网站图标)的代码。
a[href^="http://"]:not([href*="magew.com"]):after {
content: " " url('/wp-content/uploads/2014/03/favicon.png');
}
<a href='http://' target='_blank'>Justin Bieber Fan Club</a>
,您可以这样操作:
CSS:
a[target="_blank"]:after{
content: " [external]"
}
--icon-external-link: url('data:image/svg+xml,\
<svg xmlns="http://www.w3.org/2000/svg" viewBox="-24 -24 48 48"> \
<defs> \
<mask id="corner"> \
<rect fill="white" x="-24" y="-24" width="48" height="48"></rect> \
<rect fill="black" x="2" y="-24" width="22" height="26"></rect> \
</mask> \
</defs> \
<g stroke="blue" fill="blue" stroke-width="4"> \
<rect x="-20" y="-16" width="32" height="32" rx="7" ry="7" stroke-width="3" fill="none" mask="url(%23corner)"/> \
<g transform="translate(1,0)" stroke-linecap="square"> \
<line x1="0" y1="0" x2="17" y2="-17" stroke-width="6"/> \
<polygon points="21 -21, 21 -8, 8 -21" stroke-linejoin="round" stroke-width="3"/> \
</g> \
</g> \
</svg>');
然后在您的规则中,您可以像这样引用它:
a[href^="http"]:not([href*="example.mil"])::after {
content: '';
background: no-repeat left .25em center var(--icon-external-link);
padding-right: 1.5em;
}
target="_blank"
以及rel="noopener noreferrer"
。因此,为了查找标记中不存在此属性的链接,您可能只想针对具有正确'rel'属性的链接。以下是如何使用网站图标图片来为外部链接添加样式:
a[href*="http"] {
background: url('favicon.png') no-repeat 100% 0;
background-size: 16px 16px;
padding-right: 19px;
}
我喜欢@henryscat分享的方法,但由于不是SVG专家,我很难更改图标。为了让我更容易,我删除了遮罩并仅使用线条创建了图标。在图标定义前面的注释描述了<line/>
是图标的哪个部分。
a[target="_blank"]::after {
content: '';
background: no-repeat var(--icon-external-link);
padding-right: 1em;
}
:root {
/*
line left
line right
line bottom
line top
arrow left
arrow right
arrow diagonal
*/
--icon-external-link: url('data:image/svg+xml,\
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"> \
<g style="stroke:blue;stroke-width:1"> \
<line x1="5" y1="5" x2="5" y2="14" /> \
<line x1="14" y1="9" x2="14" y2="14" /> \
<line x1="5" y1="14" x2="14" y2="14" /> \
<line x1="5" y1="5" x2="9" y2="5" /> \
<line x1="10" y1="2" x2="17" y2="2" /> \
<line x1="17" y1="2" x2="17" y2="9" /> \
<line x1="10" y1="9" x2="17" y2="2" style="stroke-width:1.5" /> \
</g> \
</svg>');
}
[href^="."]
。 - Marijke Luttekes