前端总结系列

目录


一、移动端
1.1 视口(viewport)
1.2 媒体查询(media query)
1.3 相对字体大小(rem/em)
二、选择器
2.1 常用
2.2 关系
2.3 伪元素
2.4 伪类
2.5 优先级
三、样式重置(reset)
3.1 常用重置
3.2 重置插件(Normalize.css)
四、浏览器前缀
4.1 前缀由来
4.2 解决方案
五、兼容性
5.1 IE条件注释
5.2 IE hack
5.3 指定渲染模式
五、CSS库

一、移动端

移动端还没有上车。先来总结一下三个基本的移动端开发特性:视口(viewport)、媒体查询(@media)和相对字体大小。

1.1 视口(viewport)

加上视口之后,页面将会自动裁剪成适合移动页面的大小。


<meta name="viewport" content="width=device-width,initial-scale=1.0,user-scalable=no"> width=device-width // 把页面宽设置成设备一样
initial-scale=1.0 // 初始缩放为1.0
user-scalable=no // 不允许用户缩放(此处有坑,有时会无效)

1.2 媒体查询(media query)

以下只是对媒体查询使用的一个演示。实际中我们常用媒体查询来根据不同宽度的设备显示不同的布局。


/* HTML */ <div class="media">meida</div> /* CSS */ .media {
background-color: gray;
color: white;
}
@media screen and (max-width:1000px) {
.media {
background-color: red;
}
}
@media screen and (max-width:800px) {
.media {
background-color: orange;
}
}

1.3 相对字体大小(rem/em)

rem是相对于根字体的大小,em是相对于父级的字体大小。


/* HTML */ <div class="rem">rem</div> /* CSS */ /* 根字体在html而不是body中 */ html {
font-size: 60px; /* 修改根字体,对应div中的字体会改变 */
}
.rem {
font-size: 1.2rem;
}

二、选择器

2.1 常用

标签(tag)、id和类(class)都是常用的选择器。其中class最为常用。


// id在页面中是唯一的,class的属性可以有多个 <p id="mark" class="mark important">mark</p>
<p class="mark todo">have a lunch</p> p {color:red;} // 标签选择器
#mark {color:red;} // id选择器
.mark {color:red;} // 类选择器

2.2 关系

后代(parent child-child) 子代(parent>child) 兄弟(+) 相邻(~)。

兄弟选择器常用来制作,导航栏中间的一条边框线。


<ul>
<li class="brother"><a>one</a></li>
<li>two</li>
<li>three</li>
</ul> ul li {color:red;} // 后代选择器,one、two和three都变成红色
ul>li {color:red;} // 子代选择器,two和three变成红色
.brother+li {color:red;} // 兄弟选择器,two变成红色
.brother~li {color:red;} // 相邻选择器,two和three变成红色 中间线示例 li {
float: left;
list-style-type: none;
padding: 5px;
}
li+li {
border-left: 1px solid red;
}

2.3 伪元素

伪类有::before、::after、::selection、::first-line、::first-letter。

其中::before常用来制作三角形和登陆框左边的图标。更多请见kingkit


/* HTML */ <div class="triangle">triangle</div> /* CSS */ .triangle {
position: relative;
border: 1px solid red;
padding: 2px 4px;
width: 60px;
height: 20px;
margin-left: 10px;
border-radius: 10%; // 设置矩形圆角
}
.triangle::before,.triangle::after {
content: "";
position: absolute;
top: 7px;
left: -10px;
width: 0;
height: 0;
border-style: solid;
border-color: transparent red transparent transparent; // 右边框设置为红色
border-width: 5px 10px 5px 0; // 左边框设置为0
}
.triangle::after {
left: -9px;
border-right-color: white; // 设置三角形内容为白色
}
.triangle::selection {
color: red; // div内选中的部分会变成红色
}

2.4 伪类

LVHA(:link,:visited,:hover,:active)、:focus、lang、first-child(last-child,nth-child(n))


div:first-child {}
div:nth-child(5) {}
div:last-child {}

2.5 优先级

优先级最高的是设置了!important的元素,其次看元素的权重。权重相同时看谁离HTML更近(内嵌>内链>外链),近的优先级更高。

权重分配是attr:1000,id:100,class:10,tag:1。当有多种选择器组合的时候,他们的权重之和就是总权重。权重大的优先级高。


display: none!important; // 优先级最高,IE6不支持同一选择符中的!important
.parent > div {} // 权重计算 10+1=11

同级的按照就近原则(内嵌>内连>外链),越近优先级越高

优先级最高

三、样式重置(reset)

3.1 常用重置


* {box-sizing:border-box;} /* IE8+ */
body {margin:0;} /* 去除边距 */
ul {margin:0;padding-left:0;} /* 去除边距和左填充 */
li {list-style-type:none;} /* 去除列表的圆点 */
a {text-decoration:none;} /* 去除下划线 */

