2016-02-15 60 views
5

Dodaję niektóre ścieżki SVG do mojej strony internetowej, ale mam problemy z przeglądarką Firefox 43.0. Wydaje się, że kiedy stosuje się transform: scale(0.1) na mojej ścieżce, Firefox nie aktualizuje obwiedni prostokąt klienta (poprzez getBoundingClientRect())Firefox getBoundingClientRect() nie uwzględnia transformacji

Oto zrzut ekranu z mojej ścieżce przed transformacji, a prawidłowa ograniczający prostokąt:

Path without transform

I to jest tutaj z transformaty stosowane, wizualny wyraźnie poza obwiedni:

Path with transform

W tym przypadku Chrome aktualizuje ramkę obwiedni zgodnie z oczekiwaniami. (Uwaga ograniczonego proporcji.)

Path with transform in Chrome

Ten problem nie występuje w obu Chrome lub krawędzi. Znalazłem this old bug from 2012 który mówi problem został rozwiązany w wersji 12.0, a dokumentacja stwierdza:

Począwszy od Gecko 12,0 (Firefox 12.0/Thunderbird 12.0/SeaMonkey 2.9), efekt CSS przekształca jest uznawany przy obliczaniu prostokąt ograniczający elementu.

... co nie wydaje się być prawdą. W przypadku innych przeglądarek zmniejszałem swój krąg do 10% jego pierwotnego rozmiaru, a następnie obliczałem przesunięcie współrzędnych z prostokąta klienta, aby wyśrodkować je na pierwotnej pozycji w skali 100%. Ponieważ jednak prostokąt klienta nie jest aktualizowany po transformacji w Firefoksie, to psuje obliczenia.

Jak to obejść w Firefoksie?

+0

Czy możesz rozwinąć o co ci chodzi? –

+0

Co rozumiesz przez atrybuty transformacji? –

Odpowiedz

3

Transformacje można ustawić za pomocą atrybutów np.

<path transform="scale(0.1)" d="..."/> 

lub CSS, jak robisz. Używanie CSS to nowszy sposób na zrobienie tego; specyfikacja SVG 1.1 określa tylko przekształcenia atrybutów.

getBoundingClientRect doesn't take CSS transforms into account aktualnie w Firefoksie, ale uwzględnia atrybuty przekształcenia.

+0

Dodanie tego atrybutu zdecydowanie rozwiązuje problem związany z ramką graniczną, którą widziałem na powyższych zrzutach ekranu. Obawiałem się, że ten atrybut dodawania może być problematyczny, ponieważ próbowałem animować właściwość 'transform' z CSS, ale udało mi się zrobić animację tak czy inaczej. –

+0

Czy jest coś, co mogę wykorzystać, aby uzyskać pozycję elementu w Firefoksie z transformacjami CSS? Niestety nie mam opcji atrybutów. – Norbert

+0

@Norbert Pobierz kod źródłowy do Firefoksa, napraw problem i prześlij poprawkę do [bugzilla] (https://bugzilla.mozilla.org/show_bug.cgi?id=1066435) Tak właśnie zacząłem, gdy zobaczyłem swoje pierwsze Błąd przeglądarki Firefox. –