目录css
如今的互联网前端分为三层:html
HTML: 超文本标记语言. 从语义的角度描述页面结构.前端
JS: JavaScript. 从交互的角度描述页面行为.web
好比说,有一个样式须要在100个页面上显示,若是是html来实现,那要写100遍,如今有了CSS,只要写一遍. 如今,html只提供数据和一些控件,至于其余的各类各样的样式则彻底由CSS来提供.canvas
在元素(标签)内部直接写属性(颜色,大小等样式)浏览器
<p style="color: green">我是一个段落</p>
在head标签中,在style标签的内部写入CSSruby
<style type="text/CSS"> /*如下是CSS代码*/ span{ color: yellow; } </style>
在head标签中用link标签链入CSS网络
<link rel="stylesheet" href="./index.CSS">
在style标签内部使用 @import url("#"); 导入CSSapp
<style type="text/CSS"> @import url('./index.CSS'); </style>
标签选择器能够直接选中全部的标签元素, 好比div, ul, li, p等等, 无论标签藏得多深, 都能选中, 选中的是全部的标签, 而不是某一个, 因此说选择的是"共性"而不是"特性".dom
用法:
标签名:{color: red;}
经过#
加id名
来选中某个元素. 同一个页面中的id毫不可能重复, 任何标签均可以设置id. id的命名规范, 大小写都是严格区分的, 如aa和AA就是两个彻底不一样的属性值.
用法:
#id名{color: red;}
所谓类就是指class, class与id很是类似, 任何的标签均可以添加类, 可是类是能够重复的, 属于归类的概念. 同一个标签中能够携带多个类, 用空格隔开.类选择器经过.
加类名
来选中某个元素.
用法:
.类名{color: red;}
使用空格表示后代选择器. 后代选择器, 顾名思义, 即父元素的后代(包括儿子, 孙子, 重孙子).
用法:
.container p{color: red;}
使用>
表示子代选择器, 好比div>p, 仅仅表示的是当前div元素选中的(相邻)子元素p(即:不包括孙子).
用法:
.container>p{color: red;}
多个选择器之间使用逗号,
隔开, 表示选中页面中的多个标签, 一些共性的元素, 可使用并集选择器.
用法:
h3,content{color: red;}
使用.
表示交集选择器. 同时用两种选择器选择一个标签元素, 例如div.active
表示选中的是active和div都拥有的元素
属性选择器, 字面的意思就是根据标签中的属性, 选中当前的标签.
用法:
[for]{color: red;}
input[type='text']{background: red;}
伪类选择器通常用在超连接<a>
标签中,使用<a>
标签的伪类选择器, 咱们必定要遵循爱恨准则
----LoVe HAte
.
用法:
a:link{color: #666;} /*没有被访问过的a标签样式*/ a:visited{color: yellow;} /*访问事后的a标签样式*/ a:hover{color: green;} /*鼠标悬停时a标签的样式*/ a:active{color: #yellowgreen;} /*鼠标按下时a标签的样式*/
注意: link, visited, active这三个只有a标签有, 而horver
其余元素也能够用.
p:first-letter:{color:red; font-size:30;}
p:before{content: 'alex';}
这个属性使用很少, 了解便可, 使用此伪元素选择器必定要结合content
属性.
p:after{content: '&'; color: red; font-size: 40px;}
这个属性使用很是频繁, 一般与布局有很大的关联(清除浮动).
CSS有两大特性: 继承性和层叠性
面向对象语言都会存在继承的概念, 在面向对象语言中, 继承的特色是: 派生类继承父类的属性和方法.
CSS中的继承: 给父级设置一些属性, 子元素继承了父级该属性.
CSS中的层叠性: 权重大的标签覆盖掉了权重小的标签.
权重: 谁的权重大,浏览器就会显示谁的属性.
!important
的使用!important
: 设置权重为无限大(IE不支持)
!important
: 不影响继承来的权重, 只影响选中的元素. 不要随便使用!important
,由于使用它会影响页面布局.
用法:
选择器(样式: 值!important;)
在CSS中, "box model"这一术语是用来设计和布局时使用的, 在网页中基本上都会显示一些方方正正的盒子. 咱们称这种盒子叫盒模型.
盒模型有两种: 标准模型和IE模型. 咱们重点学习标准模型.
若是一个盒子设置了width, height, padding, border (先不设置margin, margin有坑),那么:
盒子的真实宽度 = width + 2*padding + 2*border
盒子的真实高度 = height + 2*padding + 2*border
padding解释内边距的意思, 它是边框到内容之间的距离. 另外, padding的区域是有背景颜色的, 而且背景颜色和内容的颜色同样, 也就是说background-color
这个属性将填充满全部的border之内的区域.
padding有四个方向, 分别描述四个方向的padding.
padding-top: 30px;
padding-right: 30px;
padding-bottom: 30px;
padding-left: 30px;
/*上 右 下 左*/ padding: 20px 30px 40px 50px;
/*上 左右 下*/ padding: 20px 30px 40px;
/*上下 左右*/ padding: 20px 30px;
/*上下左右*/ padding: 20px;
border: 边框的意思, 描述盒子的边框. 边框有三要素: 粗细, 线性样式, 颜色.
若是颜色不写, 默认是黑色.
若是粗细不写, 默认不显示边框.
若是只写线性样式, 默认的有: 上下左右3px
的宽度, 实体样式, 黑色边框.如:
border: solid;
分别设置三要素, 以下:
border-width: 3px;
border-style: solid; /*还有dotted、double、dashed*/
border-color: red;
注意: 值能够是1个, 2个, 3个, 4个, 对应关系跟上面介绍的padding综合属性
是同样的.
设置一个方向的三要素, 以下:
border-top-width: 10px; border-top-style: solid; border-top-color: red;
上面三行代码至关于下面这一行:
border-top: 10px solid red;
注意: border: none
或者border: 0
都表示没有设置样式.
应用: 使用border来制做小三角
/*小三角 箭头指向上方*/ div{ width: 0; height: 0; border-bottom: 20px solid red; border-left: 20px solid transparent; border-right: 20px solid transparent; }
margin: 外边距的意思, 表示边框到最近盒子的距离. margin也有四个方向, 而且也能够设置1, 2, 3, 4个值.
/*表示四个方向的外边距离为20px*/ margin: 20px;
/*表示盒子向下移动了30px*/ margin-top: 30px;
/*表示盒子向右移动了50px*/ margin-left: 50px; margin-bottom: 100px;
有一些标签会默认自带样式, 好比<ul>
标签默认有padding-left值, 有些默认有margin值, <ul>
,<ol>
和<a>
标签也自带一些样式, 可是咱们通常在作网页的时候不想用那些默认的样式, 因此须要清除页面标签中默认的样式, 以便咱们更好的去调整元素的位置.
虽然通配符选择器*
能够解决问题, 可是这种方法效率不高, 不推荐. 咱们要使用并集选择器来选中页面中应有的标签, 以下代码就是清除默认样式的一种写法, reset.css
:
参考网址: https://meyerweb.com/eric/tools/css/reset/
参考代码:
/* http://meyerweb.com/eric/tools/css/reset/ v2.0 | 20110126 License: none (public domain) */ html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video { margin: 0; padding: 0; border: 0; font-size: 100%; font: inherit; vertical-align: baseline; } /* HTML5 display-role reset for older browsers */ article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section { display: block; } body { line-height: 1; } ol, ul { list-style: none; } blockquote, q { quotes: none; } blockquote:before, blockquote:after, q:before, q:after { content: ''; content: none; } table { border-collapse: collapse; border-spacing: 0; }
宏观的讲, 咱们的web页面和ps等设计软件有本质的区别, web网页的制做, 是个"流", 从上而下, 像"织毛衣". 而设计软件, 想往哪里画东西, 就去哪里画.
标准文档流下, 有一些现象, 好比: 空间折叠现象, 高矮不齐底边对齐现象等.
标准文档流等级森严, 标签分为两种等级: 行内元素和块级元素.
在之前的HTML学习中, 咱们已经将标签分过类了, 当时分为: 文本级和容器级.
<p>
, <span>
, <a>
, <b>
, <i>
, <u>
, <em>
<div>
, <h1>~<h6>
, <li>
, <dt>
, <dd>
PS: 为何说<p>
是文本级标签呢? 由于<p>
里面只能放"文字","图片"和"表单"元素, <p>
里面不能放<h1>~<h6>
和<ul>
, <p>
里面也不能放<p>
.
<p>
不同:
<p>
以外, 全部的文本级标签, 都是行内元素. 而<p>
虽是个文本级标签, 但它倒是个块级元素<p>
标签也是块级元素.咱们能够经过display属性将块级元素和行内元素进行相互之间的转换.display即"显示模式".
display: inline;
display: block;
标准文档流里面的如今很是多, 致使不少页面效果没法实现, 若是咱们如今就要设置并排和宽高, 那该怎么办呢? 办法就是: 移民! 即脱离标准文档流.
浮动是CSS里面布局最多的一种属性, 也是很重要的一个属性. float
表示浮动的意思, 它有以下属性值:
none
: 表示不浮动, 默认left
: 表示左浮动right
: 表示右浮动想要学好浮动, 必定要知道它的四大特性:
a. 浮动的元素是脱标(脱离标准文档流)的, 标签一旦设置浮动, 就可以并排, 而且再也不区分行内元素,块级元素, 也就可以设置宽高了
d. 浮动的元素有收缩的效果, 即: 一个浮动元素, 若是没有设置width
, 那么就会自动收缩为文字的宽度
注意: 关于浮动, 咱们要遵循一个原则: 永远不要设置一个盒子单独浮动.要浮动就一块儿浮动; 有浮动就必定要清除浮动.
首先来观察以下HTML和CSS代码:
<div class="father"> <div class="box1"></div> <div class="box2"></div> <div class="box3"></div> </div> <div class="father2"></div>
.father{ width: 1126px; } .box1{ width: 200px; height: 500px; float: left; background-color: red; } .box2{ width: 300px; height: 200px; float: left; background-color: green; } .box3{ width: 400px; height: 100px; float: left; background-color: blue; } .father2{ width: 1126px; height: 600px; background-color: purple; }
从执行效果中发现: 若是不给父盒子设置一个高度, 那么浮动子元素是不会填充父盒子的高度的, 此时.father2
的盒子就会跑到第一个位置上, 影响页面布局.
浮动元素的确能实现页面元素的并排效果, 这既是它的优势也是它的缺点. 因为它同时也会形成页面布局的极大混乱, 因此咱们要清除浮动.
清除浮动的方法有不少种, 在这里只介绍四种:
clear:both
属性overflow:hidden
(经常使用)为元素清除浮动的写法以下:
给浮动元素的父盒子, 也就是不浮动的元素, 添加一个clearfix
类, 而后做以下设置:
.clearfix:after{ content: "."; display: block; height: 0; clear: both; visibility: hidden; }
overflow属性规定当前内容溢出元素框时发生的事件.
值 | 描述 |
---|---|
visible | 默认值, 内容不会被修剪, 会呈如今元素框以外 |
hidden | 内容会被修剪, 超出元素框以外的部分不可见 |
scroll | 无论内容是否超出元素框都出现滚动条 |
auto | 若是内容超出元素框, 则浏览器会显示滚动条以便查看其他内容 |
inherit | 规定继承父元素的overflow属性的值 |
这些事件逐渐演变成overflow:hidden
清除法, 其实它是一个BFC区域, 具体参见: http://www.javashuo.com/article/p-ezyacvwn-v.html
当给两个标准文档流下的兄弟盒子设置垂直方向上的margin
时, 那么以较大的为准, 咱们称这种现象为塌陷. 记住这种现象, 在布局垂直方向盒子的时候要注意margin
的用法. 水平方向上没有塌陷现象.
当咱们给标准文档流下的兄弟盒子设置浮动以后, 就不会出现margin
塌陷的问题.
margin: 0 auto;
当一个<div>
元素设置margin: 0 auto;
时就会使盒子居中. 咱们知道margin: 0 auto;
表示上下外边距距离为0, 左右为auto的距离, 那么auto是什么意思呢? 若设置margin: 0 auto;
, 咱们发现盒子尽量大的左右两边有很大的距离, 由于此时的盒子是居中的.
margin: 0 auto;
时, 水平居中盒子必须有width, 要有明确的width值margin: 0 auto;
失效margin: 0 auto;
使盒子居中,而不是使文本居中, 文字水平居中可使用text-align: center
margin属性描述的是兄弟盒子的关系, 而padding属性描述的是父子盒子的关系.
先看以下两段代码:
.father{ width: 300px; height: 300px; background-color: blue; } .son{ width: 100px; height: 100px; background-color: orange; margin-top: 30px; }
<div class="father"> <div class="son"></div> </div>
运行上面代码, 发现两个盒子总体下移了30px, 其实咱们只是想让子盒子下移30px, 父盒子不要动,可是父盒子由于没有设置border, 因此父盒子也掉下来了, 一旦给父盒子设置一个border就行了, 那么问题来了, 咱们不可能在页面中平白无故的去给盒子加一个border, 因此此时的解决办法只有一个, 就是使用父盒子的padding, 让子盒子向下走.
.father{ width: 300px; height: 270px; background-color: blue; padding: 30px } .son{ width: 100px; height: 100px; background-color: orange; }
阿里巴巴矢量图标库: http://www.iconfont.cn/
/*对齐方式*/ text-align: left|right|center|justify(两端对齐,只适合英文);
/*文本颜色*/ color: 色值;
/*首行缩进, 建议使用单位em*/ text-indent: 2em;
/*文本修饰: 无|下划线|上划线|中划线(删除线)*/ text-decoration: none|underline|overline|line-through;
/*设置行高*/ line-height: 高度值;
font-weight: normal|bold|lighter|100~900|inhert; /*100~300没有区别*/
font-family: 字体;
font-family:”华文彩云”;
, 若是用户电脑里面没有这个字体, 那么就会变成宋体.font-family: "Times New Roman","微软雅黑"
, 备选字体能够有无数个, 默认显示第一个, 没有安装第一个就显示第二个, 以此类推, 都没安装就显示宋体.Microsoft YaHei
, 宋体的英语别名是SimSun
font-size(字体大小)
,line-height(行高)
,font-family(字体类型)
合三为一: font:12px(大小)/30px(行高) "Times New Roman","Microsoft YaHei","SimSun";
font: 12px/200% "宋体";
或者 font: 12px/2em "宋体";
等价于 font: 12px/24px "宋体";
font: 16px/48px "宋体";
等价于 font: 16px/300% "宋体";
或者 font: 16px/3em 宋体"";
颜色一共有三种表示方法: 单词, rgb表示法, 十六进制表示法.
rgb(红色 绿色 蓝色)
三原色光学显示器, 每一个像素都是由三原色的发光原件组成的, 靠明亮度不一样调成不一样的颜色.
用法: rgb(111,234,123);
, r, g, b的每一个值的取值范围是0~255
#
开头的值, 都是十六进制的用法: #a0a0a0;
#112233;
能够简写成 #123;
用法: background-color: #0f0;
用法: background-image: url('paper.gif');
用法: background-repeat:repeat(默认)|repeat-x|repeat-y|no-repeat|inherit;
/*第一个值是水平位置,第二个值是垂直位置*/ background-position: x% y%|Xpx Ypx; /*第一个值若是是*/
CSS雪碧, 即CSS Sprite, 也有人叫它CSS精灵, 是一种CSS图像合并技术, 该方法是将小图标和背景图像合并到一张图片上, 而后利用CSS的背景定位来显示须要显示的图片部分.
只有一张大的合并图, 每一个小图标节点如何显示单独的小图标呢? 其实就是截取大图一部分显示, 而这部分就是一个小图标.
咱们可使用background综合属性制做通天banner, 什么是通天banner呢? 就是通常咱们电脑屏幕都是1439, 可是设计师给咱们的banner图都会比这个大, 那么咱们能够以此属性制做通天banner, 以下:
background: red url(images/banner.jpg) no-repeat center top;
定位3种: 相对定位, 绝对定位, 固定定位
注意: 以上特性能够证实: 相对定位在页面中没有什么太大的做用, 它会影响咱们的页面布局, 咱们不要使用相对定位来作压盖效果.
注意: 父绝子绝没有实际意义, 作网站的时候不会出现父绝子绝, 由于绝对定位脱离标准文档流, 影响页面的布局. 相反, "父相子绝"在咱们的页面布局中, 是经常使用的布局方案, 由于父亲设置相对定位, 不脱离标准文档流, 子元素设置绝对定位, 仅仅的是在当前父辈元素内调整该元素的位置.
还要注意, 绝对定位的盒子无视父辈的padding.
做用: 页面布局常见的"父相子绝"很是重要, 必须掌握!
z-index
这个东西很是简单, 它有如下四大特性, 只要记住了每一个特性, 页面布局时就不会找不到盒子的状况了:
z-index
值表示谁压着谁, 数值大的压盖住数值小的z-index
, 也就是说, 无论是相对定位,绝对定位仍是固定定位, 它们均可以使用z-index
, 而浮动元素不能使用z-index
z-index
值没有单位, 就是一个正整数, 默认的z-index
值为0, 若是你们都没有z-index
值, 或者z-index
值同样, 那么谁写在HTML后面, 谁就在上面压着别人. 定位了的元素, 永远压住没有定位的元素z-index
值较小, 儿子的z-index
再大也没用能够看成公式记下来:
position: absolute; left: 50%; margin-left: -width/2; /*即自身宽度的一半*/