목차
1.移动端开发视窗口的添加
2.媒体查询的改进
3.a标签内容语义化
4.为自己的页面设置最大宽度和最小宽度
5.去掉 a,input 在移动端浏览器中的默认样式
1.禁止 a 标签背景
2.禁止长按 a,img 标签长按出现菜单栏
3.流畅滚动
6.CSS 截断字符串
7.calc 相关问题
8.box-sizing 的使用
9.水平垂直居中的问题
10. css 中 line-height 的问题
11.使用 vertical-align 调整图标垂直居中
12.flex 弹性盒模型的使用
1.什么时候使用 flex 属性
2.添加厂商前缀
3.flex低版本浏览器的兼容
13.CSS3动画性能的问题
웹 프론트엔드 HTML 튜토리얼 移动端 h5开发相关内容总结--CSS篇_html/css_WEB-ITnose

移动端 h5开发相关内容总结--CSS篇_html/css_WEB-ITnose

Jun 21, 2016 am 08:58 AM

1.移动端开发视窗口的添加

h5端开发下面这段话是必须配置的

1

meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">

로그인 후 복사

其它相关配置内容如下:

  • width viewport 宽度(数值/device-width)
  • height viewport 高度(数值/device-height)
  • initial-scale 初始缩放比例
  • maximum-scale 最大缩放比例
  • minimum-scale 最小缩放比例
  • user-scalable 是否允许用户缩放(yes/no)
  • minimal-ui iOS 7.1 beta 2 中新增属性(注意:iOS8 中已经删除),可以在页面加载时最小化上下状态栏。

2.媒体查询的改进

之前在做移动端开发的时候,为了适配多屏幕。使用的是rem 单位。这个时候就需要根据屏幕的尺寸来来动态的设置根节点html 的font-size 值。这样可以解决多屏幕适配的问题。比如下面的 媒体查询代码

1

