` doesn't just style it like a header; it also means that assistive tech can understand it to be a header (this also helps with SEO - a lot of things that improve accessibility improve SEO as well). See the Mozilla docs for a [list of semantic HTML elements](https://developer.mozilla.org/en-US/docs/Glossary/Semantics#semantic_elements).
Notably, `
`s and ``s are not semantic and convey no meaning. They are used for styling alone.
### Semantic HTML in Framer
-Semantic HTML elements can be applied to any Framer element using the "Accessibility" section in the right-hand sidebar. Read about [using semantic tags for navigation and footers](https://www.framer.com/help/articles/semantic-tags-navigation-footer/){target="_blank" rel="external"} - this applies to far more than the two elements mentioned.
+Semantic HTML elements can be applied to any Framer element using the "Accessibility" section in the right-hand sidebar. Read about [using semantic tags for navigation and footers](https://www.framer.com/help/articles/semantic-tags-navigation-footer/) - this applies to far more than the two elements mentioned.
## Reading order
@@ -58,7 +58,7 @@ Following from reading order, we reach the concept of keyboard navigation. The a
Links, buttons, and form controls are tabbable by default. When tagged as the correct HTML element, they will function as expected.
-[Framer supports adding the tabindex attribute](https://www.framer.com/help/articles/tab-order-customization/){target="_blank" rel="external"}. If you *must* do this for some reason, make sure to set its value to 0 - Framer defaults to 1. 0 will maintain the reading order established by layout and the left-hand sidebar; 1 will place the tabbable element first in the tabbing order.
+[Framer supports adding the tabindex attribute](https://www.framer.com/help/articles/tab-order-customization/). If you *must* do this for some reason, make sure to set its value to 0 - Framer defaults to 1. 0 will maintain the reading order established by layout and the left-hand sidebar; 1 will place the tabbable element first in the tabbing order.
## Keyboard focus
@@ -66,7 +66,7 @@ When navigating with a keyboard, there should always be visual indication on the
### Keyboard focus in Framer
-Framer does not currently allow for customizing keyboard focus in the editor. It must be done using [custom CSS](https://www.framer.com/help/articles/how-to-add-custom-code/){target="_blank" rel="external"}.
+Framer does not currently allow for customizing keyboard focus in the editor. It must be done using [custom CSS](https://www.framer.com/help/articles/how-to-add-custom-code/).
In my tests, it was possible to clip out the browser default focus outline with certain padding settings. Review your site by tabbing through the page(s), and ensure that a full outline surrounds all interactable elements. If an outline is missing, consider adjusting the padding around that element.
@@ -74,7 +74,7 @@ In my tests, it was possible to clip out the browser default focus outline with
Skip links allow keyboard users to bypass large repeated blocks of content (such as a top nav). Without a skip link, a keyboard user will not stay long on a site - after moving to a new page, they may realize they have to tab through the entire nav again and leave.
-Skip links are generally invisible to mouse users, and only appear when tabbing around a page. To see an example, open [WebAIM (Web Accessibility in Mind)](https://webaim.org/){target="_blank" rel="external"} and hit the `TAB` key. Notice the red box that appears in the upper left that reads "skip to main content."
+Skip links are generally invisible to mouse users, and only appear when tabbing around a page. To see an example, open [WebAIM (Web Accessibility in Mind)](https://webaim.org/) and hit the `TAB` key. Notice the red box that appears in the upper left that reads "skip to main content."
### Skip links in Framer
@@ -82,7 +82,7 @@ Skip links in Framer require custom code, both React and CSS.
## Text alternatives
-Text alternatives - alternative text, captioning, audio descriptions, etc. - are the most commonly thought of form of web accessibility. You likely need no further explanation of what they are and why they matter, but they can be rather daunting to write. I recommend reading [Adrian Roselli's approach to writing alt text](https://adrianroselli.com/2024/05/my-approach-to-alt-text.html){target="_blank" rel="external"}.
+Text alternatives - alternative text, captioning, audio descriptions, etc. - are the most commonly thought of form of web accessibility. You likely need no further explanation of what they are and why they matter, but they can be rather daunting to write. I recommend reading [Adrian Roselli's approach to writing alt text](https://adrianroselli.com/2024/05/my-approach-to-alt-text.html).
### Text alternatives in Framer
@@ -93,12 +93,12 @@ Text alternatives can be easily set by double clicking on the media item in ques
There are a couple areas to consider when it comes to color:
1. **Light and dark modes** are both accessibility needs, and a site that only offers one limits access of some potential users.
-1. **Color contrast** will improve users' abilities to view and read your site. WebAIM covers [color contrast as it relates to WCAG](https://webaim.org/articles/contrast/){target="_blank" rel="external"}. While you can use [WebAIM's contrast checker](https://webaim.org/resources/contrastchecker/){target="_blank" rel="external"}, I recommend finding a more fully-featured color design tool that incorporates contrast checking, luminance comparison, color vision simulation, and more. My personal tool of choice is [Atmos](https://atmos.style/){target="_blank" rel="external"}.
+1. **Color contrast** will improve users' abilities to view and read your site. WebAIM covers [color contrast as it relates to WCAG](https://webaim.org/articles/contrast/). While you can use [WebAIM's contrast checker](https://webaim.org/resources/contrastchecker/), I recommend finding a more fully-featured color design tool that incorporates contrast checking, luminance comparison, color vision simulation, and more. My personal tool of choice is [Atmos](https://atmos.style/).
1. Ensuring that **color alone is not used to communicate meaning** helps users with various color deficiencies or certain AT users access your content and understand what is going on. For example, a form that highlights inputs in red when they are improperly filled in should *also* provide error messages.
### Color in Framer
-Regarding item 1, Framer supports [light and dark modes for your color styles](https://www.framer.com/academy/lessons/light-dark-mode){target="_blank" rel="external"}. Items 2 & 3 are handled independently of Framer.
+Regarding item 1, Framer supports [light and dark modes for your color styles](https://www.framer.com/academy/lessons/light-dark-mode). Items 2 & 3 are handled independently of Framer.
## Responsive design
@@ -106,13 +106,13 @@ A huge percentage of web browsing comes from mobile devices or tablets - and tha
### Responsive design in Framer
-Read about [how to design responsive websites in Framer](https://www.framer.com/blog/design-responsive-websites/){target="_blank" rel="external"}.
+Read about [how to design responsive websites in Framer](https://www.framer.com/blog/design-responsive-websites/).
## Forms
Accessible forms can be *hard*. They bring in challenges relating to labeling, validation, reading order, and color design.
-1. **Labeling:** all form controls should have associated labels. Note that placeholder text does not constitute a label! Best practice is that labels be visible, but in some cases (for example a search bar which can be widely visually understood via placeholder text and a magnifying glass icon) you may want an invisible label. [Invisible labels can be achieved in several ways](https://www.w3.org/WAI/tutorials/forms/labels/#hiding-label-text){target="_blank" rel="external"}.
+1. **Labeling:** all form controls should have associated labels. Note that placeholder text does not constitute a label! Best practice is that labels be visible, but in some cases (for example a search bar which can be widely visually understood via placeholder text and a magnifying glass icon) you may want an invisible label. [Invisible labels can be achieved in several ways](https://www.w3.org/WAI/tutorials/forms/labels/#hiding-label-text).
1. **Validation:** thankfully, form control attributes can control validation for many common scenarios such as email, phone number, etc. It’s also possible to control whether an input is required.
1. **Reading order:** it’s important to ensure that tabbing through your form follows the same order as the visual items.
1. **Color:** as discussed earlier, ensure that errors are not communicated solely by color!
@@ -129,7 +129,7 @@ Accessible forms can be *hard*. They bring in challenges relating to labeling, v
## Other considerations
- Links should have **anchor text** that accurately represents what they point to (review this document for examples - note how links encapsulate the content they lead to).
- - Counterexample: a newspaper page with many "continue reading" links. In this case, you would use the title or aria-label attributes to give a better programmatic name to the link that isn't visible to sighted users. Framer doesn't support the title attribute, so use [aria-label](https://www.framer.com/help/articles/improving-accessibility-with-aria-labels/){target="_blank" rel="external"} (found under "Accessibility" in the right-hand sidebar).
+ - Counterexample: a newspaper page with many "continue reading" links. In this case, you would use the title or aria-label attributes to give a better programmatic name to the link that isn't visible to sighted users. Framer doesn't support the title attribute, so use [aria-label](https://www.framer.com/help/articles/improving-accessibility-with-aria-labels/) (found under "Accessibility" in the right-hand sidebar).
- Links should always be **visibly indicated as links** - underlines are traditional, and traditional is understandable by users. If you choose otherwise, ensure you aren't [distinguishing only by color](#color)!
- If your links are underlined, avoid underlining other text elements to avoid confusion.
-- Some users need **reduced or removed animations**. There is a setting in Framer to [allow reduced motion support](https://www.framer.com/help/articles/reduced-motion-settings/){target="_blank" rel="external"}. It's turned off by default.
+- Some users need **reduced or removed animations**. There is a setting in Framer to [allow reduced motion support](https://www.framer.com/help/articles/reduced-motion-settings/). It's turned off by default.
diff --git a/src/posts/2026/2026-09-08-leather-mouse-purse.md b/src/posts/2026/2026-09-08-leather-mouse-purse.md
index cc31aba6..6316d45b 100644
--- a/src/posts/2026/2026-09-08-leather-mouse-purse.md
+++ b/src/posts/2026/2026-09-08-leather-mouse-purse.md
@@ -8,4 +8,4 @@ tags:
- leather
---
-Made from [a pattern by AnnaleatherHK on Etsy](https://www.etsy.com/listing/900951877/pdf-pattern-mouse-coin-purse-leather-diy){target="_blank" rel="external"}.
+Made from [a pattern by AnnaleatherHK on Etsy](https://www.etsy.com/listing/900951877/pdf-pattern-mouse-coin-purse-leather-diy).
diff --git a/src/posts/2026/2026-09-09-houndstooth-dishtowels.md b/src/posts/2026/2026-09-09-houndstooth-dishtowels.md
index 405d7534..12e47369 100644
--- a/src/posts/2026/2026-09-09-houndstooth-dishtowels.md
+++ b/src/posts/2026/2026-09-09-houndstooth-dishtowels.md
@@ -8,6 +8,6 @@ tags:
- weaving
---
-Yarn: [Circulo Anne Weaving Yarn](https://woolery.com/products/circulo-anne-weaving-yarn){target="_blank" rel="external"}.
+Yarn: [Circulo Anne Weaving Yarn](https://woolery.com/products/circulo-anne-weaving-yarn).
3 towels. Woven area roughly 12"x24". Hemstitched.