- From: Alan Gresley <alan@css-class.com>
- Date: Mon, 01 Aug 2011 20:15:30 +1000
- To: Jonathan Snook <jonathan@snook.ca>
- CC: www-style@w3.org
On 30/07/2011 5:36 AM, Jonathan Snook wrote:
> (apologies if this comes through twice; the messaging on first
> sending an email to the list is a little confusing)
>
> So, I've been trying to reconcile some considerations about CSS3
> Animations. I talked a bit about them recently and explained
> keyframes like we were defining classes that were being applied to
> the element at certain points of time and transitioning values
> between those times.
>
> However, currently, non-transitionable properties are ignored. I'd
> like to suggest that this be changed and I'll give you a particular
> use case:
>
> div { display:block; }
>
> div.hidden { display:none; animation: slide-out 1s 1; }
>
> In this example, the hidden class is applied to a DIV via JavaScript.
> The problem is that by setting display:none, neither animations nor
> transitions will work. I would propose that non-transitionable values
> be allowed.
>
> @keyframes slide-out {
> 0% { display:block; opacity: 1; }
> 100% { display:none; opacity:0; }
> }
>
> In this way, the element fades to nothing and then is removed from
> flow. As you can see by this example, the fall back for browsers that
> don't support animations is what we want and still accessible (in the
> sense that we often want things removed from the page for both visual
> users and screenreader users).
> Jonathan.
If the hidden class is applied by javascript, then you can query the end
of the animation to trigger display: none. Something like the below code
(I have changed the 'class' for and 'id' for demonstration only). This
also disables the animation if javascript is disabled.
<!doctype html>
<script type="text/javascript">
var controller = {};
controller.init = function () {
// put a listener on the initial splash animation
this.splash = document.getElementById('element');
this.splash.addEventListener('webkitAnimationEnd', this, false);
};
controller.handleEvent = function (event) {
if (event.type == 'webkitAnimationEnd') {
document.getElementById('element').style.display="none";
}
};
window.addEventListener('DOMContentLoaded', function () {
controller.init();
}, false);
</script>
<style>
body { padding: 50px; }
.outer { border: 5px solid silver; margin-top: 50px; }
#element {
width: 100px;
background: blue;
-webkit-animation-timing-function: linear;
-webkit-animation-iteration-count: 1;
-webkit-animation-duration: 4s;
/* animation name is in javascript */
}
@-webkit-keyframes run {
0% { display: block; opacity: 1; height: 100px; -webkit-transform:
rotate(0deg); }
100% { display: block; opacity: 0; height: 100px; -webkit-transform:
rotate(90deg); }
}
</style>
<button
onclick="document.getElementById('element').style.webkitAnimationName =
'run';">Begin animation</button>
<p>Refresh to reset</p>
<div class="outer">
<div id="element"></div>
</div>
--
Alan Gresley
http://css-3d.org/
http://css-class.com/
Received on Monday, 1 August 2011 10:16:08 UTC