fix(theme/a11y): use ul and li for lists (#5326)

pull/5328/head
Bjorn Lu 2 months ago committed by GitHub
parent 79cdd8c018
commit 3f99872468
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -37,8 +37,8 @@ const grid = computed(() => {
<template> <template>
<div v-if="features" class="VPFeatures"> <div v-if="features" class="VPFeatures">
<div class="container"> <div class="container">
<div class="items"> <ul class="items">
<div <li
v-for="feature in features" v-for="feature in features"
:key="feature.title" :key="feature.title"
class="item" class="item"
@ -53,8 +53,8 @@ const grid = computed(() => {
:rel="feature.rel" :rel="feature.rel"
:target="feature.target" :target="feature.target"
/> />
</div> </li>
</div> </ul>
</div> </div>
</div> </div>
</template> </template>

@ -10,8 +10,8 @@ defineProps<{
<template> <template>
<div class="VPMenu"> <div class="VPMenu">
<div v-if="items" class="items"> <ul v-if="items" class="items">
<template v-for="item in items" :key="JSON.stringify(item)"> <li v-for="item in items" :key="JSON.stringify(item)">
<VPMenuLink v-if="'link' in item" :item /> <VPMenuLink v-if="'link' in item" :item />
<component <component
v-else-if="'component' in item" v-else-if="'component' in item"
@ -19,8 +19,8 @@ defineProps<{
v-bind="item.props" v-bind="item.props"
/> />
<VPMenuGroup v-else :text="item.text" :items="item.items" /> <VPMenuGroup v-else :text="item.text" :items="item.items" />
</template> </li>
</div> </ul>
<slot /> <slot />
</div> </div>

@ -26,13 +26,13 @@ const hasExtraContent = computed(
class="VPNavBarExtra" class="VPNavBarExtra"
label="extra navigation" label="extra navigation"
> >
<div <ul
v-if="localeLinks.length && currentLang.label" v-if="localeLinks.length && currentLang.label"
class="group translations" class="group translations"
> >
<p class="trans-title">{{ currentLang.label }}</p> <li class="trans-title">{{ currentLang.label }}</li>
<template v-for="locale in localeLinks" :key="locale.link"> <li v-for="locale in localeLinks" :key="locale.link">
<VPMenuLink <VPMenuLink
:item="locale" :item="locale"
:external="false" :external="false"
@ -42,8 +42,8 @@ const hasExtraContent = computed(
:dir="locale.dir" :dir="locale.dir"
data-allow-mismatch="attribute" data-allow-mismatch="attribute"
/> />
</template> </li>
</div> </ul>
<div <div
v-if=" v-if="

@ -15,15 +15,17 @@ const { theme } = useData()
<span id="main-nav-aria-label" class="visually-hidden"> <span id="main-nav-aria-label" class="visually-hidden">
Main Navigation Main Navigation
</span> </span>
<template v-for="item in theme.nav" :key="JSON.stringify(item)"> <ul class="list">
<VPNavBarMenuLink v-if="'link' in item" :item /> <li v-for="item in theme.nav" :key="JSON.stringify(item)">
<component <VPNavBarMenuLink v-if="'link' in item" :item />
v-else-if="'component' in item" <component
:is="item.component" v-else-if="'component' in item"
v-bind="item.props" :is="item.component"
/> v-bind="item.props"
<VPNavBarMenuGroup v-else :item /> />
</template> <VPNavBarMenuGroup v-else :item />
</li>
</ul>
</nav> </nav>
</template> </template>
@ -32,9 +34,13 @@ const { theme } = useData()
display: none; display: none;
} }
.list {
display: flex;
}
@media (min-width: 768px) { @media (min-width: 768px) {
.VPNavBarMenu { .VPNavBarMenu {
display: flex; display: block;
} }
} }
</style> </style>

@ -17,10 +17,10 @@ const { localeLinks, currentLang } = useLangs({
icon="vpi-languages" icon="vpi-languages"
:label="theme.langMenuLabel || 'Change language'" :label="theme.langMenuLabel || 'Change language'"
> >
<div class="items"> <ul class="items">
<p class="title">{{ currentLang.label }}</p> <li class="title">{{ currentLang.label }}</li>
<template v-for="locale in localeLinks" :key="locale.link"> <li v-for="locale in localeLinks" :key="locale.link">
<VPMenuLink <VPMenuLink
:item="locale" :item="locale"
:external="false" :external="false"
@ -30,8 +30,8 @@ const { localeLinks, currentLang } = useLangs({
:dir="locale.dir" :dir="locale.dir"
data-allow-mismatch="attribute" data-allow-mismatch="attribute"
/> />
</template> </li>
</div> </ul>
</VPFlyout> </VPFlyout>
</template> </template>

@ -8,19 +8,21 @@ const { theme } = useData()
<template> <template>
<nav v-if="theme.nav" class="VPNavScreenMenu"> <nav v-if="theme.nav" class="VPNavScreenMenu">
<template v-for="item in theme.nav" :key="JSON.stringify(item)"> <ul>
<VPNavScreenMenuLink v-if="'link' in item" :item /> <li v-for="item in theme.nav" :key="JSON.stringify(item)">
<component <VPNavScreenMenuLink v-if="'link' in item" :item />
v-else-if="'component' in item" <component
:is="item.component" v-else-if="'component' in item"
v-bind="item.props" :is="item.component"
screen-menu v-bind="item.props"
/> screen-menu
<VPNavScreenMenuGroup />
v-else <VPNavScreenMenuGroup
:text="item.text || ''" v-else
:items="item.items" :text="item.text || ''"
/> :items="item.items"
</template> />
</li>
</ul>
</nav> </nav>
</template> </template>

@ -31,8 +31,8 @@ function toggle() {
<span class="vpi-plus button-icon" /> <span class="vpi-plus button-icon" />
</button> </button>
<div :id="groupId" class="items"> <ul :id="groupId" class="items">
<template v-for="item in items" :key="JSON.stringify(item)"> <li v-for="item in items" :key="JSON.stringify(item)">
<div v-if="'link' in item" class="item"> <div v-if="'link' in item" class="item">
<VPNavScreenMenuGroupLink :item /> <VPNavScreenMenuGroupLink :item />
</div> </div>
@ -44,8 +44,8 @@ function toggle() {
<div v-else class="group"> <div v-else class="group">
<VPNavScreenMenuGroupSection :text="item.text" :items="item.items" /> <VPNavScreenMenuGroupSection :text="item.text" :items="item.items" />
</div> </div>
</template> </li>
</div> </ul>
</div> </div>
</template> </template>

@ -11,7 +11,11 @@ defineProps<{
<template> <template>
<div class="VPNavScreenMenuGroupSection"> <div class="VPNavScreenMenuGroupSection">
<p v-if="text" class="title">{{ text }}</p> <p v-if="text" class="title">{{ text }}</p>
<VPNavScreenMenuGroupLink v-for="item in items" :key="item.text" :item /> <ul>
<li v-for="item in items" :key="item.text">
<VPNavScreenMenuGroupLink :item="item" />
</li>
</ul>
</div> </div>
</template> </template>

@ -94,16 +94,16 @@ function onCaretClick() {
</div> </div>
</div> </div>
<div v-if="item.items && item.items.length" class="items"> <ul v-if="item.items && item.items.length" class="items">
<template v-if="depth < 5"> <li v-if="depth < 5">
<VPSidebarItem <VPSidebarItem
v-for="i in item.items" v-for="i in item.items"
:key="i.text" :key="i.text"
:item="i" :item="i"
:depth="depth + 1" :depth="depth + 1"
/> />
</template> </li>
</div> </ul>
</component> </component>
</template> </template>

@ -11,17 +11,17 @@ withDefaults(defineProps<{
</script> </script>
<template> <template>
<div class="VPSocialLinks"> <ul class="VPSocialLinks">
<VPSocialLink <li v-for="{ link, icon, ariaLabel, target } in links" :key="link" class="item">
v-for="{ link, icon, ariaLabel, target } in links" <VPSocialLink
:key="link" :icon
:icon :link
:link :ariaLabel
:ariaLabel :target
:target :me
:me />
/> </li>
</div> </ul>
</template> </template>
<style scoped> <style scoped>
@ -29,4 +29,12 @@ withDefaults(defineProps<{
display: flex; display: flex;
justify-content: center; justify-content: center;
} }
/* Reset styles from vp-doc if used in markdown */
.vp-doc .VPSocialLinks,
.vp-doc .VPSocialLinks .item {
list-style: none;
margin: 0;
padding: 0;
}
</style> </style>

@ -22,8 +22,8 @@ useSponsorsGrid({ el, size: props.size })
</script> </script>
<template> <template>
<div class="VPSponsorsGrid vp-sponsor-grid" :class="[size]" ref="el"> <ul class="VPSponsorsGrid vp-sponsor-grid" :class="[size]" ref="el">
<div <li
v-for="sponsor in data" v-for="sponsor in data"
:key="sponsor.name" :key="sponsor.name"
class="vp-sponsor-grid-item" class="vp-sponsor-grid-item"
@ -42,6 +42,6 @@ useSponsorsGrid({ el, size: props.size })
/> />
</article> </article>
</a> </a>
</div> </li>
</div> </ul>
</template> </template>

@ -17,11 +17,11 @@ const classes = computed(() => [props.size, `count-${props.members.length}`])
<template> <template>
<div class="VPTeamMembers" :class="classes"> <div class="VPTeamMembers" :class="classes">
<div class="container"> <ul class="container">
<div v-for="member in members" :key="member.name" class="item"> <li v-for="member in members" :key="member.name" class="item">
<VPTeamMembersItem :size :member /> <VPTeamMembersItem :size :member />
</div> </li>
</div> </ul>
</div> </div>
</template> </template>
@ -63,4 +63,15 @@ const classes = computed(() => [props.size, `count-${props.members.length}`])
margin: 0 auto; margin: 0 auto;
max-width: 1152px; max-width: 1152px;
} }
/* Reset styles from vp-doc if used in markdown */
.vp-doc .VPTeamMembers .container {
list-style: none;
margin: 0 auto;
padding: 0;
}
.vp-doc .VPTeamMembers .item {
margin: 0;
padding: 0;
}
</style> </style>

@ -153,3 +153,11 @@
.dark .vp-sponsor-grid-image { .dark .vp-sponsor-grid-image {
filter: grayscale(1) invert(1); filter: grayscale(1) invert(1);
} }
/* Reset styles from vp-doc if used in markdown */
.vp-doc .vp-sponsor-grid,
.vp-doc .vp-sponsor-grid-item {
list-style: none;
margin: 0;
padding: 0;
}

Loading…
Cancel
Save