CSS アニメーション キーフレーム用に、この LESS mixin を設定しようとしています。
.keyframes(@name, @from, @to) {;
@-webkit-keyframes "@name" {
from {
@from;
}
to {
@to;
}
}
}
しかし、名前のフレーズに問題があります。これを正しく行うオプションはありますか?
CSS アニメーション キーフレーム用に、この LESS mixin を設定しようとしています。
.keyframes(@name, @from, @to) {;
@-webkit-keyframes "@name" {
from {
@from;
}
to {
@to;
}
}
}
しかし、名前のフレーズに問題があります。これを正しく行うオプションはありますか?
LESS 1.7 では、ディレクティブの動作方法にいくつかの変更が加えられました。これにより、名前/キーワードに変数を使用できるようになりました@keyframes
(したがって、質問の例は今すぐ動作するはずです)。
残念ながら、LESS <= 1.6 ではキーフレーム名を動的に生成することはできません。
したがって、キーフレームに関する通常の方法では、ハードコーディングされた名前を使用し、次のように特定の「for」および「to」ミックスインのみを呼び出します。
.colors-mixin-frame(@from,@to){
from {color: @from;}
to {color: @to;}
}
.width-mixin-frame(@from,@to){
from {width: @from;}
to {width: @to;}
}
// keyframes with hardcoded names calling for specific mixin frames
@keyframes red-blue { .colors-mixin-frame(red, blue); }
@keyframes change-width { .width-mixin-frame(254px, 512px); }
ルール名に名前を挿入する場合、ただし}
、キーフレーム宣言の最後に閉じ括弧を提供する次のルールの宣言が必要です。最も便利なのは、そのキーフレームを呼び出すアニメーションを作成するだけの場合です
.animation-keyframes(@name, @from, @to, @anim-selector) {
@keyf: ~"@keyframes @{name} { `'\n'`from ";
@anim: ~"} `'\n'`.@{anim-selector}";
@{keyf} {
.from(@name,@from);
}
to {
.to(@name,@to);
}
@{anim} {
animation-name:@name;
}
}
例のようにandを使用するだけでなく、 .from(){}
and .to(){}
mixinsを定義する必要があることに注意してください (LESS は動的に生成されたプロパティも許可しないため) ... この mixins は、目的のプロパティと値を構築できるようになりました ... to次のような特定のプロパティを使用して、ガードまたは名前固有のミックスインを使用できます。@from
@to
// name-specific from and to mixins that are used if first argument equals "colors"
.from (colors, @color) {
color: @color;
}
.to (colors, @color) {
color: @color;
}
これで、 LESSで mixin を呼び出すことができます。
// test
.animation-keyframes (colors, red, blue, my-colanim);
CSSを取得します。
@keyframes colors {
from {
color: #ff0000;
}
to {
color: #0000ff;
}
}
.my-colanim {
animation-name: colors;
}
これは LESS 1.4 でも機能しますが、改行に JavaScript 補間を使用したことに注意してください。これには、LESS の JavaScript 実装が必要です。
編集:接頭辞に関する追加の質問へ
ここでは、2 つの mixin を作成しました... 1 つはベンダー プレフィックスなしで、もう 1 つは両方とも一般的な.keyframes
mixinを呼び出します。
.keyframes (@name, @from, @to, @vendor:"", @bind:"") {
@keyf: ~"@{bind}@@{vendor}keyframes @{name} { `'\n'`from ";
@{keyf} {
.from(@name,@from);
}
to {
.to(@name,@to);
}
}
.animation-keyframes-novendor (@name, @from, @to, @anim-selector) {
.keyframes (@name, @from, @to);
@anim: ~"} `'\n'`.@{anim-selector}";
@{anim} {
animation-name:@name;
}
}
.animation-keyframes (@name, @from, @to, @anim-selector) {
@bind: "} `'\n'`";
.keyframes (@name, @from, @to, "-moz-");
.keyframes (@name, @from, @to, "-webkit-", @bind);
.keyframes (@name, @from, @to, "-o-", @bind);
.keyframes (@name, @from, @to, "-ms-", @bind);
.keyframes (@name, @from, @to, "", @bind);
@anim: ~"} `'\n'`.@{anim-selector}";
@{anim} {
-moz-animation: @name;
-webkit-animation: @name;
-o-animation: @name;
-ms-animation: @name;
animation: @name;
}
}
.from (colors, @color) {
color: @color;
}
.to (colors, @color) {
color: @color;
}
/* keyframes with all vendor prefixes */
.animation-keyframes (colors, red, blue, my-colanim);
/* keyframes with no vendor prefix */
.animation-keyframes-novendor (colors, red, blue, my-colanim);
は.animation-keyframes
、すべてのベンダー プレフィックスのキーフレームと、ベンダー プレフィックス付きのプロパティを持つアニメーション セレクターを生成します。そして、予想どおり.animation-keyframes-novendor
、上記の単純なソリューションと同じ出力が得られます (ベンダー プレフィックスなし)。
アニメーションを実際に機能させるには、タイミング関数、期間、方向、反復回数などの他のアニメーション パラメータを設定する必要があります (既に設定した名前に加えて、少なくとも期間時間が必要です)。
例えば:
animation: @name ease-in-out 2s infinite alternate;
上記の mixin を名前空間でラップする場合は、他の mixin 内の mixin 参照をパス全体 (名前空間を含む) に変更してください。
例えば:
#namespace > .keyframes () // see .less source in the demo for details
私は現在ミックスインライブラリに取り組んでいます
ソースはここにあります https://github.com/pixelass/more-or-less
私のキーフレーム ミックスインは次のようになります。
.keyframes(@name) {
@-webkit-keyframes @name {
.-frames(-webkit-);
}
@-moz-keyframes @name {
.-frames(-moz-);
}
@keyframes @name {
.-frames();
}
}
& {
.keyframes(testanimation);.-frames(@-...){
0% {
left: 0;
@{-}transform: translate(10px, 20px);
}
100% {
left: 100%;
@{-}transform: translate(100px, 200px);
}
}
}
@-webkit-keyframes testanimation {
0% {
left: 0;
-webkit-transform: translate(10px, 20px);
}
100% {
left: 100%;
-webkit-transform: translate(100px, 200px);
}
}
@-moz-keyframes testanimation {
0% {
left: 0;
-moz-transform: translate(10px, 20px);
}
100% {
left: 100%;
-moz-transform: translate(100px, 200px);
}
}
@keyframes testanimation {
0% {
left: 0;
transform: translate(10px, 20px);
}
100% {
left: 100%;
transform: translate(100px, 200px);
}
}
また、Martin Turjakによる素晴らしい回答のおかげで(ありがとうございます) 、キーフレームとアニメーションの css コードをハックなしで柔軟に生成する mixin を少なくした github を配置しました。ここでgithub.com/kuus/を見つけることができます。 animate-me.less .
この mixin を使用すると、次のコードを記述して、有効なクロスブラウザー CSS を取得できます (完全な説明については、github リポジトリを参照してください)。
.animate-me(ComplexAnimation; 0.4s ease; '.complex-animation';
'50%, 100%'; '%stransform: translateZ(-250px) rotateY(30deg)';
70%; '%stransform: translateZ(-250px) rotateY(30deg); opacity: .5; background: green';
30%; '%stransform: translateZ(-250px) rotateY(30deg); opacity: .2; background: yellow';
80%; '%stransform: translateZ(-250px) rotateY(30deg); opacity: 1; background: red'
);
前述のhttps://github.com/kuus/animate-me.lessは物事を行います!
私が書いたこれもチェックできます(よりきちんとしているようです): https://github.com/thybzi/keyframes