HTML Code

2D Transforms

CSS Transforms Playground

CSS Transforms Playground


CSS Transforms Playground


<html lang=”en”>
<head>
    <meta charset=”UTF-8″>
    <meta name=”viewport” content=”width=device-width, initial-scale=1.0″>
    <title>CSS Transforms Playground</title>
    <style>
        body {
            font-family: sans-serif;
            display: flex;
            flex-direction: column;
            align-items: center;
            padding: 20px;
        }
 
        #controls {
            display: flex;
            flex-wrap: wrap;
            justify-content: center;
            margin-bottom: 20px;
        }
 
        .control-group {
            margin: 10px;
            display: flex;
            flex-direction: column;
            align-items: center;
        }
 
        label {
            margin-bottom: 5px;
        }
 
        #preview-container {
            width: 200px;
            height: 200px;
            border: 1px solid #ccc;
            margin-top: 20px;
            display: flex;
            justify-content: center;
            align-items: center;
        }
 
        #preview-box {
            width: 100px;
            height: 100px;
            background-color: cornflowerblue;
            transition: transform 0.3s ease, background-color 0.3s ease, border-color 0.3s ease, border-radius 0.3s ease;
        }
 
        /* Animation styles */
        .animated {
            animation: colorChange 5s infinite alternate;
        }
 
    </style>
