用更少的循环优化css?

Posted

技术标签:

【中文标题】用更少的循环优化css?【英文标题】:Optimize css with less loop? 【发布时间】:2019-01-05 16:23:09 【问题描述】:

我试图通过在每次迭代中将动画延迟几秒钟来确定谁应用级联样式效果:

.stashCard 
    background-color:white;


.in(@delay) 
    -webkit-animation: swing-in-left-bck .6s cubic-bezier(.175, .885, .32, 1.275) @delay both;
    animation: swing-in-left-bck .6s cubic-bezier(.175, .885, .32, 1.275) @delay both


.out(@delay) 
    -webkit-animation: fade-out .2s ease-out @delay both;
    animation: fade-out .2s ease-out @delay both


.baseKid 
    width: 50px;
    height: 50px;
    display: inline-block;



.selected

    .kid();
    color:yellow;


.kid 
    .out(0s);
    .baseKid();

.stashCard:hover .kid 
    .in(0s);
    .baseKid();


.stashCard:hover .kid.selected 
    .in(0s);
    .baseKid();

.stashCard:hover .kid2.selected 
    .in(0.05s);
    .baseKid();


.stashCard:hover .kid2 
    .in(0.05s);
    .baseKid();


.stashCard:hover .kid3.selected 
    .in(0.1s);
    .baseKid();


.stashCard:hover .kid3 
    .in(0.1s);
    .baseKid();


.hover 
    -webkit-animation: text-shadow-drop-center .6s both;
    animation: text-shadow-drop-center .6s both

.unhover 
    -webkit-animation: untext-shadow-drop-center .6s both;
    animation: untext-shadow-drop-center .6s both

这就是我的应用方式:

export const PopupMenu = (props: InputProps) => 
    return <div className="menu" style=props.style>
        <VoteOption count="actors" className=props.selectedCounts.indexOf("actors") >= 0 ? "selected kid" : "kid"  onClick=props.onClick icon="sentiment_very_satisfied" tip="Real actors" />
        <VoteOption count="audio" className=props.selectedCounts.indexOf("audio") >= 0 ? "selected kid2" : "kid2" onClick=props.onClick icon="music_video" tip="Great audio quality" />
        <VoteOption count="picture" className=props.selectedCounts.indexOf("picture") >= 0 ? "selected kid3" : "kid3" onClick=props.onClick icon="photo_camera" tip="Great picture quality" />
    </div>;

显然这是低效的并且需要大量的复制和粘贴,有没有一种方法可以让我可以添加任意数量的投票选项,而更少的可以写出 css,它将遍历所有子组件并应用有正确的偏移开始时间吗?

【问题讨论】:

【参考方案1】:

你可以使用循环来实现它:

.in(@delay) 
    -webkit-animation: swing-in-left-bck .6s cubic-bezier(.175, .885, .32, 1.275) @delay both;
    animation: swing-in-left-bck .6s cubic-bezier(.175, .885, .32, 1.275) @delay both


.out(@delay) 
    -webkit-animation: fade-out .2s ease-out @delay both;
    animation: fade-out .2s ease-out @delay both


.baseKid 
    width: 50px;
    height: 50px;
    display: inline-block;



.loop(@counter) when (@counter > 0) 
  .loop((@counter - 1));    // next iteration
  .kid@counter 
    .in(0.05s * (@counter - 1));
    .baseKid();
  
  .kid@counter.seleted 
    width: (10px * @counter); // code for each iteration  
  


.stashCard:hover 
  .loop(5); // launch the loop  

【讨论】:

以上是关于用更少的循环优化css?的主要内容,如果未能解决你的问题,请参考以下文章

用更少的内存在 C++ 中实现二维数组

QTableWidget:我怎样才能用更少的垂直间距填充更紧密的线条?

优化查询以获得更好的性能

用更少的时间在 R 中绘制大型数据集

原来PHP对象比数组用更少的内存

rt下降40%?程序并行优化六步法