3.2 重置插件(Normalize.css,IE8+)

当然,你也可以不自己写重置样式,使用插件制动帮你完成。

四、浏览器前缀

想要使用未标准化的新特性,往往伴随着一大堆兼容前缀。各浏览器使用自己的私有前缀实现新功能,我门在写完了兼容属性之后,还要加上一条标准属性。等到属性标准化之后我们就不需要重新添加标准属性了。


div
{
transition: width 2s;
-moz-transition: width 2s; /* Firefox 4 */
-webkit-transition: width 2s; /* Safari 和 Chrome */
-o-transition: width 2s; /* Opera */
}

4.1 前缀由来

在实验性功能尚未标准化之前,浏览器厂商为了开发者能尽快的体验这些新特效。通过带前缀的CSS属性使得这些功能可以直接被使用。

待到标准化之后,则可以通过不带前缀的属性设置样式。但是对于没有更新浏览器的用户来说,样式依旧需要通过私有属性访问。

这样,你不得不写N条兼容代码。chrome(-webkit-)、firefox(-moz-)和opera(-o-)。safari和chrome一样,私有属性前缀也是-webkit-。

4.2 解决方案

这时,你需要的是一个Autoprefixer或者-prefix-free

五、兼容性

除了手写IE兼容性,你也可以直接使用IE9.js自动处理IE6-9的bug。另外,让IE6-9支持的支持圆角、背景渐变、边框图片、盒阴影、rgba等可视化的功能可以用CSS3PIE。让IE6-8支持媒体查询可以使用Respond.js。IE6-7支持CSS3 box-sizing可以使用borderBoxModel.js。IE6-8支持:first-child等高级CSS选择符,可以用selectivizr。让IE8及以下的浏览器支持H5新元素,可以用html5shiv.js

5.1 IE条件注释

这类代码只有IE会解析,其他浏览器会作为注释处理。更多请见天堂的旋转木马


<!--[if IE 6]>
<script type="text/javascript" scr="IE6.js"></script>
<![endif]--> if <条件> IE <版本>
条件:gt/gte/lt/lte/!(大于/大于等于/小于/小于等于/非)
版本:5.5/6/7/8 !IE 通常连在一起

5.2 IE hack

为针对不同IE浏览器进行样式修改,可以使用css hack。更多请见freshlover


指定版本:IE6(_),IE7(+),IE8(/),IE9(:root 9)
指定范围:IE6-7(*),IE8-10(\0),IE9-10(\9\0),IE All(\9) .hack{
_color:red; /* IE6 */
color:red\0; /* IE8-10 */
}
:root .hack{color:red\0;} /* IE9 */

5.3 指定渲染模式

你可以为IE指定渲染模式,当用户安装谷歌插件GCF之后,将会强制页面使用chrome模式渲染。更多请见脚本之家


<meta http-equiv="X-UA-Compatible" content="IE=7" /> // IE8-9使用IE7模式渲染
<meta http-equiv="X-UA-Compatible" content="IE=8" /> // IE8-9使用IE8模式渲染
<meta http-equiv="X-UA-Compatible" content="edge" /> // IE8-9使用IE最高版模式渲染
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> // 安装GCF之后,IE使用chrome模式渲染

五、CSS库

为了方便快速的再次实现需要的效果,把常用的功能封装起来。通过设置class的方式,使用封装好的css库。更多请见深度开源

CSS3悬浮效果(Hover.CSS)、提示(HINT.css)、进度(progress.js)、加载动画(css-loaders)、按钮(Buttons)、预处理(less,sass)、界面(Bootstrap)。

总结

这一节主要参考的书籍有:《CSS设计指南》和《CSS揭秘》。主要参考的网站和博客有梦之都脚本之家W3School深度开源kingkit天堂的旋转木马freshlover。另外还有一些平时的积累。

未来半个月的更新频率不能保证了,快与慢完全说不准。

