VAlert dismissible doesn't work with scoped css
safejace opened this issue · 5 comments
I'm wrapping the <VAlert>
in my own component
<script setup>
import { VAlert } from 'vuetensils/src/components'
defineProps({
heading: {
type: String,
default: ''
},
level: {
type: String,
default: 'info',
validator(value) {
return ['info', 'alert', 'warning', 'success'].includes(value)
}
}
})
</script>
<template>
<VAlert
v-bind="$attrs"
dismissible
:class="[level]"
:classes="{ root: 'sv-callout', dismiss: 'sv-alert__dismiss' }"
>
<div class="heading">
<slot name="icon-left" />
<h4>{{ heading }}</h4>
<slot name="icon-right" />
</div>
<p class="body">
<slot />
</p>
</VAlert>
</template>
<style lang="postcss" scoped>
.sv-callout {
{...}
}
.sv-callout__dismiss {
// not working here
@apply absolute inset-y-0 right-0 text-2xl mx-4;
}
{...}
</style>
when inspecting the element... the dismissible item doesn't get the scoped
[data-v-xxx]
added to it
<div id="root" data-v-app="">
<div role="alert" class="vts-alert sv-callout" icon-left="" icon-right="" default="Lorem ipsum dolor" data-v-372d8d2a="">
<!-- @slot The default slot content that is shown to the user -->
<div class="heading" data-v-372d8d2a="">
<h4 data-v-372d8d2a="">Heading Text</h4>
</div>
<p class="body" data-v-372d8d2a="">Lorem ipsum dolor</p>
<button aria-label="Dismiss this alert" class="vts-alert__dismiss sv-alert__dismiss">
<!-- @slot The dismiss button content --> × </button>
</div>
</div>
Can you create a demo in Codesandbox?
can you link me to an example of codesandbox working with vuetensils loaded up.
I just tried to get it working and it's not loading the vuetensils despite adding as a dependency
thanks @AustinGil
set it up here:
https://codesandbox.io/s/vue-3-vuetensils-alert-forked-pzkdou?file=/src/App.vue
if you turn off/on the scoped
attribute on the style section in MyAlert.vue
should show you what I mean
A, gotcha. Yeah, that is not a problem with Vuetensils as much as it's a known problem with Vue. See https://vue-loader.vuejs.org/guide/scoped-css.html#deep-selectors
There are a couple solutions. Use on of the "deep" selectors (>>>
, /deep/
, ::v-deep
):
<style scoped>
>>> .vts-alert__dismiss {
background: red;
}
</style>
Or you can combine both scoped and not scoped styles:
<style>
.vts-alert__dismiss {
background: red;
}
</style>
<style scoped>
/** scoped stypes */
</style>