ImageGrid/ui/experiments/positioning-in-rotated-element.html
2013-11-09 20:55:03 +04:00

261 lines
5.6 KiB
HTML
Executable File

<html>
<style>
.elem {
position:relative;
width: 100px;
height: 100px;
margin: 10px;
background: gray;
background-image: -ms-linear-gradient(top, #787878 0%, #EFEFEF 100%);
background-image: -moz-linear-gradient(top, #787878 0%, #EFEFEF 100%);
background-image: -o-linear-gradient(top, #787878 0%, #EFEFEF 100%);
/* Webkit (Safari/Chrome 10) */
background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #787878), color-stop(1, #EFEFEF));
/* Webkit (Chrome 11+) */
background-image: -webkit-linear-gradient(top, #787878 0%, #EFEFEF 100%);
background-image: linear-gradient(to bottom, #787878 0%, #EFEFEF 100%);
}
.item-set {
position: absolute;
width: 100%;
height: auto;
background: silver;
font-size: 0px;
text-align: right;
vertical-align: bottom;
}
.item {
display: inline-block;
position: relative;
width: 10px;
height: 10px;
border-radius: 50%;
margin: 5px;
font-size: 0px;
}
.A {
background: Red;
}
.B {
background: Green;
}
.C {
background: Blue;
}
.elem:not(.rotated-0deg):not(.rotated-90deg):not(.rotated-180deg):not(.rotated-270deg):not(.flipped-h):not(.flipped-v),
.rotated-0deg {
border-bottom: solid black 2px;
}
.rotated-90deg {
border-right: solid black 2px;
-webkit-transform: rotate(90deg);
-moz-transform: rotate(90deg);
-o-transform: rotate(90deg);
-ms-transform: rotate(90deg);
transform: rotate(90deg);
}
.rotated-180deg {
border-top: solid black 2px;
-webkit-transform: rotate(180deg);
-moz-transform: rotate(180deg);
-o-transform: rotate(180deg);
-ms-transform: rotate(180deg);
transform: rotate(180deg);
}
.rotated-270deg {
border-left: solid black 2px;
-webkit-transform: rotate(270deg);
-moz-transform: rotate(270deg);
-o-transform: rotate(270deg);
-ms-transform: rotate(270deg);
transform: rotate(270deg);
}
.flipped-h {
border-bottom: solid black 2px;
-webkit-transform: scaleX(-1);
-moz-transform: scaleX(-1);
-o-transform: scaleX(-1);
-ms-transform: scaleX(-1);
transform: scaleX(-1);
}
.flipped-v {
border-top: solid black 2px;
-webkit-transform: scaleY(-1);
-moz-transform: scaleY(-1);
-o-transform: scaleY(-1);
-ms-transform: scaleY(-1);
transform: scaleY(-1);
}
.elem:not(.rotated-0deg):not(.rotated-90deg):not(.rotated-180deg):not(.rotated-270deg):not(.flipped-h):not(.flipped-v) .item-set,
.rotated-0deg .item-set {
bottom: 0px;
right: 0px;
}
.rotated-90deg .item-set {
top: 0px;
right: 0px;
/* the full height of the item-set... */
margin-right: 20px;
-webkit-transform: rotate(-90deg);
-moz-transform: rotate(-90deg);
-o-transform: rotate(-90deg);
-ms-transform: rotate(-90deg);
transform: rotate(-90deg);
-webkit-transform-origin: top right;
-ms-transform-origin: top right;
transform-origin: top right;
}
.rotated-180deg .item-set {
top: 0px;
left: 0px;
-webkit-transform: rotate(180deg);
-moz-transform: rotate(180deg);
-o-transform: rotate(180deg);
-ms-transform: rotate(180deg);
transform: rotate(180deg);
}
.rotated-270deg .item-set {
bottom: 0px;
left: 0px;
margin-bottom: 100%;
-webkit-transform: rotate(90deg);
-moz-transform: rotate(90deg);
-o-transform: rotate(90deg);
-ms-transform: rotate(90deg);
transform: rotate(90deg);
-webkit-transform-origin: bottom left;
-ms-transform-origin: bottom left;
transform-origin: bottom left;
}
.flipped-h .item-set {
bottom: 0px;
left: 0px;
-webkit-transform: scaleX(-1);
-moz-transform: scaleX(-1);
-o-transform: scaleX(-1);
-ms-transform: scaleX(-1);
transform: scaleX(-1);
}
.flipped-v .item-set {
top: 0px;
left: 0px;
}
</style>
<script>
</script>
<body>
<p>
The goal here is to develop a simple CSS mechanism to rotate an
element yet keep it's content aligned correctly...
<br>
This solution is not wothout restriction but the apporeach works.
<ul>
<li> this approach introduces an extra orgonizing element <i>.item-set</i>
<li> <i>.item-set</i> must be of fixed width and height
(in this case 100% and 20px)
<li> combining flipping and rotation is at this point non-trivial
</ul>
</p>
<div>0&deg;:
<div class="elem">
<div class="item-set">
<div class="item A"></div>
<div class="item B"></div>
<div class="item C"></div>
</div>
</div>
</div>
<div>90&deg;:
<div class="elem rotated-90deg">
<div class="item-set">
<div class="item A"></div>
<div class="item B"></div>
<div class="item C"></div>
</div>
</div>
</div>
<div>180&deg;:
<div class="elem rotated-180deg">
<div class="item-set">
<div class="item A"></div>
<div class="item B"></div>
<div class="item C"></div>
</div>
</div>
</div>
<div>270&deg;:
<div class="elem rotated-270deg">
<div class="item-set">
<div class="item A"></div>
<div class="item B"></div>
<div class="item C"></div>
</div>
</div>
</div>
<div>Flipped horizontally:
<div class="elem flipped-h">
<div class="item-set">
<div class="item A"></div>
<div class="item B"></div>
<div class="item C"></div>
</div>
</div>
</div>
<div>Flipped vertically:
<div class="elem flipped-v">
<div class="item-set">
<div class="item A"></div>
<div class="item B"></div>
<div class="item C"></div>
</div>
</div>
</div>
<!--div>Flipped vertically and rotated 90&deg;:
<div class="elem flipped-v rotated-90deg">
<div class="item-set">
<div class="item A"></div>
<div class="item B"></div>
<div class="item C"></div>
</div>
</div>
</div-->
</body>
</html>