Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adds custom styles for <details> and <summary> elements in Markdown content #1735

Merged
merged 17 commits into from May 17, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/proud-walls-thank.md
@@ -0,0 +1,5 @@
---
'@astrojs/starlight': minor
---

Adds custom styles for `<details>` and `<summary>` elements in Markdown content.
25 changes: 25 additions & 0 deletions docs/src/content/docs/guides/authoring-content.md
Expand Up @@ -361,6 +361,31 @@ A code block’s optional title can be set either with a `title="..."` attribute
```
````

## Details

Details (also known as “disclosures” or “accordions”) are useful to hide content that is not immediately relevant.
Users can click a short summary to expand and view the full content.

Use the standard HTML [`<details>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/details) and [`<summary>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/summary) elements in your Markdown content to create a disclosure widget.

You can nest any other Markdown syntax inside a `<details>` element.

<details>
<summary>Where and when is the Andromeda constellation most visible?</summary>

The [Andromeda constellation](<https://en.wikipedia.org/wiki/Andromeda_(constellation)>) is most visible in the night sky during the month of November at latitudes between `+90°` and `−40°`.

</details>

```md
<details>
<summary>Where and when is the Andromeda constellation most visible?</summary>

The [Andromeda constellation](<https://en.wikipedia.org/wiki/Andromeda_(constellation)>) is most visible in the night sky during the month of November at latitudes between `+90°` and `−40°`.

</details>
```

## Other common Markdown features

Starlight supports all other Markdown authoring syntax, such as lists and tables. See the [Markdown Cheat Sheet from The Markdown Guide](https://www.markdownguide.org/cheat-sheet/) for a quick overview of all the Markdown syntax elements.
Expand Down
2 changes: 1 addition & 1 deletion package.json
Expand Up @@ -37,7 +37,7 @@
{
"name": "/_astro/*.css",
"path": "examples/basics/dist/_astro/*.css",
"limit": "14 kB"
"limit": "14.5 kB"
}
]
}
10 changes: 5 additions & 5 deletions packages/starlight/style/asides.css
@@ -1,26 +1,26 @@
.starlight-aside {
padding: 1rem;
border-inline-start: 0.25rem solid;
border-inline-start: 0.25rem solid var(--sl-color-asides-border);
color: var(--sl-color-white);
}
.starlight-aside--note {
--sl-color-asides-text-accent: var(--sl-color-blue-high);
border-color: var(--sl-color-blue);
--sl-color-asides-border: var(--sl-color-blue);
background-color: var(--sl-color-blue-low);
}
.starlight-aside--tip {
--sl-color-asides-text-accent: var(--sl-color-purple-high);
border-color: var(--sl-color-purple);
--sl-color-asides-border: var(--sl-color-purple);
background-color: var(--sl-color-purple-low);
}
.starlight-aside--caution {
--sl-color-asides-text-accent: var(--sl-color-orange-high);
border-color: var(--sl-color-orange);
--sl-color-asides-border: var(--sl-color-orange);
background-color: var(--sl-color-orange-low);
}
.starlight-aside--danger {
--sl-color-asides-text-accent: var(--sl-color-red-high);
border-color: var(--sl-color-red);
--sl-color-asides-border: var(--sl-color-red);
background-color: var(--sl-color-red-low);
}

Expand Down
70 changes: 70 additions & 0 deletions packages/starlight/style/markdown.css
Expand Up @@ -117,3 +117,73 @@
border: 0;
border-bottom: 1px solid var(--sl-color-hairline);
}

/* <details> and <summary> styles */
.sl-markdown-content details:not(:where(.not-content *)) {
--sl-details-border-color: var(--sl-color-gray-5);

border-inline-start: 2px solid var(--sl-details-border-color);
padding-inline-start: 1rem;
}
.sl-markdown-content details:not([open]):hover:not(:where(.not-content *)),
.sl-markdown-content details:has(> summary:hover):not(:where(.not-content *)) {
--sl-details-border-color: var(--sl-color-text-accent);
}
.sl-markdown-content summary:not(:where(.not-content *)) {
color: var(--sl-color-white);
cursor: pointer;
display: block; /* Needed to hide the default marker in some browsers. */
font-weight: 600;
/* Expand the outline so that the marker cannot distort it. */
margin-inline-start: -0.5rem;
padding-inline-start: 0.5rem;
}
.sl-markdown-content details[open] > summary:not(:where(.not-content *)) {
margin-bottom: 1rem;
}

/* <summary> marker styles */
.sl-markdown-content summary:not(:where(.not-content *))::marker,
.sl-markdown-content summary:not(:where(.not-content *))::-webkit-details-marker {
display: none;
HiDeoo marked this conversation as resolved.
Show resolved Hide resolved
}
.sl-markdown-content summary:not(:where(.not-content *))::before {
--sl-details-marker-size: 1.25rem;

background-color: currentColor;
content: '';
display: inline-block;
height: var(--sl-details-marker-size);
width: var(--sl-details-marker-size);
margin-inline: calc((var(--sl-details-marker-size) / 4) * -1) 0.25rem;
vertical-align: middle;
-webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M14.8 11.3 10.6 7a1 1 0 1 0-1.4 1.5l3.5 3.5-3.5 3.5a1 1 0 0 0 0 1.4 1 1 0 0 0 .7.3 1 1 0 0 0 .7-.3l4.2-4.2a1 1 0 0 0 0-1.4Z'/%3E%3C/svg%3E%0A");
mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M14.8 11.3 10.6 7a1 1 0 1 0-1.4 1.5l3.5 3.5-3.5 3.5a1 1 0 0 0 0 1.4 1 1 0 0 0 .7.3 1 1 0 0 0 .7-.3l4.2-4.2a1 1 0 0 0 0-1.4Z'/%3E%3C/svg%3E%0A");
-webkit-mask-repeat: no-repeat;
mask-repeat: no-repeat;
delucis marked this conversation as resolved.
Show resolved Hide resolved
}
@media (prefers-reduced-motion: no-preference) {
.sl-markdown-content summary:not(:where(.not-content *))::before {
transition: transform 0.2s ease-in-out;
}
}
.sl-markdown-content details[open] > summary:not(:where(.not-content *))::before {
transform: rotateZ(90deg);
}
[dir='rtl'] .sl-markdown-content summary:not(:where(.not-content *))::before,
.sl-markdown-content [dir='rtl'] summary:not(:where(.not-content *))::before {
transform: rotateZ(180deg);
}
/* <summary> with only a paragraph automatically added when using MDX */
.sl-markdown-content summary:not(:where(.not-content *)) p:only-child {
display: inline;
}

/* <details> styles inside asides */
.sl-markdown-content .starlight-aside details:not(:where(.not-content *)) {
--sl-details-border-color: var(--sl-color-asides-border);
}
.sl-markdown-content .starlight-aside details:not([open]):hover:not(:where(.not-content *)),
.sl-markdown-content .starlight-aside details:has(> summary:hover):not(:where(.not-content *)) {
--sl-details-border-color: var(--sl-color-asides-text-accent);
}