diff --git a/content/blog/example/index.md b/content/blog/example/index.md
index 1bd43477..21caa714 100644
--- a/content/blog/example/index.md
+++ b/content/blog/example/index.md
@@ -154,3 +154,7 @@ This is regular text.
2. Padded sub-item 2
3. List item 3
+
+# Heading `with a code snippet` inside of it
+
+# Heading [with a link](https://example.com) inside of it
diff --git a/src/views/base/scripts/heading-link-script.astro b/src/views/base/scripts/heading-link-script.astro
index eb7d831b..ec537d98 100644
--- a/src/views/base/scripts/heading-link-script.astro
+++ b/src/views/base/scripts/heading-link-script.astro
@@ -31,6 +31,10 @@ import style from "./heading-link.module.scss";
) as HTMLTemplateElement;
function handleClick(e: Event) {
+ if ((e.target as HTMLElement).tagName === "A") {
+ return;
+ }
+
const target = e.currentTarget as HTMLElement;
const headingAnchorEl = target.hasAttribute("data-heading-anchor")
? target
diff --git a/src/views/base/scripts/heading-link.module.scss b/src/views/base/scripts/heading-link.module.scss
index 1b7c7504..4df047d1 100644
--- a/src/views/base/scripts/heading-link.module.scss
+++ b/src/views/base/scripts/heading-link.module.scss
@@ -87,6 +87,17 @@
}
}
+// If the heading contains an which is hovered,
+// click will follow the anchor href, so the "Copy link"
+// button should not be displayed
+@supports selector(:has(*)) {
+ :global(.heading-linked):has(a:hover, a:focus-visible) {
+ .headingLink {
+ opacity: 0 !important;
+ }
+ }
+}
+
.headingLinkContainer:focus-visible .headingLink {
outline: var(--heading-link_outline-width) solid var(--heading-link_outline-color);
}
@@ -116,13 +127,17 @@
--heading_background_outline-width: var(--border-width_focus);
}
-:global(.heading-linked):hover,
-:global(.heading-linked):focus-within,
-:global(.heading-linked):has(.headingLinkContainer:hover) {
- text-decoration: underline;
-}
-
@supports selector(:has(*)) {
+ :global(.heading-linked):hover,
+ :global(.heading-linked):focus-within,
+ :global(.heading-linked):has(.headingLinkContainer:hover) {
+ // The underline should not be applied if an inner is focused
+ // as clicking will follow the link, not interact with the heading
+ &:not(:has(a:hover, a:focus-visible)) {
+ text-decoration: underline;
+ }
+ }
+
:global(.heading-linked):has(.headingLinkContainer:focus-visible) {
&> span {
border-radius: calc(var(--heading_background_corner-radius) - var(--heading_background_padding));
@@ -133,6 +148,11 @@
}
@supports not selector(:has(*)) {
+ :global(.heading-linked):hover,
+ :global(.heading-linked):focus-within {
+ text-decoration: underline;
+ }
+
:global(.heading-linked):focus-within {
&> span {
border-radius: calc(var(--heading_background_corner-radius) - var(--heading_background_padding));