diff --git a/packages/runtime-dom/__tests__/helpers/useCssVars.spec.ts b/packages/runtime-dom/__tests__/helpers/useCssVars.spec.ts
index 9f860a5e3c3..06b3e714132 100644
--- a/packages/runtime-dom/__tests__/helpers/useCssVars.spec.ts
+++ b/packages/runtime-dom/__tests__/helpers/useCssVars.spec.ts
@@ -4,6 +4,7 @@ import {
Suspense,
Teleport,
createStaticVNode,
+ defineCustomElement,
h,
nextTick,
reactive,
@@ -381,4 +382,26 @@ describe('useCssVars', () => {
expect((c as HTMLElement).style.getPropertyValue(`--color`)).toBe('red')
}
})
+
+ // #8826
+ test('with custom element', async () => {
+ const state = reactive({ color: 'red' })
+ const container = document.createElement('div')
+ const App = defineCustomElement({
+ styles: [`div { color: red; }`],
+ setup() {
+ useCssVars(() => state)
+ return () => {
+ return h('div', 'hello')
+ }
+ },
+ })
+ customElements.define('css-vars-ce', App)
+ container.innerHTML = ``
+ document.body.appendChild(container)
+ await nextTick()
+ expect(container.innerHTML).toBe(
+ ``,
+ )
+ })
})
diff --git a/packages/runtime-dom/src/helpers/useCssVars.ts b/packages/runtime-dom/src/helpers/useCssVars.ts
index 286a4176076..8b47d55333c 100644
--- a/packages/runtime-dom/src/helpers/useCssVars.ts
+++ b/packages/runtime-dom/src/helpers/useCssVars.ts
@@ -38,7 +38,11 @@ export function useCssVars(getter: (ctx: any) => Record) {
const setVars = () => {
const vars = getter(instance.proxy)
- setVarsOnVNode(instance.subTree, vars)
+ if (instance.ce) {
+ setVarsOnNode(instance.ce as any, vars)
+ } else {
+ setVarsOnVNode(instance.subTree, vars)
+ }
updateTeleports(vars)
}