黑马移动端


[toc]

移动端基础

视口

二倍图

开发尺寸显示在开发者工具中,我们开发网页根据这个就好了

开发尺寸 * 物理像素比 = 分辨率 所以一个px可能由多个(dpr)物理像素组成


图片缩放使用的属性

cutterman插件可以直接切出多倍图

开发选择

单独设计和响应式

肯定更喜欢单独。。。

技术解决方案

重温一下。。。。。。。

传统的叫做box-sizing : content-box;

还有一些以后可以积累!!!

常见布局

所以需要提前了解想去的公司采用怎样的方案。。。

pink老师会依次介绍哟!(^U^)ノ~YO

流式布局

流式布局主要看的是宽度,高度不管。。。高度好像都是px

但是拉伸的时候也会影响到内部内容,所以必须加以限制!

可以用max/min - width/height 来辅助实现


京东案例

懒得做了。。。记笔记吧

准备

方案:单独制作页面

技术选型:流式布局

文件布局: css images upload js index.html

准备:设置视口标签,引入css移动端初始化,引入自己的css文件。。。


body

因为竖直下来每个盒子基本都是百分百宽度

**所以可以直接给body一个宽度100%**,而子盒子都能继承

但是一味地放大缩小会拉伸的很丑!所以指定宽度限制!然后居中对齐

顶栏展示

京东做法

但是高度设置的是固定的45px,这个应该是总结和调试出来的

用一个ul代表这一长条,里面有4个小li,好像特别喜欢用列表

不过这样确实满足“语义化” 这是个顶栏列表,里面包含了若干元素

他那个小叉和图片竟然是固定尺寸的!记得verticle-align : center;

然后这个不用a,到时候用js来做跳转特效就好了。。。果然结构和功能也要分离


宽度改变时,中间变短,俩边不变的效果

直接先做好两边的,用绝对定位和固定尺寸分别固定到这个长条盒子的两侧

然后中间放的是没有宽度(使其铺满)的标准流,然后指定左右margin,略大于两侧盒子的宽度即可

然后使其居中,通过加上边距,但这样会导致外边距合并,加overflow:hidden解决


ps:在div里面有子元素div1时,若父元素div在没有设置overflow:hidden或者是border属性,则父元素div的margin-top的值为父元素div和子元素div1中的margin-top的最大值。


列表栏和登陆栏写法:


search栏

子元素均采用定位效果实现

京东图标后面的小竖线:

记得after和before是作为子元素,所以这里加个position:absolute定位

再调定位到合适的位置呗


应该用一个盒子包起来,然后设置fixed属性!不过记得同样设置宽度的限制范围哦


小放大镜是二倍精灵图

错误做法:亮出精灵图相应图标的位置,直接用那个位置,然后缩放

这样是错误的,因为缩放是对整个图片进行缩放的,所以坐标也会发生变化

应该把坐标换为原来的n分之一,然后把图片缩放,background-size:


主体内容部分是导航栏以下的所有内容的一个大盒子

包含了焦点图和商品啊,分类啊巴拉巴拉的

这些展示图,更新频率高的,记得放在upload文件夹里而不是images里面哟

竟然是三张图片分别放在3个盒子。。。。我以为背景一张图片,三个透明盒子。。。


ps:可以改成bottom/top/middle来改掉图片和边框间的空白缝隙,或者改成块元素

在设置图片边框样式中,图片或者表单等行内元素,这样会造成一个问题,就是图片底侧以及图片与图片之间会有一个空白缝隙。原因是行内元素之间的回车符系统默认为一个空格,占据了一定宽度。

在这里插入图片描述


导航栏

超链接里面放了一个图片和一个文字描述罢了。。复制20次

还有一些字体要用rem处理等巴拉巴拉。。

Flex布局


布局原理

pink说flex布局比浮动布局好

因为flex有与浮动类似的性质,而且更好,所以float clear失效

因为flex自带垂直居中的方法,所以vertical-align熟悉失效


*父级属性

display:flex


flex-direction

默认主轴是x轴(row)


