clip-path:shape()
, похоже, не работает в IE (неудивительно) и Firefox (немного удивлен). Есть ли способ проверить поддержку клипа? Я использую modernizr. (Кстати, я знаю, что могу заставить это работать с помощью SVG и -webkit-clip-path:url(#mySVG)
)Как я могу проверить поддержку клипа?
ответ
Вы задали вопрос об этом некоторое время назад, и, честно говоря, я не уверен, что Modernizr еще не добавил поддержку для этого, но в этом случае довольно легко свернуть собственный тест.
Шаги:
- Создать, но не добавлять, а DOM элемент.
- Убедитесь, что он поддерживает любой вид clipPath, проверяя атрибут JS
style
только что созданного элемента (element.style.clipPath === ''
, если он может его поддерживать). - Убедитесь, что он поддерживает формы пути клипа CSS, делая
element.style.clipPath
равным некоторой допустимой форме пути клипа CSS.
Конечно, это немного сложнее, так как вам нужно проверить префиксы для конкретных поставщиков.
Вот это все вместе:
var areClipPathShapesSupported = function() {
var base = 'clipPath',
prefixes = [ 'webkit', 'moz', 'ms', 'o' ],
properties = [ base ],
testElement = document.createElement('testelement'),
attribute = 'polygon(50% 0%, 0% 100%, 100% 100%)';
// Push the prefixed properties into the array of properties.
for (var i = 0, l = prefixes.length; i < l; i++) {
var prefixedProperty = prefixes[i] + base.charAt(0).toUpperCase() + base.slice(1); // remember to capitalize!
properties.push(prefixedProperty);
}
// Interate over the properties and see if they pass two tests.
for (var i = 0, l = properties.length; i < l; i++) {
var property = properties[i];
// First, they need to even support clip-path (IE <= 11 does not)...
if (testElement.style[property] === '') {
// Second, we need to see what happens when we try to create a CSS shape...
testElement.style[property] = attribute;
if (testElement.style[property] !== '') {
return true;
}
}
}
return false;
};
Вот codepen доказательство правильности концепции: http://codepen.io/anon/pen/YXyyMJ
Это должно быть добавлено в модернизацию. Я тестировал в IE и правильно обнаружил, что путь SVG-клипа не поддерживается (на элементах HTML). Благодаря! – Markus
Вы можете проверить с Modernizr.
(function (Modernizr) {
// Here are all the values we will test. If you want to use just one or two, comment out the lines of test you don't need.
var tests = [{
name: 'svg',
value: 'url(#test)'
}, // False positive in IE, supports SVG clip-path, but not on HTML element
{
name: 'inset',
value: 'inset(10px 20px 30px 40px)'
}, {
name: 'circle',
value: 'circle(60px at center)'
}, {
name: 'ellipse',
value: 'ellipse(50% 50% at 50% 50%)'
}, {
name: 'polygon',
value: 'polygon(50% 0%, 0% 100%, 100% 100%)'
}
];
var t = 0, name, value, prop;
for (; t < tests.length; t++) {
name = tests[t].name;
value = tests[t].value;
Modernizr.addTest('cssclippath' + name, function() {
// Try using window.CSS.supports
if ('CSS' in window && 'supports' in window.CSS) {
for (var i = 0; i < Modernizr._prefixes.length; i++) {
prop = Modernizr._prefixes[i] + 'clip-path'
if (window.CSS.supports(prop, value)) {
return true;
}
}
return false;
}
// Otherwise, use Modernizr.testStyles and examine the property manually
return Modernizr.testStyles('#modernizr { ' + Modernizr._prefixes.join('clip-path:' + value + '; ') + ' }', function (elem, rule) {
var style = getComputedStyle(elem),
clip = style.clipPath;
if (!clip || clip == "none") {
clip = false;
for (var i = 0; i < Modernizr._domPrefixes.length; i++) {
test = Modernizr._domPrefixes[i] + 'ClipPath';
if (style[test] && style[test] !== "none") {
clip = true;
break;
}
}
}
return Modernizr.testProp('clipPath') && clip;
});
});
}
})(Modernizr);
Check this codepen для просмотра в действии.
Это замечательно, спасибо! Вы поняли способ избежать ложного позитива для IE по URL-адресам для HTML-элементов? –
- 1. Как я могу проверить поддержку реального касания в браузере
- 2. Как я могу обнаружить поддержку ActiveX?
- 3. Как я могу надежно обнаружить поддержку nullptr?
- 4. Проверить поддержку window.open - JavaScript
- 5. Как проверить поддержку видео html5?
- 6. Как проверить поддержку свойства стоимости CSS (3), поддержку повторного значения?
- 7. Проверить поддержку всех устройств
- 8. Как я могу получить функцию для использования любого клипа?
- 9. Как проверить поддержку функций на C++?
- 10. Я не могу получить поддержку IE8: до
- 11. Как проверить поддержку Android Backup Service?
- 12. Как я могу это проверить?
- 13. Как я могу проверить пароль?
- 14. Как я могу проверить stunnel?
- 15. Как я могу проверить интерфейс?
- 16. Как я могу это проверить?
- 17. Как я могу проверить pspell?
- 18. Как я могу проверить прочность?
- 19. Как я могу проверить класс?
- 20. Как я могу проверить TextPainter?
- 21. Как я могу проверить сообщение?
- 22. Как я могу проверить RoutedUICommand?
- 23. Как я могу проверить Lunascript
- 24. Как я могу проверить переключатель?
- 25. Как я могу проверить это?
- 26. Как я могу проверить «prevObject»?
- 27. Как я могу проверить validate_uniqueness_of?
- 28. Как правильно проверить поддержку браузера UTF-8?
- 29. Как проверить поддержку приложений Apple на Windows?
- 30. Как проверить поддержку Shader Model 3.0?
hahahah .... IE и Firefox не webkit ... webkit поддерживается только на - дождитесь его - веб-браузеры. То есть Chrome (pre-Blink) и Safari. Кроме этого, у меня нет полезного ответа. * пожимает плечами * – philtune
Да смешно. Я должен был сказать «клип-путь», а не webkit. Тем не менее, я не вижу способа проверить браузер для поддержки клипа. –
Googled ... нашел http: //modernizr.com/docs/#features-misc ... это помогает? – philtune