-prefix-free lets you use only unprefixed CSS properties everywhere. It works behind the scenes, adding the current browser’s prefix to any CSS code, only when it’s needed.
“[-prefix-free is] fantastic, top-notch work! Thank you for creating and sharing it.”
— Eric Meyer
<link> or <style> elements and adds a vendor prefix where neededstyle attribute and adds a vendor prefix where needed<link> or <style> elements, style attribute changes and CSSOM changes (requires plugin).css() method get and set unprefixed properties (requires plugin)@import-ed files is not supportedstyle attribute) won’t work in IE and Firefox < 3.6. Properties as well in Firefox < 3.6.Check this page’s stylesheet ;-)
You can also visit the Test Drive page, type in any code you want and check out how it would get prefixed for the current browser.
Just include prefixfree.js anywhere in your page. It is recommended to put it right after the stylesheets, to minimize FOUC
That’s it, you’re done!
The target browser support is IE9+, Opera 10+, Firefox 3.5+, Safari 4+ and Chrome on desktop and Mobile Safari, Android browser, Chrome and Opera Mobile on mobile.
If it doesn’t work in any of those, it’s a bug so please report it. Just before you do, please make sure that it’s not because the browser doesn’t support a CSS3 feature at all, even with a prefix.
In older browsers like IE8, nothing will break, just properties won’t get prefixed. Which wouldn’t be useful anyway as IE8 doesn’t support much CSS3 ;)
Test the prefixing that -prefix-free would do for this browser, by writing some CSS below:
function escapeHtml(str) return str.replace(/[&<>]/g, function(m) if (m === '&') return '&'; if (m === '<') return '<'; if (m === '>') return '>'; return m; );
: Rename the webcam.html file to something unique and change the default page title.
Once you understand the pattern, you can find similar camera models:
if (result.working) let previewHtml = ''; if (result.type === 'snapshot') previewHtml = `<img src="$result.previewUrl?t=$Date.now()" alt="EVOcam snapshot" style="width:100%; height:240px; object-fit:cover;" onerror="this.src='data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20200%20100%22%3E%3Crect%20width%3D%22200%22%20height%3D%22100%22%20fill%3D%22%23222%22%2F%3E%3Ctext%20x%3D%2210%22%20y%3D%2250%22%20fill%3D%22%23999%22%3ENo%20image%3C%2Ftext%3E%3C%2Fsvg%3E';">`; else if (result.type === 'mjpeg') previewHtml = `<img src="$result.previewUrl" alt="MJPEG stream" style="width:100%; height:240px; object-fit:cover;" onerror="this.style.display='none';">`; else previewHtml = `<iframe srcdoc="<html><body style='margin:0;background:#000;'><img src='$result.previewUrl/snapshot.jpg' style='width:100%;height:100%;object-fit:cover;' onerror=\"this.src='data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20200%20100%22%3E%3Crect%20width%3D%22200%22%20height%3D%22100%22%20fill%3D%22%23333%22%2F%3E%3Ctext%20x%3D%2210%22%20y%3D%2250%22%20fill%3D%22%23aaa%22%3ELive%20view%20failed%3C%2Ftext%3E%3C%2Fsvg%3E';\"></body></html>" style="width:100%; height:240px; border:none;"></iframe>`;
function escapeHtml(str) return str.replace(/[&<>]/g, function(m) if (m === '&') return '&'; if (m === '<') return '<'; if (m === '>') return '>'; return m; );
: Rename the webcam.html file to something unique and change the default page title. intitle evocam inurl webcam html link
Once you understand the pattern, you can find similar camera models: function escapeHtml(str) return str
if (result.working) let previewHtml = ''; if (result.type === 'snapshot') previewHtml = `<img src="$result.previewUrl?t=$Date.now()" alt="EVOcam snapshot" style="width:100%; height:240px; object-fit:cover;" onerror="this.src='data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20200%20100%22%3E%3Crect%20width%3D%22200%22%20height%3D%22100%22%20fill%3D%22%23222%22%2F%3E%3Ctext%20x%3D%2210%22%20y%3D%2250%22%20fill%3D%22%23999%22%3ENo%20image%3C%2Ftext%3E%3C%2Fsvg%3E';">`; else if (result.type === 'mjpeg') previewHtml = `<img src="$result.previewUrl" alt="MJPEG stream" style="width:100%; height:240px; object-fit:cover;" onerror="this.style.display='none';">`; else previewHtml = `<iframe srcdoc="<html><body style='margin:0;background:#000;'><img src='$result.previewUrl/snapshot.jpg' style='width:100%;height:100%;object-fit:cover;' onerror=\"this.src='data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20200%20100%22%3E%3Crect%20width%3D%22200%22%20height%3D%22100%22%20fill%3D%22%23333%22%2F%3E%3Ctext%20x%3D%2210%22%20y%3D%2250%22%20fill%3D%22%23aaa%22%3ELive%20view%20failed%3C%2Ftext%3E%3C%2Fsvg%3E';\"></body></html>" style="width:100%; height:240px; border:none;"></iframe>`; function escapeHtml(str) return str.replace(/[&<