primevue-mirror/apps/showcase/doc/theming/styled/csslayer/SpecificityDoc.vue

72 lines
2.7 KiB
Vue
Raw Normal View History

2023-12-26 08:13:55 +00:00
<template>
<DocSectionText v-bind="$attrs">
<p>
The <i>@layer</i> is a standard CSS feature to define cascade layers for a customizable order of precedence. If you need to become more familiar with layers, visit the documentation at
2024-03-31 13:42:46 +00:00
<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/@layer" class="doc-link">MDN</a> to begin with. In styled mode, when the <i>cssLayer</i> option is enabled at theme configuration, PrimeVue wraps the built-in style classes under
the <i>primevue</i> cascade layer to make the library styles easy to override. CSS in your app without a layer has the highest CSS specificity, so you'll be able to override styles regardless of the location or how strong a class is
2024-08-30 21:40:44 +00:00
written. The <i>cssLayer</i> is disabled by default to avoid compatibility issues with 3rd party CSS libraries which require a layer configuration for compatibility that is discussed in the next reset section.
2023-12-26 08:13:55 +00:00
</p>
<p>
2024-04-18 14:22:30 +00:00
For example, let's assume you need to remove the rounded borders of the ToggleSwitch component defined by the theme in use. In order to achieve this, <i>.p-toggleswitch .p-toggleswitch-slider</i> selector needs to be overriden. Without
2024-08-30 21:40:44 +00:00
the layers, we'd have to write a stronger css or use <i>!important</i>, however, with layers, this does not present an issue as your CSS can always override PrimeVue with a more straightforward class name such as <i>my-switch-slider</i>.
2023-12-26 08:13:55 +00:00
Another advantage of this approach is that it does not force you to figure out the built-in class names of the components.
</p>
2024-05-20 12:14:38 +00:00
<div class="card flex justify-center">
2024-10-02 07:05:14 +00:00
<ToggleSwitch v-model="checked" :pt="{ slider: 'my-switch-slider', handle: 'my-switch-handle', icon: 'my-switch-icon' }" />
2023-12-26 08:13:55 +00:00
</div>
2024-01-30 08:16:35 +00:00
<DocSectionCode :code="code" hideToggleCode hideStackBlitz />
2024-03-31 13:42:46 +00:00
<p>Layers also make it easier to use CSS Modules, view the CSS Modules guide for examples.</p>
2023-12-26 08:13:55 +00:00
</DocSectionText>
</template>
<script>
export default {
data() {
return {
checked: false,
code: {
basic: `
<template>
2024-10-02 07:05:14 +00:00
<ToggleSwitch v-model="checked" :pt="{ slider: 'my-switch-slider', handle: 'my-switch-handle', icon: 'my-switch-icon' }" />
2023-12-26 08:13:55 +00:00
</template>
<script>
import { ref } from "vue";
const checked = ref(false);
<\/script>
<style>
.my-switch-slider {
border-radius: 0;
}
2024-10-02 07:05:14 +00:00
.my-switch-handle {
2023-12-26 08:13:55 +00:00
border-radius: 0;
}
2024-10-02 07:05:14 +00:00
.my-switch-icon {
display: none !important;
}
2023-12-26 08:13:55 +00:00
</style>
`
}
};
}
};
</script>
<style>
.my-switch-slider {
border-radius: 0;
}
2024-10-02 07:05:14 +00:00
.my-switch-handle {
2023-12-26 08:13:55 +00:00
border-radius: 0;
}
2024-10-02 07:05:14 +00:00
.my-switch-icon {
display: none !important;
}
2023-12-26 08:13:55 +00:00
</style>