</head>
<body>
    <h1>CSS Transforms Playground</h1>
 
    <div id=”controls”>
        <div class=”control-group”>
            <label for=”transform-type”>Transform:</label>
            <select id=”transform-type”>
                <option value=”none”>None</option>
                <option value=”rotate”>Rotate</option>
                <option value=”scaleX”>Scale X</option>
                <option value=”scaleY”>Scale Y</option>
                <option value=”scale”>Scale</option>
                <option value=”skewX”>Skew X</option>
                <option value=”skewY”>Skew Y</option>
                <option value=”skew”>Skew</option>
                <option value=”matrix”>Matrix</option>
                <option value=”translate”>Translate</option>
            </select>
        </div>
 
        <div class=”control-group” id=”rotate-controls” style=”display: none;”>
            <label for=”rotate-value”>Rotate (deg):</label>
            <input type=”number” id=”rotate-value” value=”0″>
        </div>
 
        <div class=”control-group” id=”scale-controls” style=”display: none;”>
            <label for=”scale-x”>Scale X:</label>
            <input type=”number” id=”scale-x” value=”1″ step=”0.1″>
            <label for=”scale-y”>Scale Y:</label>
            <input type=”number” id=”scale-y” value=”1″ step=”0.1″>
        </div>
 
        <div class=”control-group” id=”skew-controls” style=”display: none;”>
            <label for=”skew-x”>Skew X (deg):</label>
            <input type=”number” id=”skew-x” value=”0″>
            <label for=”skew-y”>Skew Y (deg):</label>
            <input type=”number” id=”skew-y” value=”0″>
        </div>
 
         <div class=”control-group” id=”translate-controls” style=”display: none;”>
            <label for=”translate-x”>Translate X (px):</label>
            <input type=”number” id=”translate-x” value=”0″>
            <label for=”translate-y”>Translate Y (px):</label>
            <input type=”number” id=”translate-y” value=”0″>
        </div>
 
 
        <div class=”control-group” id=”matrix-controls” style=”display: none;”>
            <label for=”matrix-values”>Matrix Values (a, b, c, d, tx, ty):</label>
            <input type=”text” id=”matrix-values” value=”1, 0, 0, 1, 0, 0″>
        </div>
 
        <div class=”control-group”>
            <label for=”animation-toggle”>Animate Color:</label>
            <input type=”checkbox” id=”animation-toggle”>
        </div>
 
        <div class=”control-group”>
            <label for=”border-radius”>Border Radius:</label>
            <input type=”number” id=”border-radius” value=”0″ min=”0″ max=”100″>
        </div>
    </div>
 
    <div id=”preview-container”>
        <div id=”preview-box”></div>
    </div>
 
    <script>
        document.addEventListener(‘DOMContentLoaded’, () => {
            const transformTypeSelect = document.getElementById(‘transform-type’);
            const rotateControls = document.getElementById(‘rotate-controls’);
            const scaleControls = document.getElementById(‘scale-controls’);
            const skewControls = document.getElementById(‘skew-controls’);
            const matrixControls = document.getElementById(‘matrix-controls’);
        const translateControls = document.getElementById(‘translate-controls’);
            const rotateValueInput = document.getElementById(‘rotate-value’);
            const scaleXInput = document.getElementById(‘scale-x’);
            const scaleYInput = document.getElementById(‘scale-y’);
            const skewXInput = document.getElementById(‘skew-x’);
            const skewYInput = document.getElementById(‘skew-y’);
const translateXInput = document.getElementById(‘translate-x’);
            const translateYInput = document.getElementById(‘translate-y’);
            const matrixValuesInput = document.getElementById(‘matrix-values’);
            const previewBox = document.getElementById(‘preview-box’);
            const animationToggle = document.getElementById(‘animation-toggle’);
            const borderRadiusInput = document.getElementById(‘border-radius’);
 
            function updateTransform() {
                const transformType = transformTypeSelect.value;
                let transformValue = ”;
 
                switch (transformType) {
                    case ‘rotate’:
                        transformValue = `rotate(${rotateValueInput.value}deg)`;
                        break;
                    case ‘scaleX’:
                        transformValue = `scaleX(${scaleXInput.value})`;
                        break;
                    case ‘scaleY’:
                        transformValue = `scaleY(${scaleYInput.value})`;
                        break;
                    case ‘scale’:
                        transformValue = `scale(${scaleXInput.value}, ${scaleYInput.value})`;
                        break;
                    case ‘skewX’:
                        transformValue = `skewX(${skewXInput.value}deg)`;
                        break;
                    case ‘skewY’:
                        transformValue = `skewY(${skewYInput.value}deg)`;
                        break;
                    case ‘skew’:
                        transformValue = `skew(${skewXInput.value}deg, ${skewYInput.value}deg)`;
                        break;
                    case ‘matrix’:
                        transformValue = `matrix(${matrixValuesInput.value})`;
                        break;
case ‘translate’:
transformValue = `translate(${translateXInput.value}px, ${translateYInput.value}px)`;
break;
                    case ‘none’:
                    default:
                        transformValue = ‘none’;
                        break;
                }
 
                previewBox.style.transform = transformValue;
            }
 
            transformTypeSelect.addEventListener(‘change’, (event) => {
                rotateControls.style.display = ‘none’;
                scaleControls.style.display = ‘none’;
                skewControls.style.display = ‘none’;
                matrixControls.style.display = ‘none’;
translateControls.style.display = ‘none’;
 
 
                switch (event.target.value) {
                    case ‘rotate’:
                        rotateControls.style.display = ‘flex’;
                        break;
                    case ‘scaleX’:
                    case ‘scaleY’:
                    case ‘scale’:
                        scaleControls.style.display = ‘flex’;
                        break;
                    case ‘skewX’:
                    case ‘skewY’:
                    case ‘skew’:
                        skewControls.style.display = ‘flex’;
                        break;
                    case ‘matrix’:
                        matrixControls.style.display = ‘flex’;
                        break;
case ‘translate’:
translateControls.style.display = ‘flex’;
break;
                }
 
                updateTransform();
            });
 
            rotateValueInput.addEventListener(‘input’, updateTransform);
            scaleXInput.addEventListener(‘input’, updateTransform);
            scaleYInput.addEventListener(‘input’, updateTransform);
            skewXInput.addEventListener(‘input’, updateTransform);
            skewYInput.addEventListener(‘input’, updateTransform);
translateXInput.addEventListener(‘input’, updateTransform);
            translateYInput.addEventListener(‘input’, updateTransform);
            matrixValuesInput.addEventListener(‘input’, updateTransform);
 
            animationToggle.addEventListener(‘change’, (event) => {
                if (event.target.checked) {
                    previewBox.classList.add(‘animated’);
                } else {
                    previewBox.classList.remove(‘animated’);
                }
            });
 
            borderRadiusInput.addEventListener(‘input’, (event) => {
                previewBox.style.borderRadius = `${event.target.value}%`;
            });
        });
    </script>
</body>
</html>
Scroll to Top