Skip to content

Commit 5035409

Browse files
philipp-spiessAnton P
authored andcommitted
Don't use color-mix(…) on currentColor (tailwindlabs#17247)
Closes tailwindlabs#17194 This PR works around a crash when rendering opacity on `currentColor` (as used by the placeholder styles in preflight) on Safari 16.4 and Safari 16.5. Unfortunately it seems that the [`color-mix(…)` function is not compatible with `currentColor` for these versions of Safari](https://stackoverflow.com/questions/76436497/the-color-mix-property-involving-currentcolor-causes-safari-to-crash). We tried a few different ways to work around this without success: - Using an `@supports` media query to target these Safari versions and overwriting the placeholder still makes these browsers crash. - Changing the way we apply opacity to `currentColor` in core doesn't seem to work for non-placeholder values: tailwindlabs#17194 (comment) However, a wrong opacity is still better than a complete browser crash. The work-around of using the `oklab(…)` function does seem to work for `::placeholder` styles in preflight though according to our testing so this PR applies this change to preflight. ## Test plan - See https://play.tailwindcss.com/WSsSTLHu8h?file=css - Tested on Chrome/Safari 16.4/Safari 18.3/Firefox <img width="564" alt="Screenshot 2025-03-17 at 11 32 47" src="https://github.com/user-attachments/assets/cfd0db71-f39a-4bc0-bade-cea70afe50ae" />
1 parent 210b8a3 commit 5035409

1 file changed

Lines changed: 2 additions & 2 deletions

File tree

packages/tailwindcss/preflight.css

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -285,12 +285,12 @@ textarea,
285285

286286
/*
287287
1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)
288-
2. Set the default placeholder color to a semi-transparent version of the current text color.
288+
2. Set the default placeholder color to a semi-transparent version of the current text color. We use the `oklab(…)` function to work around an issue in Safari 16.4 and 16.5. (https://github.com/tailwindlabs/tailwindcss/issues/17194)
289289
*/
290290

291291
::placeholder {
292292
opacity: 1; /* 1 */
293-
color: color-mix(in oklab, currentColor 50%, transparent); /* 2 */
293+
color: oklab(from currentColor l a b / 50%); /* 2 */
294294
}
295295

296296
/*

0 commit comments

Comments
 (0)