justify-content

注意space-around是每个盒子的两边的外边距都一样


flex-wrap

默认会自动缩小元素在排列方向的长度(水平则缩小宽度)


align-items

stretch会拉到和父亲一个尺寸,当然隔着一个margin,如果设置了相应方向的尺寸,则失效


align-content

为啥要搞出俩属性。。。


flex-flow

还有一些其他的属性,以后得补补


子项属性


flex

默认是0,分配剩余空间,所以不加宽度再设为1就可以占满剩下的所有

卧槽牛逼啊,横的竖的组合起来不是无敌了!顶多加个啥边距

无敌何须多言???!!!


align-self属性不适用于块类型的盒模型和表格单元。如果任何 flexbox 元素的侧轴方向 margin 值设置为 auto,则会忽略 align-self

这货的属性蛮多的。。不知道有啥用


order

挺不错的欸,这个order

携程网案例

仍然懒得做。。记笔记吧

初始化

overflow-x:hidden 不出现水平滚动条

还是技术选型。。。flex,好无聊,高度还是定死的,巧用flex一下就完了

固定在上方的导航栏

要兼容的话,在transform前加上一句-webkit-transform : translateX(-50%);

里面一个搜索框一个头像,给头像(右)加个宽度,搜索框不加宽度,用flex:1,tql吧!!

这边突然有个坑,CSS3模型,如果有边框,那么行高=高来垂直居中会偏下,必须行高=内容区域


图+文字结构

上面一个span背景设成2倍精灵图,下面一个span里面写字,然后整个放进a里面

flex-direction: column

align-items : center


渐变

好像支持不太好,注意格式哟


subnav

卧槽,flex的指可以是百分比,按照父亲的给

虽然flex为主,但是也可以搭配其他的做


这边用了传统布局,h2标签是为了SEO优化。。。

传统布局有时候一些盒子最好不用设置宽度,而是用内容+padding挤开,比如:

rem适配布局

非常重要!


媒体查询

screen….


tips:

如果判断最小值,应该从小到大写(pink推荐。。),如果判断最大值,应该从大到小写

min-width 和 max-width 是自带等于号的!and两边要留下空格。数字后必须跟单位

媒体查询并没有增加权重,所以如果特殊的是媒体查询的,要放在后面覆盖

@media screen and (min-width:540px) and (max-width:969px) 在540和970分界


引入资源

适配方案

方案1

但是注意页面元素的px值和页面一开始设置的px值是统一标准下的(美工图里的标准👇)


苏宁案例

别忘了写最常见的(默认大小,兜底):

这是引入样式的另一种思路,但其实都差不多感觉


body

因为没有手机是小于320px的,宽度直接设为你分的份数就好了

而在750px宽的设计图下,html大小可以直接给个变量50就好了


导航栏基本一样。。。再强调一下居中不是auto,fiex下要用left和transform

虽然这里主体是用rem,但是哪个好用用哪个,不要局限死,这里明显flex好用嘛

对于字体大小,美工一般会给可以直接看出大小的效果图。

不过这个搜索框的格式很怪

图片最好是给装图片的框设置大小和方位巴拉巴拉

然后图片长宽 100%


苏宁的导航栏不是用flex

是一堆a,(竟然没用ul和li)每个a里放一张图片和一个span

全都用rem来写,5个a的宽度刚好是一行的宽度


方案2

我就说嘛。那么高的精度,不管分几份好像都没关系

初始化css叫normalize.css

cssrem修改默认html尺寸,按照设计图的样式来。

flexible默认全屏。若要限制最大宽度


@media screen and (min-width: 750px){
    html{
        font-size : 75px !important;
    }
}

rem + flexible + less 用的挺好的,再配上cssrem插件

flexible.js划分是按全屏幕的10等份,在移动端需要更改一下

响应式布局

一个网站,所有设备!!!

基础

常见划分尺寸👇,并不是绝对!原来屏幕竟然是定死的!

尺寸稍小是因为两侧流出空白比装不下好看