html {    //iphone5    font-size: 62.5%;}@media (max-width: 414px) {    html {        //iphone6+        font-size: 80.85%;    }}@media (max-width: 375px) {    html {        //iphone6        font-size: 73.24%;    }}

로그인 후 복사

这样做的结果,有两个很明显的缺点

  • 适配屏幕的尺寸不是连续的。
  • 在自己的 css 文件中添加大段的这样查询代码。增加了 css 文件的体积。

后来参考淘宝移动端页面适配规则,使用 js 获取客户端的宽度,根据设计稿的原型动态的计算font-size 的值。

详细的内容请看这里 根据iPhone6设计稿动态计算rem值

3.a标签内容语义化

大多数时候我们都会给一片区域加上点击跳转的功能。如下图:

很可能我们商品区域都是使用的div 标签。很容易我们会给最外层加上一个 a 标签。因为a 是行内元素,是没有宽和高的。不能够把容器撑开。一种解决办法就是给a 标签设置block 属性。如下:

1

<style>    a{display:block;}</style><a>    <div></div></a>

로그인 후 복사

功能上已经没有问题。但是在语义化的层面上,上面的代码是不标准的。

最好的做法就是做如下的修改,这样不会使自己的 html 代码显的太突兀:

1

<style> a{display:block;} span{dispaly:block;}</style><a>    <span></span>    <span></span>    <span></span></a>

로그인 후 복사

4.为自己的页面设置最大宽度和最小宽度

如果我们使用的是rem 单位,使用 js 动态计算font-size 值的话,我们可以无限适配最大和最小的终端屏幕。但是当用户的屏幕超过一定的尺寸以后还继续显示h5页面的话对用户会很不友好。我们参看下京东和淘宝的h5 页面

我们看到了都是定义了页面的最大和最小宽度。这样在屏幕超过一定的尺寸以后可以更友好的展示(当然这不是必须的)。

我给自己的产品页面定义的最大的宽度和最小宽度分别是:

1

{    max-width:640px;    min-width:320px;}

로그인 후 복사

5.去掉 a,input 在移动端浏览器中的默认样式

1.禁止 a 标签背景

在移动端使用 a标签做按钮的时候,点按会出现一个“暗色”的背景,去掉该背景的方法如下

1

a,button,input,optgroup,select,textarea {    -webkit-tap-highlight-color:rgba(0,0,0,0); /*去掉a、input和button点击时的蓝色外边框和灰色半透明背景*/}

로그인 후 복사

2.禁止长按 a,img 标签长按出现菜单栏

使用 a标签的时候,移动端长按会出现一个 菜单栏,这个时候禁止呼出菜单栏的方法如下:

1

a, img {    -webkit-touch-callout: none; /*禁止长按链接与图片弹出菜单*/}

로그인 후 복사

3.流畅滚动

1

body{    -webkit-overflow-scrolling:touch;}

로그인 후 복사

6.CSS 截断字符串

单行截断字符串,这里必须指定字符串的宽度

1

{    /*指定字符串的宽度*/    width:300px;       overflow: hidden;      /* 当字符串超过规定长度,显示省略符*/     text-overflow:ellipsis;      white-space: nowrap;   }

로그인 후 복사

7.calc 相关问题

之前在做布局的时候使用calc 出现了很严重的线上 BUG。后来就深究了下这个属性的使用。calc好用的地方就是,可以在任何单位之间进行换算。但是浏览器支持的不是很好。看一下 can i use 截图:

而且在使用的时候要加上厂商前缀,达到兼容性。不过现在不推荐使用,毕竟,浏览器支持有限。示例代码:

1

#formbox {  width:  130px;  /*加厂商前缀,操作符(+,-,*,/)两边要有空格)*/                 width:  -moz-calc(100% / 6);     width:  -webkit-calc(100% / 6);     width:  calc(100% / 6);     border: 1px solid black;  padding: 4px;}

로그인 후 복사

研究过淘宝,天猫,京东的 h5端页面看到这个单位用的不多,主要还是兼容性的问题吧。

8.box-sizing 的使用

解决盒模型在不同浏览器中表现不一致的问题。但是仍然会有兼容性问题。看最下面的浏览器支持列表。

box-sizing 属性用来改变默认的 CSS 盒模型 对元素高宽的计算方式。这个属性用于模拟那些非正确支持标准盒模型的浏览器的表现。

它有三个属性值分别是:

content-box 默认值,标准盒模型。 width 与 height 只包括内容的宽和高, 不包括边框,内边距,外边距。注意: 内边距, 边框 & 外边距 都在这个盒子的外部。 比如. 如果 .box {width: 350px}; 而且 {border: 10px solid black;} 那么在浏览器中的渲染的实际宽度将是370px;padding-box width 与 height 包括内边距,不包括边框与外边距。border-box width 与 height 包括内边距与边框,不包括外边距。这是IE 怪异模式(Quirks mode)使用的 盒模型 。注意:这个时候外边距和边框将会包括在盒子中。比如 .box {width: 350px; border: 10px solid black;} 浏览器渲染出的宽度将是350px.

浏览器支持:

9.水平垂直居中的问题

可以看之前写定位的一篇文章,末尾有讲到各种定位:【从0到1学Web前端】CSS定位问题三(相对定位,绝对定位)

这里实现一个相对定位和绝对定位配合实现水平垂直居中的样式。看效果:

html 代码如下:

1

<div class="parent-div">        <div class="child-div"></div> </div>

로그인 후 복사

css代码如下:

1

.parent-div{            width: 100px;            height: 100px;            background-color:red;            position:relative;        }        .child-div{            width:50px;            height:50px;            background-color:#000;            position: absolute;            margin:auto;            top:0;            left:0;            right:0;            bottom:0;        }

로그인 후 복사

绝对定位在布局中可以很方边的解决很多问题,但是大多数时候都不去使用绝对定位,而是使用浮动等方法。而当需要 DOM 元素脱离当前文档流的时候才使用绝对定位。如: 弹层,悬浮层等。

10. css 中 line-height 的问题

line-height 一个很重要的用途就是让我们的文本可以在父级元素中垂直居中,但是在使用它的过程中也会遇到一些问题。

先来看一个实例,如下图:

代码也很简单,就是当我们在div 中定义的字体很大的情况下,我们看到字体和父级元素之间有一些空隙。那么这是为什么?我们查一下 line-height 的定义,如下:

normal 默认。设置合理的行间距。number 设置数字,此数字会与当前的字体尺寸相乘来设置行间距。length 设置固定的行间距。% 基于当前字体尺寸的百分比行间距。inherit 规定应该从父元素继承 line-height 属性的值。

所以在以上的情况我们要想使,我们的字体能够撑满我们的容器,就需要给父级容器添加 line-height属性且值为 100%

代码和效果如下:

那么为什么会出现上面的问题呢?

line-height 与 font-size 的计算值之差(行距)分为两半,分别加到一个文本行内容的顶部和底部。

所以,可以得出下面的一个公式:

空白间距 = line-height – font-size

所以,当设置为line-height 的值为100%的时候,line-height的值就等于 font-size的尺寸,此时的空白间距为0

11.使用 vertical-align 调整图标垂直居中

很多时候我们要把图标和文字配合使用,而且需要图标和文字都能够垂直居中。如下图所示:

如果要实现文字的垂直居中很容易,只需要使用line-height=父容器高度 。但是要想使图标能够垂直居中就比较麻烦。正常情况下我们的文字或者说相邻的容器,都应该和文字保持在相同的底线上,如下图:

明显的可以看到我们的返回图标不是垂直居中的。那么应该怎么样使图标垂直居中呢?

首先,我们先来搞清楚几个线的关系(图片来源于网络,侵权请告知):

这样我们就要用到 vertical-align 这个属性,最重要的一点是:指定了行内(inline)元素或表格单元格(table-cell)元素的垂直对齐方式

baseline:将支持valign特性的对象的内容与父级元素基线对齐sub:元素基线与父元素的下标基线对齐。super:元素基线与父元素的上标基线对齐。top: 元素及其后代的顶端与整行的顶端对齐。text-top:元素顶端与父元素字体的顶端对齐。middle:元素中线与父元素的基线对齐。bottom:元素及其后代的底端与整行的底端对齐。text-bottom:元素底端与父元素字体的底端对齐。percentage:用百分比指定由基线算起的偏移量。可以为负值。基线对于百分数来说就是0%。length:用长度值指定由基线算起的偏移量。可以为负值。基线对于数值来说为0。(CSS2)

看下边的一段 html :

1

<div class="title-div">        <img src="/static/imghw/default1.png"  data-src="1_icon.png"  class="lazy" alt="返回图标">        <!-- <span >图标位置</span> -->        <span>我就是标题</span></div>

로그인 후 복사

最初的结果是这样子的

我们想实现如下图所示的结果,图标相对于右边的字体居中:

这个时候我们就要使用vertical-align属性和设置他的length属性,即设置我们的图标相对与文字基线的偏移量。当我们加入属性的时候很容易使图标和文字都垂直居中。

1

{    vertical-align:15px;}

로그인 후 복사

这个时候就会是我们的图标和字体相对于父级元素居中。

12.flex 弹性盒模型的使用

flex 现在 pc 端支持的不好(主要是因为还有很多 IE8,9的用户存在。)大多情况下我们都是在移动端使用flex布局。但是就算是这样,也会有很多坑人的 bug出现。谈谈一些基本的使用经验吧,什么时候使用 flex 。

1.什么时候使用 flex 属性

先来看一个产品模型如下图

我的左边商品和右边商品的宽度是一样的。当我看到这个模型的时候,第一件就是想就是使用 flex 让我们两列商品列表平分屏幕区域。这个时候就是用flex 来做。父级元素如下定义

1

{       margin-bottom: .5rem;    display: box;    display: -webkit-box;    display: -ms-flexbox;    display: flex;    display: -webkit-flex;    -webkit-flex-flow: row;    -ms-flex-flow: row;    flex-flow: row;}

로그인 후 복사

2.添加厂商前缀

使用 flex 的时候一定要记得加厂商前缀(目前使用方式都有三种写法:1,旧的2,过度的3,新的)。不然肯定会有兼容性问题。

1

{    display: -webkit-box;    display: -ms-flexbox;    display: flex;    display: -webkit-flex; }

로그인 후 복사

3.flex低版本浏览器的兼容

先看我的代码:

1

{    box-flex: 1;    -webkit-box-flex: 1;    -webkit-flex: 1;    -ms-flex: 1;    flex: 1;    width: 18.5rem;}

로그인 후 복사

这里只是让左右两边平分屏幕的宽度。之前使用 flex在安卓4.3的手机上遇到一个问题。正常的页面应该如下图所示,

但是在 安卓4.3的手机上却是如下的结果

后来研究了下天猫的页面(因为之前使用这个 flex 就是参考天猫来学习的),看到他们在定义flex值的时候 都会有这样的一个属性width=0;

而且当我给我的页面也加上这个属性的时候,页面的布局也变得正常了。我现在想不明白愿意是什么,只能当一个 hack 来使用。如果大家也遇到这个问题,请试一下添加这个属性。如果大家知道为什么这么用,请指教一下。

13.CSS3动画性能的问题

给大家推荐一个网站(点击这里)可以检测我们平时使用的 css 属性改变元素样式的时候,触发的是 cpu还是 gpu ,特别是在做动画的时候,如果使用 gpu 渲染图形,可以减少 cpu 的消耗,提高程序的性能。

比如我们做一个 slider 动画切换图片位置的时候,会使用margin-left的属性,通过网站查询该属性值得到如下的结果

由上可以知道使用margin-left 的时候会处罚页面的重绘和重排。

但是当我们使用css3新属性transform 来代替传统的 margin-left 来改变元素位置的时候对页面有什么影响呢?先来看下网站查询的结果:

由查询结果可以知道,使用transform 不会触发任何的重绘。而且会触发 gpu 来帮助页面的排版。即使用GPU操作渲染动画,减少cpu的消耗,提高性能。

css动画简单实例,css代码如下:

1

.lottery-animation {    -webkit-animation: lottery-red 2s;    animation: lottery-red 2s;    -webkit-animation-iteration-count: infinite;    animation-iteration-count: infinite;}@-webkit-keyframes lottery-red {    from {        -webkit-transform: rotateY(0deg);        transform: rotateY(0deg);    }    to {        -webkit-transform: rotateY(360deg);        transform: rotateY(360deg);    }}@keyframes lottery-red {    from {        -webkit-transform: rotateY(0deg);        transform: rotateY(0deg);    }    to {        -webkit-transform: rotateY(360deg);        transform: rotateY(360deg);    }}

로그인 후 복사

效果如下图:

这里我只是对图像标签添加了一个 class="lottery-animation"

我截取动态图片软件的问题,我的这个gif 截图动画有些卡顿,不流畅。在正常机器上是没有问题的(如果大家有mac下好用的 gif截图软件可以推荐给我,谢谢!)。

关于 css3 动画性能优化推荐阅读文章:1.前端性能优化之更平滑的动画(更新)2.CSS3硬件加速也有坑!!!


如果您觉得不错,请访问 github(点我) 地址给我一颗星。谢谢啦!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

HTML은 초보자를 위해 쉽게 배우나요? HTML은 초보자를 위해 쉽게 배우나요? Apr 07, 2025 am 12:11 AM

HTML은 간단하고 배우기 쉽고 결과를 빠르게 볼 수 있기 때문에 초보자에게 적합합니다. 1) HTML의 학습 곡선은 매끄럽고 시작하기 쉽습니다. 2) 기본 태그를 마스터하여 웹 페이지를 만들기 시작하십시오. 3) 유연성이 높고 CSS 및 JavaScript와 함께 사용할 수 있습니다. 4) 풍부한 학습 리소스와 현대 도구는 학습 과정을 지원합니다.

