移动端优先策略下的css如何编写_html/css_WEB-ITnose

php中文网
发布: 2016-06-21 08:55:31
原创
1439人浏览过

移动互联网时代,如何开发一个响应式站点,是每一个前端人员必备的技能。通常,我们能意识到良好的设计对移动端开发的重要性,但是在代码层面很少讨论。

接下来,让我们搞清楚:

1,什么是移动端优先策略(小屏优先策略)

2,这种策略的样式如何编写。


立即学习前端免费学习笔记(深入)”;

SEEK.ai
SEEK.ai

AI驱动的智能数据解决方案,询问您的任何数据并立即获得答案

SEEK.ai 128
查看详情 SEEK.ai

 移动端优先策略VS桌面端优先策略


立即学习前端免费学习笔记(深入)”;

移动端优先策略:以适配移动端设备为首要目标进行设计开发,尽可能的适配桌面端大屏。

桌面端优先策略:以桌面端设备作为首要考虑目标,移动端放到次要位置考虑

这里就是一个主次关系的考虑。

在移动端优先策略下样式的编写,我们可以借用媒体查询来完成对于桌面端大屏设备的适配(例如min-width)。

举个例子:

// This applies from 0px to 600px

body { 

  background: red; 
}

// This applies from 600px onwards

@media (min-width: 600px) {

  body { 
    background: green; 
  }

}

这里,body在600px一下的宽度时,背景色为红色,而超过600px,就变为绿色了。

在桌面端优先的策略下,我们要这么写css:

// This applies from 600px onwards

body { 

  background: green; 
}


立即学习前端免费学习笔记(深入)”;

// This applies from 0px to 600px

@media (max-width: 600px) {

  body { 
    background: red; 
  }

}


立即学习前端免费学习笔记(深入)”;

为什么要采用移动端优先的策略?


立即学习前端免费学习笔记(深入)”;

相对于小屏幕,为了适配大屏幕,我们的css代码通常要复杂一些,所以移动端优先的策略有利于精简代码。


立即学习前端免费学习笔记(深入)”;

考虑如下场景:

一个站点有个如下布局,.Content在移动端占据100%,在桌面端占据60%

此时,对于小屏幕,我们可以借助属性的默认值为content区域添加样式,比如一个div,默认情况下,作为块级元素默认宽度为100%。

小屏优先策略下的sass代码:

.content {
  // Properties for smaller screens. 
  // Nothing is required here because we can use the default styles 

  // Properties for larger screens
  @media (min-width: 800px) {
    float: left; 
    width: 60%; 
  }

}

大屏优先策略下:

.content {
  // Properties for larger screens.
  float: left; 
  width: 60%; 

  // Properties for smaller screens. 
  // Note that we have to write two default properties to make the layout work
  @media (max-width: 800px) {
    float: none; 
    width: 100%; 
  }

}

看看,我们节省了2行代码,减少了点脑力消耗,想想,如果实在大项目中,这会有更大的益处吧。

移动端优先策略下,我们如何使用Max-width

当你想要将样式的应用目标限定在某一特定的视口宽度时,max-width就派上用场了,结合min-width的使用,还可以创造一个限定区间。

考虑一个缩略图展示页的布局:800px以下的视口宽度时,显示为3列,否则为4列

当这些缩略图之间没有间隙时,很简单:

.gallery__item {
  float: left; 
  width: 33.33%; 
  @media (min-width: 800px) {
    width: 25%; 
  }

}

实际情况下,通常是有间距的,情况就变的复杂了:

很容易想到如下的css:

.gallery__item {

  float: left; 
  width: 30.333%;
  margin-right 5%;
  margin-bottom: 5%;
  &:nth-child(3n) {
    margin-right: 0; 
  }

  @media (min-width: 800px) {
    width: 21.25%; // (100% - 15%) / 4
    &:nth-child (4n) {
      margin-right: 0; 
    }
  }

}

但是因为,我们设定了在每个第三项,margin-right为0,而当一行有4项时,应该是每个第四项为0,我们可以考虑通过重写的方式解决:

.gallery__item {
  // ...
  @media (min-width: 800px) {
    // ...
    &:nth-child (3n) {//恢复第三项的间距
      margin-right: 5%; 
    }
    &:nth-child(4n) {
      margin-right: 0%;
    }
  }

}

这个方式并不是太好,因为当我们需要在更大的屏幕上显示更多的项时,我们会遇到同样的问题。

考虑如下方式,把随视口变化的东西放到相应的查询语句中,默认样式只保留公共的部分,能减少重写带来的麻烦:

.gallery__item {
  float: left; 
  margin-right: 5%;
  margin-bottom: 5%;
  @media (max-width: 800px) {
    width: 30.333%;
    &:nth-child(3n) {
      margin-right: 0; 
    } 
  }

  @media (min-width: 800px) {
    width: 21.25%; // (100% - 15%) / 4
    &:nth-child (4n) {
      margin-right: 0; 
    }
  }

}


立即学习前端免费学习笔记(深入)”;


立即学习前端免费学习笔记(深入)”;

参考:  http://zellwk.com/blog/how-to-write-mobile-first-css/


立即学习前端免费学习笔记(深入)”;

HTML速学教程(入门课程)
HTML速学教程(入门课程)

HTML怎么学习?HTML怎么入门?HTML在哪学?HTML怎么学才快?不用担心,这里为大家提供了HTML速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号