调整cssrem,在插件的设置栏可以调整默认一html单位的大小


条件注释

由于浏览器版本的不同,对CSS里某些元素的解释也不一样,针对浏览器版本不同而选择不同CSS的代码,
其实我们还可以利用条件注释的方法来达到类似的目的,什么是条件注释,在此简单介绍一下,无非就是一些if判断啦,呵呵,但这些判断不是在脚本里执行的,而是直接在html代码里执行的,下面来介绍一下使用方法吧。

<!--[if XXX]>
这里是正常的html代码
<![endif]–>
这里XXX是一些特定的东东,在此列表几个出来,详细介绍各自的含义:
<!–[if IE]> / 如果浏览器是IE /
<!–[if IE 5]> / 如果浏览器是IE 5 的版本 /
<!–[if IE 6]> / 如果浏览器是IE 6 的版本 /
<!–[if IE 7]> / 如果浏览器是IE 7 的版本 /


上面是几个常用的判断IE浏览器版本的语法,下面再来介绍一下相对比较少用的逻辑判断的参数:
有几个参数:lte,lt,gte,gt及!
各自的详细解释如下:
lte:就是Less than or equal to的简写,也就是小于或等于的意思。
lt :就是Less than的简写,也就是小于的意思。
gte:就是Greater than or equal to的简写,也就是大于或等于的意思。
gt :就是Greater than的简写,也就是大于的意思。

例句:

<!--[if gt IE 5.5]> / 如果IE版本大于5.5 /
<!–[if lte IE 6]> / 如果IE版本小于等于6 /
<!–[if !IE]> / 如果浏览器不是IE /

BootStrap

3.xx偏向于移动端和响应式哟!!


在中文文档找到“基础模板”,然后复制,但是基本和vscode一样,多了一个条件注释复制过来

然后引入css样式文件(内置了normalize.css)。。主要通过类来控制,默认border-box


得了解深一些才能自由diy


不用自己再手动写了。。。这到底是好是坏


栅格系统

与rem布局很相似,不过rem是划分屏幕,栅格是划分页面内容(container)

想要更好的使用,得了解这些封装的实质,比如分成12份最终是由百分比实现的

可以多用开发者工具查看网站的最终源码,多去查查文档

卧槽。container可以有很多个,可以单独适用于某些行,挺棒的


行数

行应始终位于容器中。

该行为列提供了一个居住的地方,理想情况下,列的总数为12。它还可以作为包装器使用,因为所有列都向左浮动,当浮动变得怪异时,其他行不会重叠。

行的每边也有15px的负边距。组成该行的div通常会被限制在容器的填充内部,而不是粉红色区域的边缘,但不能超出。15px的负边距将行压到容器顶部15px的填充上方,从而使行基本无效。此外,行确保您其中的所有div都显示在自己的行上,与上一行和下一行分开。


列现在具有15px的填充。这种填充意味着列实际上接触行的边缘,由于行具有负边距,而容器具有正的填充,列本身就接触容器的边缘。但是,列上的填充将列内的任何内容推入所需的位置,并且在列之间提供了30px的装订线。切勿在行外使用列,否则将无法使用。


如果份数相加小于12:

占不满整个屏幕,默认左对齐

如果分数相加大于12:

装不开的那些,超出的整体另起一行

通过给同一个盒子添加不同情况下的自定义类名来决定。卧槽,我悟了!


列嵌套

跟flex一样开始套起来了

不要加margin值,因为分列他最后是变成百分比的宽度

这个的边距是一开始栅格划分4个大盒子,每个大盒子里面嵌套一个小盒子搞的(又有默认15px内边距)。






阿里百秀

宏观布局

一个大container装下三大列

然后放缩屏幕观察变化

这个策略很重要!


这个时候有个小问题,美工给的设计图是1280px,但默认最大宽度是1170px

所以就手动修改一下下

有时候需要去掉padding,记得权重,而小心margin带来的影响

字体图标组件,在boostrap选对应的类名加上去,实质是一个before元素

高度不需要太在意,因为不同大小直接换布局,高度是定死的???