HTML, CSS 및 JavaScript의 역할 : 핵심 책임 HTML, CSS 및 JavaScript의 역할 : 핵심 책임 Apr 08, 2025 pm 07:05 PM

HTML은 웹 구조를 정의하고 CSS는 스타일과 레이아웃을 담당하며 JavaScript는 동적 상호 작용을 제공합니다. 세 사람은 웹 개발에서 의무를 수행하고 화려한 웹 사이트를 공동으로 구축합니다.

HTML, CSS 및 JavaScript 이해 : 초보자 안내서 HTML, CSS 및 JavaScript 이해 : 초보자 안내서 Apr 12, 2025 am 12:02 AM

WebDevelopmentReliesonHtml, CSS 및 JavaScript : 1) HtmlStructuresContent, 2) CSSSTYLESIT, 및 3) JAVASCRIPTADDSINGINTERACTIVITY, BASISOFMODERNWEBEXPERIENCES를 형성합니다.

HTML의 시작 태그의 예는 무엇입니까? HTML의 시작 태그의 예는 무엇입니까? Apr 06, 2025 am 12:04 AM

anexampleStartingtaginhtmlis, whithbeginsaparagraph.startingtagsareessentialinhtmlastheyinitiate rements, definetheirtypes, andarecrucialforstructurituringwebpages 및 smanstlingthedom.

