Search code examples
cssfor-loopsasseach

I can't make each loop in my sass project


I want to create my own framework like bootstrap. But I ran into a problem. I created the media query section, but I could not make a loop using Sass technology. I want to make a loop that does the following

@media (min-width: #{/*there is the first loop (576px,768px,992px ..)*/}) {
   .grid-col-#{/*this is loop two (i want to loop all sizes such (mid, xl, xxl))*/} {
       display: grid;
       grid-template-columns: repeat(#{/*i want here to make loop does take a lot of 
       numbers such as (1, 2, 3, 4, 5, 6 ..) 
       of columns*/},minmax(0, 1fr));
   }
}

The idea is to make one media repeat until it carries all sizes of the screen, like this

@media (min-width: 557px) {
      .grid-col-sm-1 {
        display: grid;
        grid-template-columns: repeat(1 /*the number in the class*/, minmax(0, 1fr))
       }
     .grdi-col-sm-2 {
       display: grid;
       grid-template-columns: repeat(2, minmax(0, 1fr))
     }
    }
@media (min-width: 768px) {
   .grid-col-md-1 {
      display: grid;
      grid-template-columns: repeat(1, minmax(0, 1fr))
   }
   .grid-col-md-2 {
     display: grid;
     grid-template-columns: repeat(2, minmax(0, 1fr))
   }
}

I hope I explained well. I want to develop my basic skills, nothing more.