所以在响应式布局中,也有一些其实是不变的,或者说比起那种rem,它不变的地方很多

每个小的container都得分析四种或更多情况下的新布局哟

久违的清除浮动,可以直接加类 “ clearfix “来实现

卧槽,需要怎样的样式直接去中文文档里的排版里面查,它设定好了许多最通用的样式

然后如果需要改变一些文字样式,可以直接去辅助类 ->上下文选择,,

然后他这些模块不是写死的,比如按钮的类可以加到span上,也有类似的外观


完成了大屏幕的制作,现在针对小屏幕情况修饰一下

根据实际情况选择不同的处理方式,比如有个大图片,不要让它设置成宽度100%,而是设置居中

再小一点的时候就不合适,可以把图片隐藏,换成一个新元素(放了文字的盒子(平时隐藏,小显示))

有两个贼方便的属性:visible-x和hidden-x


大屏幕竖直排列,小屏幕水平排列,很简单!别忘了媒体条件

然后在其中再加上修饰,比如文字变小啊,

小小的修饰一下背景颜色嘿嘿

我们看样式的时候要切换到手机的尺寸检查,不然在pc端随意拖动宽度效果可能有些不一样

小屏幕时把内边距记得也改小一点,不像👆

总结!

感觉rem为主,配合flex确实很好,flex毕竟太规整了些,也可能是我现在接触不多

再见!55个小时,刚好2周学完,谢谢pink老师,带我入了前端的门!

Less基础

怎么风评less 没有 sass好。。。



概览

Less (Leaner Style Sheets 的缩写) 是一门向后兼容的 CSS 扩展语言。这里呈现的是 Less 的官方文档(中文版),包含了 Less 语言以及利用 JavaScript 开发的用于将 Less 样式转换成 CSS 样式的 Less.js 工具。

因为 Less 和 CSS 非常像,因此很容易学习。而且 Less 仅对 CSS 语言增加了少许方便的扩展,这就是 Less 如此易学的原因之一。

  • 有关 Less 语言特性的详细文档,请参阅 Less 语言特性 章节
  • 有关 Less 内置函数的列表,请参阅 Less 函数手册 章节
  • 有关详细的使用说明,请参阅 Less.js 用法 章节
  • 有关第三方工具的详细信息,请参阅 工具 章节

Less 到底为 CSS 添加了什么功能?以下就是这些新加功能的概览。

变量

无需多说,看代码一目了然:

@width: 10px;
@height: @width + 10px;

#header {
  width: @width;
  height: @height;
}

编译为:

#header {
  width: 10px;
  height: 20px;
}

了解关于变量的更多信息

混合

混合(Mixin)是一种将一组属性从一个规则集包含(或混入)到另一个规则集的方法。假设我们定义了一个类(class)如下:

.bordered {
  border-top: dotted 1px black;
  border-bottom: solid 2px black;
}

如果我们希望在其它规则集中使用这些属性呢?没问题,我们只需像下面这样输入所需属性的类(class)名称即可,如下所示:

#menu a {
  color: #111;
  .bordered();
}

.post a {
  color: red;
  .bordered();
}

.bordered 类所包含的属性就将同时出现在 #menu a.post a 中了。(注意,你也可以使用 #ids 作为 mixin 使用。)

了解关于混合(Mixin)的更多信息

嵌套

Less 提供了使用嵌套(nesting)代替层叠或与层叠结合使用的能力。假设我们有以下 CSS 代码:

#header {
  color: black;
}
#header .navigation {
  font-size: 12px;
}
#header .logo {
  width: 300px;
}

用 Less 语言我们可以这样书写代码:

#header {
  color: black;
  .navigation {
    font-size: 12px;
  }
  .logo {
    width: 300px;
  }
}

用 Less 书写的代码更加简洁,并且模仿了 HTML 的组织结构。

你还可以使用此方法将伪选择器(pseudo-selectors)与混合(mixins)一同使用。下面是一个经典的 clearfix 技巧,重写为一个混合(mixin) (& 表示当前选择器的父级)(伪元素也要这样):

.clearfix {
  display: block;
  zoom: 1;

  &:after {
    content: "";
    display: block;
    font-size: 0;
    height: 0;
    clear: both;
    visibility: hidden;
  }
}

了解有关夫选择器的详细信息

@规则嵌套和冒泡

@ 规则(例如 @media@supports)可以与选择器以相同的方式进行嵌套。@ 规则会被放在前面,同一规则集中的其它元素的相对顺序保持不变。这叫做冒泡(bubbling)。

.component {
  width: 300px;
  @media (min-width: 768px) {
    width: 600px;
    @media  (min-resolution: 192dpi) {
      background-image: url(/img/retina2x.png);
    }
  }
  @media (min-width: 1280px) {
    width: 800px;
  }
}

编译为:

.component {
  width: 300px;
}
@media (min-width: 768px) {
  .component {
    width: 600px;
  }
}
@media (min-width: 768px) and (min-resolution: 192dpi) {
  .component {
    background-image: url(/img/retina2x.png);
  }
}
@media (min-width: 1280px) {
  .component {
    width: 800px;
  }
}

运算

算术运算符 +-*/ 可以对任何数字、颜色或变量进行运算。如果可能的话,算术运算符在加、减或比较之前会进行单位换算计算的结果以最左侧操作数的单位类型为准。如果单位换算无效或失去意义,则忽略单位结果以第一个单位为准。若只有一个单位,以该单位为准无效的单位换算例如:px 到 cm 或 rad 到 % 的转换。

// 所有操作数被转换成相同的单位
@conversion-1: 5cm + 10mm; // 结果是 6cm
@conversion-2: 2 - 3cm - 5mm; // 结果是 -1.5cm

// conversion is impossible
@incompatible-units: 2 + 5px - 3cm; // 结果是 4px

// example with variables
@base: 5%;
@filler: @base * 2; // 结果是 10%
@other: @base + @filler; // 结果是 15%

乘法和除法不作转换。因为这两种运算在大多数情况下都没有意义,一个长度乘以一个长度就得到一个区域,而 CSS 是不支持指定区域的。Less 将按数字的原样进行操作,并将为计算结果指定明确的单位类型。

@base: 2cm * 3mm; // 结果是 6cm

你还可以对颜色进行算术运算:

@color: #224488 / 2; //结果是 #112244
background-color: #112244 + #111; // 结果是 #223355

运算符两侧尽量有空格,除法必须用括号括起来!!!!

不过,Less 提供的 色彩函数 更有使用价值。

calc() 特例

Released v3.0.0

为了与 CSS 保持兼容,**calc() 并不对数学表达式进行计算**,但是在嵌套函数中会计算变量和数学公式的值。

@var: 50vh/2;
width: calc(50% + (@var - 20px));  // 结果是 calc(50% + (25vh - 20px))

转义

转义(Escaping)允许你使用任意字符串作为属性或变量值。任何 ~"anything"~'anything' 形式的内容都将按原样输出,除非 interpolation

@min768: ~"(min-width: 768px)";
.element {
  @media @min768 {
    font-size: 1.2rem;
  }
}

编译为:

@media (min-width: 768px) {
  .element {
    font-size: 1.2rem;
  }
}

注意,从 Less 3.5 开始,可以简写为:

@min768: (min-width: 768px);
.element {
  @media @min768 {
    font-size: 1.2rem;
  }
}

在 Less 3.5+ 版本中,许多以前需要“引号转义”的情况就不再需要了。

函数

Less 内置了多种函数用于转换颜色、处理字符串、算术运算等。这些函数在Less 函数手册中有详细介绍。

函数的用法非常简单。下面这个例子将介绍如何利用 percentage 函数将 0.5 转换为 50%,将颜色饱和度增加 5%,以及颜色亮度降低 25% 并且色相值增加 8 等用法:

@base: #f04615;
@width: 0.5;

