Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save IgnetStudio/dd31a930eada917555ac to your computer and use it in GitHub Desktop.

Select an option

Save IgnetStudio/dd31a930eada917555ac to your computer and use it in GitHub Desktop.
CSS Transform Origin Example
<div class="wrapper">
<div class="square-wrap">
<div class="square">CSS</div>
</div>
<div class="inputs">
<div class="input-wrap">
<span class="result-X">Rotate-X:</span>
<input type="range" id="sliderX" min="-180" max="180" value="0" onchange="rangevalueX.value=value"/>
<output id="rangevalueX">0deg</output>
</div>
<div class="input-wrap">
<span class="result-Y">Rotate-Y:</span>
<input type="range" id="sliderY" min="-180" max="180" value="0" onchange="rangevalueY.value=value"/>
<output id="rangevalueY">0deg</output>
</div>
<div class="input-wrap">
<span class="result-Z">Rotate-Z:</span>
<input type="range" id="sliderZ" min="-180" max="180" value="0" onchange="rangevalueZ.value=value"/>
<output id="rangevalueZ">0deg</output>
</div>
<div class="input-wrap">
<span class="result-O">Origin-X:</span>
<input type="range" id="sliderOR" min="-180" max="180" value="0" onchange="rangevalueOR.value=value"/>
<output id="rangevalueOR">0px</output>
</div>
<div class="input-wrap">
<span class="result-ORY">Origin-Y:</span>
<input type="range" id="sliderORY" min="-100" max="100" value="0" onchange="rangevalueORY.value=value"/>
<output id="rangevalueORY">0px</output>
</div>
</div>
</div>
// Box
var box = document.querySelector('.square');
// Translate X Variables
var sliderx = document.getElementById("sliderX");
var rangevalueX = document.getElementById("rangevalueX");
// Translate Y Variables
var sliderY = document.getElementById("sliderY");
var rangevalueY = document.getElementById("rangevalueY");
// Translate Z Variables
var sliderZ = document.getElementById("sliderZ");
var rangevalueZ = document.getElementById("rangevalueZ");
// Translate Origin X Variables
var sliderOR = document.getElementById("sliderOR");
var rangevalueOR = document.getElementById("rangevalueOR");
// Translate Origin Y Variables
var sliderORY = document.getElementById("sliderORY");
var rangevalueORY = document.getElementById("rangevalueORY");
// Property array
function getsupportedprop(proparray){
var root=document.documentElement //reference root element of document
for (var i=0; i<proparray.length; i++){ //loop through possible properties
if (proparray[i] in root.style){ //if property exists on element (value will be string, empty string if not set)
return proparray[i] //return that string
}
}
}
// Vendor Prefix Transform
var prefixtransform = getsupportedprop(["transform", "msTransform", "webkitTransform", "mozTransform", "oTransform"]);
// Vendor Prefix Orgigin Y
var prefixtransformoriginy = getsupportedprop(["transformOriginY", "msTransformOriginY", "webkitTransformOriginY", "mozTransformOriginY", "oTransformOriginY"]);
// Vendor Prefix Orgigin Z
var prefixtransformoriginx = getsupportedprop(["transformOriginX", "msTransformOriginX", "webkitTransformOriginX", "mozTransformOriginX", "oTransformOriginX"]);
// Slider X Function
sliderx.onchange = function () {
if (rangevalueX < '50') {
box.style[prefixtransform] = "rotateX(-" + (sliderx.value) + 'deg)' + "rotateY(-" + (sliderY.value) + 'deg)' + "rotateZ(-" + (sliderZ.value) + 'deg)';
rangevalueX.value = sliderx.value + "deg";
} else if (rangevalueX > '50') {
box.style[prefixtransform] = "rotateX(" + sliderx.value + 'deg)' + "rotateY(" + sliderY.value + 'deg)' + "rotateZ(" + (sliderZ.value) + 'deg)';
rangevalueX.value = sliderx.value + "deg";
}
};
// Slider Y Function
sliderY.onchange = function () {
if (rangevalueY < '50') {
box.style[prefixtransform] = "rotateX(-" + (sliderx.value) + 'deg)' + "rotateY(-" + (sliderY.value) + 'deg)' + "rotateZ(-" + (sliderZ.value) + 'deg)';
rangevalueY.value = sliderY.value + "deg";
} else if (rangevalueY > '50') {
box.style[prefixtransform] = "rotateX(" + sliderx.value + 'deg)' + "rotateY(" + sliderY.value + 'deg)' + "rotateZ(" + (sliderZ.value) + 'deg)';
rangevalueY.value = sliderY.value + "deg";
}
};
// Slider Z Function
sliderZ.onchange = function () {
if (rangevalueZ < '50') {
box.style[prefixtransform] = "rotateX(-" + (sliderx.value) + 'deg)' + "rotateY(-" + (sliderY.value) + 'deg)' + "rotateZ(-" + (sliderZ.value) + 'deg)';
rangevalueZ.value = sliderZ.value + "deg";
} else if (rangevalueZ > '50') {
box.style[prefixtransform] = "rotateX(" + sliderx.value + 'deg)' + "rotateY(" + sliderY.value + 'deg)' + "rotateZ(" + (sliderZ.value) + 'deg)';
rangevalueZ.value = sliderZ.value + "deg";
}
}
// Origin X Function
sliderOR.onchange = function () {
if (rangevalueOR < '50') {
box.style[prefixtransformoriginx] = "-" + (sliderOR.value) +'px';
rangevalueOR.value = sliderOR.value + "px";
} else if (rangevalueOR > '50') {
box.style[prefixtransformoriginx] = sliderOR.value + 'px';
rangevalueOR.value = sliderOR.value + "px";
}
}
// Origin Y Function
sliderORY.onchange = function () {
if (rangevalueORY < '50') {
box.style[prefixtransformoriginy] = "-" + (sliderx.value) +'px';
rangevalueORY.value = sliderOR.value + "px";
} else if (rangevalueORY > '50') {
box.style[prefixtransformoriginy] = sliderORY.value + 'px';
rangevalueORY.value = sliderORY.value + "px";
}
}
body {
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
}
.inputs {
position:relative;
}
.input-wrap {
padding-right:80px;
}
.wrapper {
padding:20px 0;
text-align:center;
}
.square-wrap {
position:relative;
width:200px;
height:200px;
overflow:visible;
margin:0 auto;
-webkit-perspective: 100;
-webkit-transform-style: preserve-3d;
font-size:30px;
color:#fff;
line-height:100px;
}
.square {
display:inline-block;
position:absolute;
width:100px;
height:100px;
background:#ee2a7b;
overflow:hidden;
margin-left:50px;
margin-top:50px;
left:0px;
top:0px;
}
output {
position:absolute;
}
span {
margin:10px 10px 0 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment