Sets the SVG's viewBox to its bounding box.
A Pen by Marc Müller on CodePen.
<!-- paste svg(s) here --> |
//remove multiple attributes from element | |
//https://stackoverflow.com/a/50541881 | |
Element.prototype.removeAttributes = function(...attrs) { | |
attrs.forEach(attr => this.removeAttribute(attr)); | |
} | |
//round to 2 decimal places | |
//https://stackoverflow.com/a/11832950 | |
function r(num) { | |
return Math.round((num + Number.EPSILON) * 100) / 100; | |
} | |
//remove svg whitespace | |
function svgRemoveWhitespace(svg) { | |
let box = svg.getBBox(), | |
viewBox = [ | |
r(box.x), | |
r(box.y), | |
r(box.width), | |
r(box.height) | |
].join(' '); | |
svg.setAttribute('viewBox', viewBox); | |
svg.removeAttributes('width', 'height'); //optional | |
showNewViewbox(svg, viewBox); | |
} | |
//show new viewbox output above the svg | |
function showNewViewbox(el, result) { | |
let output = document.createElement('div'); | |
let field = document.createElement('input'); | |
let label = document.createElement('label'); | |
let id = 'viewbox'; | |
label.setAttribute('for', id); | |
label.textContent = 'new viewBox:'; | |
field.id = id; | |
field.setAttribute('type', 'text'); | |
field.setAttribute('readonly', ''); | |
field.value = result; | |
field.addEventListener('focus', (e) => e.target.select()); | |
output.classList.add('output'); | |
output.insertAdjacentElement('beforeend', label); | |
output.insertAdjacentElement('beforeend', field); | |
el.insertAdjacentElement('beforebegin', output); | |
} | |
const svgs = document.querySelectorAll('svg'); | |
svgs.forEach(svg => svgRemoveWhitespace(svg)); |
*, | |
*::before, | |
*::after { | |
box-sizing: border-box; | |
} | |
body { | |
margin: 0; | |
font-family: Roboto, sans-serif; | |
overflow-x: hidden; | |
} | |
svg { | |
display: block; | |
max-width: 100%; | |
height: auto; | |
margin: 1em; | |
outline: 1px solid #f00; //guidelines | |
} | |
.output { | |
display: flex; | |
flex-flow: row wrap; | |
align-items: center; | |
gap: .25em .5em; | |
margin: 1em; | |
& ~ & { | |
margin-top: 3em; //spacing | |
} | |
label { | |
font-weight: 500; | |
} | |
} |
<link href="https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,400;0,500;0,700;1,400;1,500;1,700&display=swap" rel="stylesheet" /> |
Sets the SVG's viewBox to its bounding box.
A Pen by Marc Müller on CodePen.