.class {
  width: percentage(@width); // returns `50%`
  color: saturate(@base, 5%);
  background-color: spin(lighten(@base, 25%), 8);
}

参见:函数手册

命名空间和访问符

(不要和 CSS @namespacenamespace selectors 混淆了)。

有时,出于组织结构或仅仅是为了提供一些封装的目的,你希望对混合(mixins)进行分组。你可以用 Less 更直观地实现这一需求。假设你希望将一些混合(mixins)和变量置于 #bundle 之下,为了以后方便重用或分发:

#bundle() {
  .button {
    display: block;
    border: 1px solid black;
    background-color: grey;
    &:hover {
      background-color: white;
    }
  }
  .tab { ... }
  .citation { ... }
}

现在,如果我们希望把 .button 类混合到 #header a 中,我们可以这样做:

#header a {
  color: orange;
  #bundle.button();  // 还可以书写为 #bundle > .button 形式
}

注意:如果不希望它们出现在输出的 CSS 中,例如 #bundle .tab,请将 () 附加到命名空间(例如 #bundle())后面。

映射

从 Less 3.5 版本开始,你还可以将混合(mixins)和规则集(rulesets)作为一组值的映射(map)使用。

#colors() {
  primary: blue;
  secondary: green;
}

.button {
  color: #colors[primary];
  border: 1px solid #colors[secondary];
}

输出符合预期:

.button {
  color: blue;
  border: 1px solid green;
}

参见: 映射(Maps)

作用域

Less 中的作用域(scope)与 CSS 中的作用域非常类似。首先在本地查找变量和混合(mixins),如果找不到,则从“父”级作用域继承。

@var: red;

#page {
  @var: white;
  #header {
    color: @var; // white
  }
}

与 CSS 自定义属性一样,混合(mixin)和变量的定义不必在引用之前事先定义。因此,下面的 Less 代码示例和上面的代码示例是相同的:

@var: red;

#page {
  #header {
    color: @var; // white
  }
  @var: white;
}

参见:懒加载

注释

块注释和行注释都可以使用:

/* 一个块注释
 * style comment! */
@var: red;

// 这一行被注释掉了!
@var: white;

导入

“导入”的工作方式和你预期的一样。你可以导入一个 .less 文件,此文件中的所有变量就可以全部使用了。如果导入的文件是 .less 扩展名,则可以将扩展名省略掉

@import "library"; // library.less
@import "typo.css";

了解更多关于导入(Importing)的知识

这里有个巨坑,如果用了导入,要连续保存才能显示

进阶指南

补充

蓝湖/慕客

蓝湖10人免费,慕客100人免费,直接注册账号,下载就自动装好了

卧槽,可以选择图层然后上传,选的图层会单独保留以供下载

可以直接查看一堆参数甚至代码,图片直接下好1,2,3倍,无敌啊

美工会分享项目给开发者


Swiper神器

很有必要好好学一学

直接下载,最新那个,现在到6了(2021.4)解压解压

package -> js/css 复制引入swiper.min.js 和 swiper.min.css

在swiper演示的那里选一个大概样式差不多的,后面可以自己调整

进去后右键查看网页源代码嘿嘿,然后引入需要的文件

把HTML代码插入到需要的位置,再把CSS代码放到合适的位置,接下来开始定制!

为了避免多个轮播图冲突,放在立即执行函数中

然后去查看API,描述了各组件的功能,少了东西可以去别的实例里面弄过来,(比如箭头啥的)这封装的挺好啊

然后去他的css或者html代码里面调那些东西。

我们可以通过查看API来选择我们需要的组件添加,也可以更改一下提供的css样式,毕竟他提供的子项都是盒子,但js逻辑是封装好的,只留下了几个API供调整

记得调一下swiperprivew,调一下显示的个数。。查手册yyds


实例

多轮播图冲突

给上面html的container换类名或者加新的类名

然后给对应的js改类名

提交网站到github

首先建立与远程的链接

然后建立page。。。没了

或者直接用readme.md初始化,然后把文件拽进来。。。


文章作者: Darren
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Darren !
评论
  目录