CSS hover style on element inside div with transform-style:preserve-3d not working in Safari
P粉346326040
2023-08-30 18:33:26
<p>I implemented a parallax scrolling header with some social icons inside it with hover styles. Hover styles currently don't work in Safari. When I remove <code>transform-style:preserve-3d</code> on the container, the hover style works (but breaks parallax). It works fine in Chrome. </p>
<p>
<pre class="brush:html;toolbar:false;"><!doctype html>
<html class="h-full">
<head>
<script src="https://cdn.tailwindcss.com/3.3.1"></script>
</head>
<div class="h-screen">
<div class="flex h-full flex-col overflow-hidden overflow-y-auto bg-stone-900">
<div class="scrollbar-thin scrollbar-thumb-orange-400 scrollbar-track-none scrollbar-thumb-rounded-full w-full flex-1 overflow-x-hidden overflow-y-hidden overflow-y-scroll scroll -smooth bg-stone-900" style="perspective: 10px">
<div class="relative flex h-full items-center justify-center" style="transform-style: preserve-3d">
<div class="container m-1 lg:w-3/4" style="transform: translateZ(-5px) scale(1.5)">
<h2 class="font-bungee-hairline inline bg-stone-900 box-decoration-clone p-4 text-3xl font-bold leading-normal text-white hover:bg-red-800 sm:text-4xl md :text-6xl md:leading-tight">Travel &<br />Landscape<br />Photography</h2>
<div class="mt-4 flex w-min bg-stone-900 px-6 py-4">
<a :href="links.unsplash" aria-label="Unsplash" target="_blank"
><svg class="mr-4 h-6 w-6 fill-white transition hover:cursor-pointer hover:fill-orange-400" xmlns="http://www.w3.org/2000/svg " viewBox="0 0 448 512">
<path d="M448,230.17V480H0V230.17H141.13V355.09H306.87V230.17ZM306.87,32H141.13V156.91H306.87Z" /></svg
></a>
</div>
</div>
<img class="absolute z-[-1] h-full w-full object-cover" src="https://images.unsplash.com/photo-1661173357770-619fcd1388af?ixlib=rb-4.0.3& ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=2340&q=80" alt="A Ginormous salt lake reflecting like a mirror in Turkey at sunset" style="transform: translateZ(-20px) scale(3) " />
</div>
</div>
</div>
</div></pre>
</p>
<p>The unsplash icon below the title should have some hover styling (orange and cursor). </p>
Because when you use "transform-style:preserve-3d", which will make the element z-index -1, then you will not be able to select the item and you will not be able to hover the mouse on Safari.
The Safari SVG rendering mechanism works very differently, so complex HTML-CSS structures should be avoided.
In fact, the HTML structure is not well established, and if a healthy foundation is established first, there will be far fewer problems and much less work.
I think HTML-css looks unhealthy.
I made an example of a simpler and must-have structure.
But I guess you want the image to move as you scroll down. If you want this you can add JS. You can specify it if needed.
https://codepen.io/sawacrow/pen/jOeeEXM