前端总结·基础篇·CSS(三)补充的更多相关文章

  1. 前端总结·基础篇·CSS(一)布局

    目录 这是<前端总结·基础篇·CSS>系列的第一篇,主要总结一下布局的基础知识. 一.显示(display) 1.1 盒模型(box-model) 1.2 行内元素(inline) &am ...

  2. 前端总结·基础篇·CSS(二)视觉

    前端总结系列 前端总结·基础篇·CSS(一)布局 前端总结·基础篇·CSS(二)视觉 前端总结·基础篇·CSS(三)补充 前端总结·基础篇·CSS(四)兼容 目录 一.动画(animation)(IE ...

  3. 前端总结·基础篇·CSS

    前端总结·基础篇·CSS 1 常用重置+重置插件(Normalize.css,IE8+) * {box-sizing:border-box;}  /* IE8+ */body {margin:0;}  ...

  4. 前端总结·基础篇·JS(三)arguments、callee、call、apply、bind及函数封装和构造函数

    前端总结系列 前端总结·基础篇·CSS(一)布局 前端总结·基础篇·CSS(二)视觉 前端总结·基础篇·CSS(三)补充 前端总结·基础篇·JS(一)原型.原型链.构造函数和字符串(String) 前 ...

  5. 前端总结·基础篇·JS(一)五大数据类型之字符串(String)

    前端总结系列 前端总结·基础篇·CSS(一)布局 前端总结·基础篇·CSS(二)视觉 前端总结·基础篇·CSS(二)补充 前端总结·基础篇·JS(一)五大数据类型之字符串(String) 目录 这是& ...

  6. 前端总结·基础篇·JS(二)数组深拷贝、去重以及字符串反序和数组(Array)

    目录 这是<前端总结·基础篇·JS>系列的第二篇,主要总结一下JS数组的使用.技巧以及常用方法. 一.数组使用 1.1 定义数组 1.2 使用数组 1.3 类型检测 二.常用技巧 2.1 ...

  7. 前端总结·基础篇·JS(四)异步请求及跨域方案

    前端总结系列 前端总结·基础篇·CSS(一)布局 前端总结·基础篇·CSS(二)视觉 前端总结·基础篇·CSS(三)补充 前端总结·基础篇·JS(一)原型.原型链.构造函数和字符串(String) 前 ...

  8. 前端总结·基础篇·JS(一)原型、原型链、构造函数和字符串(String)

    前端总结系列 前端总结·基础篇·CSS(一)布局 前端总结·基础篇·CSS(二)视觉 前端总结·基础篇·CSS(三)补充 前端总结·基础篇·JS(一)原型.原型链.构造函数和字符串(String) 前 ...

  9. 小猪猪逆袭成博士之C++基础篇(三)字符串

    小猪猪逆袭成博士之C++基础篇(三)字符串 String 写在题外的话: 非常感谢在我发了第一篇随笔以后有很多人看还评论了,这大概就是一种笔记性质的,也不一定全对,如果不对的地方请指出来让我加以改正. ...

随机推荐

  1. [NOI2011]阿狸的打字机(好题!!!!)

    2785: [NOI2011]阿狸的打字机 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 7  Solved: 3[Submit][Status][We ...

  2. Jmeter 新手

    转载:http://www.cnblogs.com/TankXiao/p/4059378.html 什么是压力测试 顾名思义:压力测试,就是  被测试的系统,在一定的访问压力下,看程序运行是否稳定/服 ...

  3. Sublime Text 3 安装 Emmet 插件

    首先安装 Package Control 1.通过快捷键 ctrl+` 或者 View > Show Console 菜单打开控制台 2.粘贴以下代码后回车安装 import  urllib.r ...

  4. Android中关闭应用的三种方式

    当应用不再使用的时候,通常需要关闭应用,我们可以使用三种方式关闭android应用: 第一种方式:首先获取当前进程的id,然后杀死该进程(推荐) android.os.Process.killProc ...

  5. html 5 本地数据库(Web Sql Database)核心方法openDatabase、transaction、executeSql 详解

    Web SQL数据库API实际上不是HTML5规范的组成部分,而是单独的规范.它通过一套API来操纵客户端的数据库.Safari.Chrome. Firefox.Opera等主流浏览器都已经支持Web ...

  6. StackView的功能和用法

    StackView也是AdapterViewAnimator的子类,它也用于显示Adapter提供的系列View.SackView将会以“堆叠(Stack)”方式来显示多个列表项. 为了控制Stack ...

  7. 分布式环境中三种Session管理方法的使用场景及优缺点

    在分布式环境,管理Session通常使用下面三种方式: 一.Session Replication 方式管理 (即session复制)         简介:将一台机器上的Session数据广播复制到 ...

  8. c#异步和多线程有什么区别和联系?

    异步和多线程可以说没有必然的联系,只能说异步可以通过多线程实现而已要理解这些东西,你得具备很多相关的知识,操作系统原理,编译原理等简单地来说,计算机或者说CPU执行你的代码都是顺序执行的,当前的语句没 ...

  9. MyBatis 多个查询条件的传递

    <!-- 方法1,构建查询对象: QueryCondition qc = new QueryCondition(); qc.setGender(1); qc.setBirthday(new Da ...

  10. Android自定义控件系列(四)—底部菜单(下)

    转载请注明出处:http://www.cnblogs.com/landptf/p/6290862.html 在app中经常会用到底部菜单的控件,每次都需要写好多代码,今天我们用到了前几篇博客里的控件来 ...