Gitee Pages 정적 웹 사이트 배포 실패 : 단일 파일 문제를 해결하고 해결하는 방법 404 오류? Gitee Pages 정적 웹 사이트 배포 실패 : 단일 파일 문제를 해결하고 해결하는 방법 404 오류? Apr 04, 2025 pm 11:54 PM

GiteEpages 정적 웹 사이트 배포 실패 : 404 오류 문제 해결 및 해결시 Gitee ...

CSS3 및 JavaScript를 사용하여 클릭 후 주변 사진을 흩어지고 확대하는 효과를 얻는 방법은 무엇입니까? CSS3 및 JavaScript를 사용하여 클릭 후 주변 사진을 흩어지고 확대하는 효과를 얻는 방법은 무엇입니까? Apr 05, 2025 am 06:15 AM

이미지를 클릭 한 후 주변 이미지를 산란 및 확대하는 효과를 얻으려면 많은 웹 디자인이 대화식 효과를 달성해야합니다. 특정 이미지를 클릭하여 주변을 만들 수 있습니다 ...

웹 주석에서 y 축 위치의 적응 형 레이아웃을 구현하는 방법은 무엇입니까? 웹 주석에서 y 축 위치의 적응 형 레이아웃을 구현하는 방법은 무엇입니까? Apr 04, 2025 pm 11:30 PM

웹 주석 기능에 대한 Y 축 위치 적응 알고리즘이 기사는 Word 문서와 유사한 주석 기능을 구현하는 방법, 특히 주석 간격을 다루는 방법을 모색합니다 ...

HTML, CSS 및 JavaScript : 웹 개발자를위한 필수 도구 HTML, CSS 및 JavaScript : 웹 개발자를위한 필수 도구 Apr 09, 2025 am 12:12 AM

HTML, CSS 및 JavaScript는 웹 개발의 세 가지 기둥입니다. 1. HTML은 웹 페이지 구조를 정의하고 등과 같은 태그를 사용합니다. 2. CSS는 색상, 글꼴 크기 등과 같은 선택기 및 속성을 사용하여 웹 페이지 스타일을 제어합니다.

See all articles