当前位置:   article > 正文

前端开发攻略---简化响应式设计:利用 SCSS 优雅管理媒体查询

前端开发攻略---简化响应式设计:利用 SCSS 优雅管理媒体查询

1、演示

2、未优化前的代码

  1. .header {
  2. width: 100px;
  3. height: 100px;
  4. background-color: red;
  5. }
  6. @media (min-width: 320px) and (max-width: 480px) {
  7. .header {
  8. width: 10px;
  9. }
  10. }
  11. @media (min-width: 320px) and (max-width: 480px) {
  12. .header {
  13. height: 20px;
  14. }
  15. }
  16. @media (min-width: 481px) and (max-width: 768px) {
  17. .header {
  18. height: 40px;
  19. }
  20. }
  21. @media (min-width: 769px) and (max-width: 1024px) {
  22. .header {
  23. height: 60px;
  24. }
  25. }
  26. @media (min-width: 1025px) and (max-width: 1200px) {
  27. .header {
  28. height: 80px;
  29. }
  30. }
  31. @media (min-width: 1201px) {
  32. .header {
  33. height: 100px;
  34. }
  35. }

可以想象一下,在真实的项目里面有这么多选择器要写,有这么多根据不同的设备处理不同的样式,这个代码根本看不了。

3、优化方法

 想办法优化成容易书写,容易维护,可以借助预编译器 sass 或者 less

4、sass介绍

Sass(Syntactically Awesome Stylesheets)是一种强大的CSS预处理器,它为CSS提供了许多增强功能,使得样式表的编写更加简洁和灵活。通过 Sass,您可以使用变量、嵌套规则、混合器、继承等功能,使得样式表的维护和管理更加容易。

其中,最常用的功能之一是变量。使用 Sass,您可以定义一次变量,然后在整个样式表中多次使用,这样可以方便地在需要时进行修改,而无需逐个查找和替换。

另一个重要的功能是嵌套规则。通过 Sass,您可以编写更加结构清晰的样式表,使用嵌套规则可以更好地组织和管理样式,提高代码的可读性和维护性。

此外,Sass还支持混合器(Mixins)和继承(Inheritance)等功能,这些功能可以帮助您减少样式表的重复代码,提高样式表的复用性和可维护性。

总的来说,Sass是一个强大的工具,可以帮助您更高效地编写和管理样式表,提高前端开发的效率和质量。

5、混合器

什么叫做混合: 可以提取一部分的公共代码

未编译前的代码,可以公共使用

  1. @mixin flex{
  2. display: flex;
  3. justify-content: center;
  4. align-items: center;
  5. }
  6. .header{
  7. width: 100%;
  8. @include flex;
  9. }
  10. .nav{
  11. @include flex;
  12. }

编译后的代码,会被编译为存粹的Css,最终的运行结果也是这个存粹的Css

  1. .header{
  2. width: 100%;
  3. display: flex;
  4. justify-content: center;
  5. align-items: center;
  6. }
  7. .nav{
  8. display: flex;
  9. justify-content: center;
  10. align-items: center;
  11. }

6、传递参数

 编译前的scss文件

  1. @mixin flex($layout){
  2. display: flex;
  3. justify-content: $layout;
  4. align-items: $layout;
  5. }
  6. .header{
  7. width: 100%;
  8. @include flex(center)
  9. }
  10. .nav{
  11. @include flex(start)
  12. }

编译后的css文件

  1. .header{
  2. width: 100%;
  3. display: flex;
  4. justify-content: center;
  5. align-items: center;
  6. }
  7. .nav{
  8. display: flex;
  9. justify-content: start;
  10. align-items: start;
  11. }

7、传递内容

 编译前的scss文件

  1. @mixin flex($layout){
  2. display: flex;
  3. justify-content: $layout;
  4. align-items: $layout;
  5. @content;
  6. }
  7. .header{
  8. width: 100%;
  9. @include flex(center){
  10. background-color: red;
  11. }
  12. }
  13. .nav{
  14. @include flex(start){
  15. position: relative;
  16. }
  17. }

 编译前的css文件

  1. .header{
  2. width: 100%;
  3. display: flex;
  4. justify-content: center;
  5. align-items: center;
  6. background-color: red;
  7. }
  8. .nav{
  9. display: flex;
  10. justify-content: center;
  11. align-items: center;
  12. position: relative;
  13. }

8、优化后的代码

  1. $typePoint:(
  2. 'phone':(320px,480px),
  3. 'pad':(481px,768px),
  4. 'notebook':(769px,1024px),
  5. 'desktop':(1025px,1200px),
  6. 'tv':1201px,
  7. );
  8. @mixin responseTo($type){
  9. $bp:map-get($typePoint,$type);
  10. @if type-of($bp) == 'list' {
  11. @media (min-width: nth($bp,1)) and (max-width: nth($bp,2)) {
  12. @content;
  13. }
  14. } @else {
  15. @media (min-width: $bp) {
  16. @content;
  17. }
  18. }
  19. }
  20. .header{
  21. width: 100%;
  22. @include responseTo('phone'){
  23. height: 50px;
  24. }
  25. @include responseTo('pad'){
  26. height: 70px;
  27. }
  28. @include responseTo('notebook'){
  29. height: 90px;
  30. }
  31. @include responseTo('desktop'){
  32. height: 110px;
  33. }
  34. @include responseTo('tv'){
  35. height: 130px;
  36. }
  37. }

写完保存过后,生成的css文件内容和第二步一模一样,而且上面这个代码只需要做一次,不需要每次都写,项目里面做一次甚至可以跨越项目,后边要做的无非就是使用这个混合

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/431034
推荐阅读
相关标签
  

闽ICP备14008679号