css transform, postrzępione krawędzie w chrome
Używam CSS3 transform, aby obracać obrazy i pola tekstowe z obramowaniami w mojej witrynie.
Problem polega na tym, że obramowanie w Chrome wygląda jak gra (o niskiej rozdzielczości) bez antyaliasingu. W IE, Operze i FF wygląda o wiele lepiej, bo stosuje się AA (co jest nadal wyraźnie widoczne, ale nie aż tak źle). Nie mogę przetestować Safari, ponieważ nie posiadam Maca.
Obrócone zdjęcie i sam tekst wyglądają dobrze, tylko obramowanie wygląda na postrzępione.
CSS którego używam to to:
.rotate2deg {
transform: rotate(2deg);
-ms-transform: rotate(2deg); /* IE 9 */
-webkit-transform: rotate(2deg); /* Safari and Chrome */
-o-transform: rotate(2deg); /* Opera */
-moz-transform: rotate(2deg); /* Firefox */
}
Czy Jest jakiś sposób, aby to naprawić, np. zmuszając Chrome do używania AA?
Przykład poniżej:
11 answers
Na wypadek, gdyby ktoś szukał tego później, miłą sztuczką, aby pozbyć się tych postrzępionych krawędzi na transformacjach CSS w Chrome, jest dodanie właściwości CSS -webkit-backface-visibility
o wartości hidden
. W moich własnych testach to całkowicie je wygładziło. Mam nadzieję, że to pomoże.
-webkit-backface-visibility: hidden;
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-08 21:12:30
Jeśli używasz transition
zamiast transform
, -webkit-backface-visibility: hidden;
nie działa. Postrzępiona krawędź pojawia się podczas animacji przezroczystego pliku png.
Aby go rozwiązać użyłem: outline: 1px solid transparent;
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-21 16:11:51
Spróbuj przekształcić 3d. To działa jak urok!
/* Due to a bug in the anti-liasing*/
-webkit-transform-style: preserve-3d;
-webkit-transform: rotateZ(2deg);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-11 05:25:18
Dodanie przezroczystej ramki 1px spowoduje wygładzanie
outline: 1px solid transparent;
Alternatywnie, dodaj przezroczyste pudełko 1px-shadow.
box-shadow: 0 0 1px rgba(255,255,255,0);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-24 11:05:58
Wybrana odpowiedź (ani żadna z innych odpowiedzi) nie zadziałała dla mnie, ale to:img {outline:1px solid transparent;}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-06 06:02:03
Mam problem z gradientem CSS3 z -45deg. background
skośny, był mocno postrzępiony podobny, ale gorszy niż oryginalny post. Więc zacząłem grać z obu background-size
. To rozciągałoby postrzępienie, ale nadal tam było. Następnie w dodatku czytałem, że inni ludzie mają problemy też w przyrostach 45deg więc dostosowałem z -45deg
do -45.0001deg
i mój problem został rozwiązany.
W moim CSS poniżej, background-size
było początkowo 30px
i deg
dla gradientu tła było dokładnie -45deg
, a wszystkie klatki kluczowe były 30px 0
.
@-webkit-keyframes progressStripeLTR {
to {
background-position: 60px 0;
};
}
@-moz-keyframes progressStripeLTR {
to {
background-position: 60px 0;
};
}
@-ms-keyframes progressStripeLTR {
to {
background-position: 60px 0;
};
}
@-o-keyframes progressStripeLTR {
to {
background-position: 60px 0;
};
}
@keyframes progressStripeLTR {
to {
background-position: 60px 0;
};
}
@-webkit-keyframes progressStripeRTL {
to {
background-position: -60px 0;
};
}
@-moz-keyframes progressStripeRTL {
to {
background-position: -60px 0;
};
}
@-ms-keyframes progressStripeRTL {
to {
background-position: -60px 0;
};
}
@-o-keyframes progressStripeRTL {
to {
background-position: -60px 0;
};
}
@keyframes progressStripeRTL {
to {
background-position: -60px 0;
};
}
.pro-bar-candy {
width: 100%;
height: 15px;
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
border-radius: 3px;
background: rgb(187, 187, 187);
background: -moz-linear-gradient(
-45.0001deg,
rgba(187, 187, 187, 1.00) 25%,
transparent 25%,
transparent 50%,
rgba(187, 187, 187, 1.00) 50%,
rgba(187, 187, 187, 1.00) 75%,
transparent 75%,
transparent
);
background: -webkit-linear-gradient(
-45.0001deg,
rgba(187, 187, 187, 1.00) 25%,
transparent 25%,
transparent 50%,
rgba(187, 187, 187, 1.00) 50%,
rgba(187, 187, 187, 1.00) 75%,
transparent 75%,
transparent
);
background: -o-linear-gradient(
-45.0001deg,
rgba(187, 187, 187, 1.00) 25%,
transparent 25%,
transparent 50%,
rgba(187, 187, 187, 1.00) 50%,
rgba(187, 187, 187, 1.00) 75%,
transparent 75%,
transparent
);
background: -ms-linear-gradient(
-45.0001deg,
rgba(187, 187, 187, 1.00) 25%,
transparent 25%,
transparent 50%,
rgba(187, 187, 187, 1.00) 50%,
rgba(187, 187, 187, 1.00) 75%,
transparent 75%,
transparent
);
background: linear-gradient(
-45.0001deg,
rgba(187, 187, 187, 1.00) 25%,
transparent 25%,
transparent 50%,
rgba(187, 187, 187, 1.00) 50%,
rgba(187, 187, 187, 1.00) 75%,
transparent 75%,
transparent
);
background: -webkit-gradient(
linear,
right bottom,
right top,
color-stop(
25%,
rgba(187, 187, 187, 1.00)
),
color-stop(
25%,
rgba(0, 0, 0, 0.00)
),
color-stop(
50%,
rgba(0, 0, 0, 0.00)
),
color-stop(
50%,
rgba(187, 187, 187, 1.00)
),
color-stop(
75%,
rgba(187, 187, 187, 1.00)
),
color-stop(
75%,
rgba(0, 0, 0, 0.00)
),
color-stop(
rgba(0, 0, 0, 0.00)
)
);
background-repeat: repeat-x;
-webkit-background-size: 60px 60px;
-moz-background-size: 60px 60px;
-o-background-size: 60px 60px;
background-size: 60px 60px;
}
.pro-bar-candy.candy-ltr {
-webkit-animation: progressStripeLTR .6s linear infinite;
-moz-animation: progressStripeLTR .6s linear infinite;
-ms-animation: progressStripeLTR .6s linear infinite;
-o-animation: progressStripeLTR .6s linear infinite;
animation: progressStripeLTR .6s linear infinite;
}
.pro-bar-candy.candy-rtl {
-webkit-animation: progressStripeRTL .6s linear infinite;
-moz-animation: progressStripeRTL .6s linear infinite;
-ms-animation: progressStripeRTL .6s linear infinite;
-o-animation: progressStripeRTL .6s linear infinite;
animation: progressStripeRTL .6s linear infinite;
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-10 22:05:11
Możesz być w stanie zamaskować postrzępienie za pomocą niewyraźnych cieni pudełkowych. Użycie -webkit-box-shadow zamiast box-shadow upewni się, że nie wpłynie to na przeglądarki inne niż webkit. Możesz jednak sprawdzić Safari i mobilne przeglądarki webkit.
Wynik jest nieco lepszy, ale i tak dużo mniej dobry niż w innych przeglądarkach:
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-09 09:38:26
Pomyślałem, że dorzucimy również nasze rozwiązanie, ponieważ mieliśmy dokładnie ten sam problem na Chrome / Windows.
Próbowaliśmy rozwiązania przez @stevenWatkins powyżej, ale nadal miał "stepping".
Zamiast
-webkit-backface-visibility: hidden;
Użyliśmy:
-webkit-backface-visibility: initial;
Dla nas to zrobił sztuczkę
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-17 11:29:19
Dodanie następującego div otaczającego dany element naprawiło to dla mnie.
-webkit-transform-style: preserve-3d;
Postrzępione krawędzie pojawiały się w moim przypadku wokół okna wideo.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-19 22:23:55
Dla mnie to właśnie właściwość perspective CSS zadziałała:
-webkit-perspective: 1000;
Zupełnie nielogiczne w moim przypadku, ponieważ nie używam przejść 3d, ale mimo to działa.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-10 15:41:00
Dla canvas w Chrome (Wersja 52)
Wszystkie wymienione odpowiedzi dotyczą obrazów. Ale mój problem dotyczy canvas w chrome (V. 52) Z transform rotate. Stały się postrzępione i wszystkie te metody nie mogą pomóc.
Rozwiązanie, które działa dla mnie:
- Powiększ płótno o 1 px dla każdej strony = > + 2 px dla szerokości i wysokości;
- narysuj obrazek z offsetem + 1px (w pozycji 1,1 zamiast 0,0) i ustalonym rozmiarem (rozmiar obrazka powinien być o 2px mniejszy od rozmiaru canvas)
- Zastosuj wymaganą rotację
Tak ważne bloki kodu:
// Unfixed version
ctx.drawImage(img, 0, 0, 335, 218);
// Fixed version
ctx.drawImage(img, 1, 1, 335, 218);
/* This style should be applied for fixed version */
canvas {
margin-left: -1px;
margin-top:-1px;
}
<!--Unfixed version-->
<canvas width="335" height="218"></canvas>
<!--Fixed version-->
<canvas width="337" height="220"></canvas>
Próbka: https://jsfiddle.net/tLbxgusx/1/
Uwaga: Istnieje wiele zagnieżdżonych div, ponieważ jest to uproszczona wersja z mojego projektu.
Ten numer jest reprodukowany również dla Firefoksa dla mnie. Nie ma takiego problemu na Safari i FF z retiną.
I inne rozwiązanie jest umieszczenie canvas w div o tym samym rozmiarze i zastosowanie następującego css do tego div:
overflow: hidden;
box-shadow: 0 0 1px rgba(255,255,255,0);
// Or
//outline:1px solid transparent;
I obrót powinien być zastosowany do tego div owijania. Tak wymienione rozwiązanie działa, ale z niewielkimi modyfikacjami.
A zmodyfikowany przykład takiego rozwiązania to: https://jsfiddle.net/tLbxgusx/2/
Uwaga: Patrz styl div z klasą 'third'.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-26 09:28:13