Skip to content

Commit 096435e

Browse files
committed
Fix scoped styles
1 parent e55aa1b commit 096435e

File tree

3 files changed

+32
-9
lines changed

3 files changed

+32
-9
lines changed

src/Utils/StyleBuilder.php

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -94,20 +94,23 @@ public function compile(?DOMElement $styleElement): ?string
9494
if ($styleElement->hasAttribute('scoped')) {
9595
$this->hasScoped = true;
9696
preg_match_all(
97-
'/(?:^|\s)\s*[^@\s,][\.a-z0-9-_:\/\s]+?\s*[{,]/i',
97+
'/(?:^|\s)\s*[^@\s][\.a-z0-9-_:,\/\s]+?\s*[{]/i',
9898
$style,
9999
$matches,
100100
PREG_SET_ORDER
101101
);
102102
foreach ($matches as $match) {
103-
$regex = strpos($match[0], '/deep/') !== false
104-
? '/((?:^|\s)\s*[^@\s,][a-z0-9-_]+?)((?::{1,2}[a-z-]+)?\s*)(?:\/deep\/)/i'
105-
: '/((?:^|\s)\s*[^@\s,][a-z0-9-_]+?)((?::{1,2}[a-z-]+)?\s*[{,])/i';
106-
$style = str_replace(
107-
$match[0],
108-
preg_replace($regex, '$1[' . $this->scopedAttribute . ']$2', $match[0]),
109-
$style
110-
);
103+
$selectors = explode(',', $match[0]);
104+
foreach ($selectors as $selector) {
105+
$regex = strpos($selector, '/deep/') !== false
106+
? '/((?:^|\s)\s*[^@\s][a-z0-9-_]+?)((?::{1,2}[a-z-]+)?\s*)(?:\/deep\/)/i'
107+
: '/((?:^|\s)\s*[^@\s][a-z0-9-_]+?)((?::{1,2}[a-z-]+)?\s*(?:[{]|$))/i';
108+
$style = str_replace(
109+
$selector,
110+
preg_replace($regex, '$1[' . $this->scopedAttribute . ']$2', $selector),
111+
$style
112+
);
113+
}
111114
}
112115
}
113116

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
<style>
2+
.foo[data-v-9a0d9603def78653cb6bac3e7905721b] { transition: all 400ms ease; overflow: hidden; will-change: height, margin, padding, opacity; }
3+
</style>
4+
<div class="foo {{ class|default('') }}" data-v-9a0d9603def78653cb6bac3e7905721b {{ dataScopedStyleAttribute|default('') }} style="{{ style|default('') }}"></div>
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<template>
2+
<div class="foo"></div>
3+
</template>
4+
5+
<style scoped>
6+
.foo {
7+
transition: all 400ms ease;
8+
overflow: hidden;
9+
will-change: height, margin, padding, opacity;
10+
}
11+
</style>
12+
13+
<script>
14+
export default {
15+
}
16+
</script>

0 commit comments

Comments
 (0)