Is it possible to apply dynamic top and left values for ngFor repeated span element in Angular 4?
            Asked
            
        
        
            Active
            
        
            Viewed 3.8k times
        
    1 Answers
51
            You can use:
- the [style.anything]binding, to do something simple eg.<span [style.color]="red"></span>, or something more complicated like eg. bind a variable (hereprogress) to a percentage (width):[style.width.%]="progress";
- the [ngStyle]binding, allowing to specify several CSS properties at once, eg:<span [ngStyle]="{'color': 'red', 'font-weight': condition? 'bold':'300'}"></span>
- the [className]binding to apply a CSS class name dynamically, eg:<span [className]="condition? 'redText': 'blueText'"></span>
- the [ngClass]binding that allows specifying multiple CSS classes at once, just likengStyledoes for CSS properties, eg:<span [ngClass]="{'redText': condition1, 'blueText': condition2}"></span>
[ngClass] receives an object as its input, and applies each one of that object's keys only if the respective value evaluates to true.
For instance, if you're iterating over the array items_array:
<span *ngFor="let i of items_array" 
    [ngClass]="{'redText': i.shouldBeRed, 'blueText': i.shouldBeBlue}">
  The span text
</span>
the CSS class of each element (i) will be:
- redTextif the attribute- i.shouldBeRedevaluates to true (that is: it's- true,- 1, a non-empty string, or a non-null object;
- blueTextif the attribute i.shouldBeBlue evaluates to true;
- redText blueTextif both attributes evaluate to true.
In your case, I guess that [ngStyle] would be appropriate:
<span *ngFor="let i of items_array" 
      [ngStyle]="{'top': expression1, 'left': expression2}">
    The span content
</span>
 
    
    
        Paolo Stefan
        
- 10,112
- 5
- 45
- 64
