css – 通过SASS循环嵌套选择器

前端之家收集整理的这篇文章主要介绍了css – 通过SASS循环嵌套选择器前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有这个 HTML
  1. <ul> // first level
  2. <li>
  3. <ul></ul> // second level
  4. </li>
  5. <li>
  6. <ul> // second level
  7. <li>
  8. <ul></ul> // third level
  9. </li>
  10. </ul>
  11. </li>
  12. </ul>

有没有可能将嵌套列表相互循环,得到这样的东西:

  1. ul {
  2. padding: 10px;
  3. ul {
  4. padding: 20px;
  5. ul {
  6. padding: 30px;
  7. ... through 10 * ul
  8. }
  9. }
  10. }

有了这个我只有列表乘法.

  1. @for $i from 1 through 10 {
  2. ul {
  3. padding-left: 100 - (10 * $i) + px;
  4. }
  5. }

解决方法

对于3.4之前的Sass版本,您需要执行此操作的功能不是本机Sass的一部分(并且递归mixin在某些版本中不起作用).你需要名为nest()的Compass函数.
  1. $sel: '';
  2. @for $i from 1 through 10 {
  3. // remove !global flag if you're using Sass < 3.3
  4. $sel: if($i == 1,"ul",nest($sel,"ul")) !global;
  5.  
  6. #{$sel} {
  7. padding-left: 10px * $i;
  8. }
  9. }

Sass 3.4有一个名为selector-nest()的函数的原生版本:

  1. $sel: '';
  2. @for $i from 1 through 10 {
  3. $sel: if($i == 1,selector-nest($sel,"ul")) !global;
  4.  
  5. #{$sel} {
  6. padding-left: 10px * $i;
  7. }
  8. }

输出

  1. ul {
  2. padding-left: 10px;
  3. }
  4.  
  5. ul ul {
  6. padding-left: 20px;
  7. }
  8.  
  9. ul ul ul {
  10. padding-left: 30px;
  11. }
  12.  
  13. ul ul ul ul {
  14. padding-left: 40px;
  15. }
  16.  
  17. ul ul ul ul ul {
  18. padding-left: 50px;
  19. }
  20.  
  21. ul ul ul ul ul ul {
  22. padding-left: 60px;
  23. }
  24.  
  25. ul ul ul ul ul ul ul {
  26. padding-left: 70px;
  27. }
  28.  
  29. ul ul ul ul ul ul ul ul {
  30. padding-left: 80px;
  31. }
  32.  
  33. ul ul ul ul ul ul ul ul ul {
  34. padding-left: 90px;
  35. }
  36.  
  37. ul ul ul ul ul ul ul ul ul ul {
  38. padding-left: 100px;
  39. }

如果你想拼出最初的ul,那么你会这样做:

  1. ul {
  2. // parent styles
  3. border: 1px solid;
  4.  
  5. $sel: '';
  6. @for $i from 2 through 10 {
  7. $sel: if($i == 2,'ul','ul')); // note no !global flag
  8.  
  9. #{$sel} {
  10. padding-left: 10px * $i;
  11. }
  12. }
  13. }

请注意,您可以使用简单的字符串连接而不是这些函数中的任何一个,但它仅适用于您只嵌套单个选择器的情况.如果您有2个或更多选择器,这是绝对必要的:

  1. $sel: '';
  2. @for $i from 1 through 3 {
  3. $sel: if($i == 1,"article,section",section")) !global;
  4.  
  5. #{$sel} {
  6. h1 {
  7. padding-left: 10px * $i;
  8. }
  9. }
  10. }

输出

  1. article h1,section h1 {
  2. padding-left: 10px;
  3. }
  4.  
  5. article article h1,article section h1,section article h1,section section h1 {
  6. padding-left: 20px;
  7. }
  8.  
  9. article article article h1,article article section h1,article section article h1,article section section h1,section article article h1,section article section h1,section section article h1,section section section h1 {
  10. padding-left: 30px;
  11. }

猜你在找的CSS相关文章