Solution

  • You want something like this:

    $breakpoints : '575px','768px','992px','1200px';
    
    @each $breakpoint in $breakpoints {
        @media (min-width: #{$breakpoint} ) {
            @for $i from 1 through 12 {
               .grid-col-#{$i} {
                   display: grid;
                   grid-template-columns: repeat( #{$i},minmax(0, 1fr));
                }
            }
        }
    }
    

    That will output:

    @media (min-width: 575px) {
      .grid-col-1 {
        display: grid;
        grid-template-columns: repeat(1, minmax(0, 1fr));
      }
    
      .grid-col-2 {
        display: grid;
        grid-template-columns: repeat(2, minmax(0, 1fr));
      }
    
      .grid-col-3 {
        display: grid;
        grid-template-columns: repeat(3, minmax(0, 1fr));
      }
    
      .grid-col-4 {
        display: grid;
        grid-template-columns: repeat(4, minmax(0, 1fr));
      }
    
      .grid-col-5 {
        display: grid;
        grid-template-columns: repeat(5, minmax(0, 1fr));
      }
    
      .grid-col-6 {
        display: grid;
        grid-template-columns: repeat(6, minmax(0, 1fr));
      }
    
      .grid-col-7 {
        display: grid;
        grid-template-columns: repeat(7, minmax(0, 1fr));
      }
    
      .grid-col-8 {
        display: grid;
        grid-template-columns: repeat(8, minmax(0, 1fr));
      }
    
      .grid-col-9 {
        display: grid;
        grid-template-columns: repeat(9, minmax(0, 1fr));
      }
    
      .grid-col-10 {
        display: grid;
        grid-template-columns: repeat(10, minmax(0, 1fr));
      }
    
      .grid-col-11 {
        display: grid;
        grid-template-columns: repeat(11, minmax(0, 1fr));
      }
    
      .grid-col-12 {
        display: grid;
        grid-template-columns: repeat(12, minmax(0, 1fr));
      }
    }
    @media (min-width: 768px) {
      .grid-col-1 {
        display: grid;
        grid-template-columns: repeat(1, minmax(0, 1fr));
      }
    
      .grid-col-2 {
        display: grid;
        grid-template-columns: repeat(2, minmax(0, 1fr));
      }
    
      .grid-col-3 {
        display: grid;
        grid-template-columns: repeat(3, minmax(0, 1fr));
      }
    
      .grid-col-4 {
        display: grid;
        grid-template-columns: repeat(4, minmax(0, 1fr));
      }
    
      .grid-col-5 {
        display: grid;
        grid-template-columns: repeat(5, minmax(0, 1fr));
      }
    
      .grid-col-6 {
        display: grid;
        grid-template-columns: repeat(6, minmax(0, 1fr));
      }
    
      .grid-col-7 {
        display: grid;
        grid-template-columns: repeat(7, minmax(0, 1fr));
      }
    
      .grid-col-8 {
        display: grid;
        grid-template-columns: repeat(8, minmax(0, 1fr));
      }
    
      .grid-col-9 {
        display: grid;
        grid-template-columns: repeat(9, minmax(0, 1fr));
      }
    
      .grid-col-10 {
        display: grid;
        grid-template-columns: repeat(10, minmax(0, 1fr));
      }
    
      .grid-col-11 {
        display: grid;
        grid-template-columns: repeat(11, minmax(0, 1fr));
      }
    
      .grid-col-12 {
        display: grid;
        grid-template-columns: repeat(12, minmax(0, 1fr));
      }
    }
    @media (min-width: 992px) {
      .grid-col-1 {
        display: grid;
        grid-template-columns: repeat(1, minmax(0, 1fr));
      }
    
      .grid-col-2 {
        display: grid;
        grid-template-columns: repeat(2, minmax(0, 1fr));
      }
    
      .grid-col-3 {
        display: grid;
        grid-template-columns: repeat(3, minmax(0, 1fr));
      }
    
      .grid-col-4 {
        display: grid;
        grid-template-columns: repeat(4, minmax(0, 1fr));
      }
    
      .grid-col-5 {
        display: grid;
        grid-template-columns: repeat(5, minmax(0, 1fr));
      }
    
      .grid-col-6 {
        display: grid;
        grid-template-columns: repeat(6, minmax(0, 1fr));
      }
    
      .grid-col-7 {
        display: grid;
        grid-template-columns: repeat(7, minmax(0, 1fr));
      }
    
      .grid-col-8 {
        display: grid;
        grid-template-columns: repeat(8, minmax(0, 1fr));
      }
    
      .grid-col-9 {
        display: grid;
        grid-template-columns: repeat(9, minmax(0, 1fr));
      }
    
      .grid-col-10 {
        display: grid;
        grid-template-columns: repeat(10, minmax(0, 1fr));
      }
    
      .grid-col-11 {
        display: grid;
        grid-template-columns: repeat(11, minmax(0, 1fr));
      }
    
      .grid-col-12 {
        display: grid;
        grid-template-columns: repeat(12, minmax(0, 1fr));
      }
    }
    @media (min-width: 1200px) {
      .grid-col-1 {
        display: grid;
        grid-template-columns: repeat(1, minmax(0, 1fr));
      }
    
      .grid-col-2 {
        display: grid;
        grid-template-columns: repeat(2, minmax(0, 1fr));
      }
    
      .grid-col-3 {
        display: grid;
        grid-template-columns: repeat(3, minmax(0, 1fr));
      }
    
      .grid-col-4 {
        display: grid;
        grid-template-columns: repeat(4, minmax(0, 1fr));
      }
    
      .grid-col-5 {
        display: grid;
        grid-template-columns: repeat(5, minmax(0, 1fr));
      }
    
      .grid-col-6 {
        display: grid;
        grid-template-columns: repeat(6, minmax(0, 1fr));
      }
    
      .grid-col-7 {
        display: grid;
        grid-template-columns: repeat(7, minmax(0, 1fr));
      }
    
      .grid-col-8 {
        display: grid;
        grid-template-columns: repeat(8, minmax(0, 1fr));
      }
    
      .grid-col-9 {
        display: grid;
        grid-template-columns: repeat(9, minmax(0, 1fr));
      }
    
      .grid-col-10 {
        display: grid;
        grid-template-columns: repeat(10, minmax(0, 1fr));
      }
    
      .grid-col-11 {
        display: grid;
        grid-template-columns: repeat(11, minmax(0, 1fr));
      }
    
      .grid-col-12 {
        display: grid;
        grid-template-columns: repeat(12, minmax(0, 1fr));
      }
    }