<!DOCTYPE HTML> <html> <head> <link rel="stylesheet" type="text/css" href="svg-image-util.css" /> <script src="svg-image-util.js"></script> </head> <body style="height: 600px"><!-- height for pct vals to resolve against --> <script> var svgParams = { viewBox: null, // This gets set on a case-by-case basis below. width : "20px", height : "20%", meetOrSlice: null // This means "use pAR=none" }; // Descriptions below describe the behavior of the rows of <img> elements // in the corresponding test cases, which we mimic with specially-crafted // <embed> elements. // * FIRST TWO ROWS: <img> has width=auto height=auto // - Each <img> renders w/ height = 150px (default) // - Synthesized viewBox has height = 20% * viewport_height = .2*150 = 30 // - <img> & viewBox both get width=20px, from <svg> width attr svgParams.viewBox = [0, 0, 20, 30], appendSVGSubArrayWithParams(svgParams, "embed", "20px", "150px"); // * SECOND TWO ROWS: <img> has width=auto, height=20px // - <img> now renders w/ height = 20px (imposed by <img> height attr) // - Synthesized viewBox has height = 20% * viewport_width = .2*20 = 4 // - <img> & viewBox both get width=20px, from <svg> width attr svgParams.viewBox = [0, 0, 20, 4], appendSVGSubArrayWithParams(svgParams, "embed", "20px", "20px"); // * THIRD TWO ROWS: <img> has width=30px height=auto // Calculations are as with "FIRST TWO ROWS", except <img> now imposes // width="30px". svgParams.viewBox = [0, 0, 20, 30], appendSVGSubArrayWithParams(svgParams, "embed", "30px", "150px"); // * FOURTH TWO ROWS: <img> has width=30px height=20px // Calculations are as with "SECOND TWO ROWS", except <img> now imposes // width="30px". svgParams.viewBox = [0, 0, 20, 4], appendSVGSubArrayWithParams(svgParams, "embed", "30px", "20px"); </script> <!-- Body gets populated by script --> </body> </html>