H5基础_2_CSS

灵魂拷问:

浏览器能干什么?

我能让浏览器干什么?

前端开发:

  • 一点点的空间想象力
  • 一点点的小学数学知识
  • 一点点的艺术鉴赏能力

CSS

CSS设计思想

html的局限性——主要做结构,显示元素内容

CSS——网页的美容师,CSS内容分两大部分: 选择器 属性值

CSS的引入方式

1 行内样式表

style=“ ”

2 内部样式表

3 外部样式表

CSS的三大特性
层叠性

​ 样式冲突,就近原则(后面的覆盖前面的)

​ 长江后浪推前浪,前浪死在沙滩上

​ (同一个类选择器内部)

继承性

子元素继承父元素的属性(子承父业)

子元素可以继承父元素哪些样式: text- font- line- 开头的属性以及color

font: 18px/1.5 行高是文字高度的1.5倍

优先级

根据权重值来匹配权重最高的属性,如果权重相同,按照层叠性来处理,后面的值覆盖前面的值

选择器选择器权重
继承或者*0 0 0 0
元素选择器0 0 0 1
类选择器、伪类选择器0 0 1 0
id选择器0 1 0 0
行内样式style1 0 0 0
!important无穷大

复合选择器

权重可以叠加,永远不会进位 .nav .c1 > .nav li

元素显示模式
块元素 div p h ul
  • 比较霸道,自己独占一行
  • 可是设置高度,宽度,外边距和内边距都可以设置
  • 宽度默认是容器的100%
  • 是一个盒子,可以放任何元素
行内元素 span
  • 相邻的行内元素在一行上
  • 宽度和高度是无效的
  • 默认宽度是他内容的宽度
  • 行内元素只能容纳文本或其他行内元素

注意:a里面不能再放a了

a里面可以放块级元素

行内块元素:

input img td

  • 和相邻元素在一行
  • 默认宽度是它本身内容的宽度
  • 可以设置高度、宽度

块级元素像男人,行内元素像女人。

元素显示模式总结:

块级元素像男人,是骨架,是山。 行内元素像女人,是血肉,是水。 一阴一阳之谓道!!!!

元素模式元素排列设置样式默认宽度包含
块级元素一行只能放一个 块级元素可以设置高度和宽度父容器的宽度可以包含任何标签
行内元素一行可以放多个行内元素不可以设置高度和宽度默认是内容的宽度容纳文本或其他行内元素
行内块元素一行可以放多个行内块元素可以设置高度和宽度它本身内容的宽度
显示模式的转换:

元素显示模式可以通过display显示转换:

display: block

dispaly:inline

dispaly: inline-block

文字垂直居中的技巧: line-height = height(行高=盒子高度)

CSS选择器

标签选择器
类选择器
  • 样式点定义,结构类调用,一个或多个,开发最常用
id选择器
  • 样式#号调用,结构id调用,只能调用一次,别人切勿使用
  • css一般和类选择器调用,js一般是id选择器搭配
通配符选择器
复合选择器

基础选择器进行排列组合,由两个或两个以上的基础选择器组成

后代选择器 (’ ')

ul li ul中所有的li后代(儿子,孙子都可以)

子选择器{>}

只能选儿子

.nav>a

并集选择器(,)
伪类选择器 (:)

伪类就是假的,可能是元素不同的状态,

链接伪类选择器:

a:link (选择所有未被访问的莲姐姐)

a:visited(所有已经访问的链接)

a:hover(鼠标位于其上的链接)

a:active(鼠标按下未弹起的链接)

:hover

为了确保生效,按照LVHA的顺序声明 lvha, lv 好

a链接在浏览器有默认样式,所以要在实际工作中给链接单独指定样式。

开发过程中一般先写个a,然后再写个a:hover

:focus 跟表单有关

:first-child

:last-child

:ntp-child

CSS内容样式

font样式

font-family: Microsoft Yahei, 可以多写几个,系统会自动从前往后匹配,如果都匹配不到,那么就用默认字体。

font-size = 16px;

font-weight: 700 (bold) normal =400 取值:100-900, 400 normal,700 bold 实际开发中更喜欢用数字来表示

font-style normal italic

font: (简写形式, size family) font: 16px/28px Mircosoft Yahei (字体16px,行高28ppx,字体是微软雅黑)

行高的另外一种写法:

font: 16px/1.5 表示行高是字体高度的1.5倍

text样式
  1. 文本颜色: color=red
  2. 对齐文本: text-align:center; 水平对齐 left,center,right
  3. 装饰文本: text-decoration: none,underline,overline,line-through
  4. 文本缩进: text-indent : 2em ; 缩进两个字符
  5. 行间距: line-height: 26px;
图片格式

图片格式:

jpg: 高清,颜色多,产品类的一般用jpg格式

gif: 颜色比较少,256种颜色,透明背景,动画效果

png:比较清晰,颜色丰富,透明背景

psd: ps专用格式,可以用ps打开

ps切图,前端必备技能:

图层切图

切片切图

ps插件切图

CSS颜色

四种颜色的表示方法:

  1. 预定义的颜色: blue red orange pink
  2. 16进制: #ffffff #fff(简写)
  3. rgb
  4. rgba
CSS的背景
  1. 背景颜色 background-color
  2. 背景图片 background-image非常便于控制位置,可以用来放logo,大块区域的背景图,小块区域的图标等等
  3. 背景平铺 background-repeat: repeat(默认值) no-repeat repeat-x repeat -y
  4. 背景是否滚动 background-attachment : scroll | fixed
  5. 背景图片的位置: background-position: x y;

​ xy: length 精确单位,如果只有x,那么y默认垂直居中

​ xy: 方位名词(left right center top bottom)如果指定方位名词,顺序可以颠倒 ,指定一个,第二个可以省略,默认center

​ 20px,center 可以混合写

背景复合写法

background:transparent none repeat scroll 0% 0%。

css3新属性: 最后一个是透明度0-1之间

背景色透明: background: rgba(0,0,0,0.5)

background: url(…) top( 水平居中)

CSS布局

网页布局三大核心:盒子模型 浮动 定位

看透网页布局的本质: 网页由一个一个的盒子组成。

网页布局过程:

1 写好html代码

2 写CSS样式,然后摆放到相应位置(核心,难点)

3 往盒子里装内容

网页布局第一准则:父盒子标准流从上往下排列,子盒子浮动布局从左往右排列

网页布局第二准则: 先设计盒子大小,再设计盒子位置

普通流(标准流): 块元素从上向下,行内元素从左向右布局

盒子模型

盒子指定的高度和宽度是盒子里面内容的高度和宽度,不是盒子实际占有的高度和宽度,所以在改变border,padding,margin的时候都会影响盒子大小。

盒子模型的4个组成部分: 边框,外边距,内边距,实际内容

既然叫盒子模型,可以认为盒子的边框是一个核心,以边框为核心,然后是内外边距。

border

border-weight

border-style : solid dashed dotted

border-color: pink blue red

边框复合型写法 border: 5px dashed red;

border-top: (4个边框可以分开设置)

table 的边框:

border-collapse :collapse (相邻的边框合并)

padding

什么情况下调整padding不改变盒子大小:

子元素不指定尺寸的话,默认宽度和父元素一样宽,此时加padding也不会超出父元素,不过一旦指定了宽度(包括100%)再给子元素指定padding,那么子元素就要超出父元素了。

margin

盒子居中对齐:

1 指定width 2. margin:0 auto;

行内元素和行内块元素水平居中: text-align: center

复合写法

border padding margin 都支持复合写法:

padding: 1px 四边内边距都是1px

padding: 1px 2px 上下为1px,左右2px

padding: 1px 2px 3px 上1px 左右2px 下 3px

padding: 1px 2px 3px 4px 上右下左(顺时针)

嵌套块元素垂直外边距的塌陷

对于两个嵌套关系(父子关系)的块元素,父元素有上外边距同时子元素也有上外边距,此时父元素会塌陷较大的外边距值。

有三种解决办法:

  1. 为父元素定义上边框。
  2. 为父元素定义上内边距。
  3. 为父元素添加overflow:hidden

还有其他办法: 比如浮动,固定,绝对定位的盒子不会有塌陷问题。

盒子样式

圆角边框

​ border-radius: 半径值。

​ 可以分别设置4个角,顺序分别是左上,右上,右下,左下

盒子阴影(盒子阴影不占用盒子空间)

​ box-shadow: 10px 10px 10px 10px rgba(0,0,0, 0.3)

盒子伪类

​ div:hover 任何一个盒子都可以加hover

文字阴影

​ text-shadow

CSS浮动
为什么需要浮动

标准流很难实现的布局:

  • 1个盒子靠左,1个盒子靠右边
  • 多个盒子一行排列

多个块级元素纵向排列标准流,横向排列找浮动

float: none left right

浮动的排列特性

1 浮动的元素会脱离标准流(脱标),不再保留原先的位置,其他标准流盒子会占有空出的位置。

2 浮动的元素一行显示,顶部对齐,左右没有内外边距

3 浮动的元素具有行内块元素的属性

所有元素都可以添加浮动。 如果行内元素加了浮动,可以直接赋值高度和宽度。

浮动布局一般和标准流一起使用: 父盒子标准流,子盒子浮动布局

浮动的注意点:

1 浮动和标准流的父盒子搭配使用

2 一个元素浮动了,理论上其余的兄弟元素也要浮动

浮动的盒子只会影响盒子后面的标准流,不会影响前面的标准流。

浮动的本质:

浮动流和标准流是两个图层,浮动流在标准流之上, 浮动元素所在的父盒子往往是个标准流的盒子,所以如果父盒子没有指定高度,那么父盒子必须要清除浮动,不然会影响后面标准流的布局。

清除浮动的本质是把浮动流合并到标准流,让浮动层的内容撑开标准流的父盒子。


为什么要清除浮动?

父盒子很多时候不方便给高度,需要由子盒子撑开,而子盒子如果浮动,那么父盒子的高度成了0, 造成布局混乱,为了解决这个问题,我们需要清除浮动。

如果父盒子有高度,不需要清除浮动。

clear:both

4种方法清除浮动:

1、额外标签法,在浮动子元素后面加一个块级元素如div

div style=“clear:both”

2、给父亲添加overflow

overflow: hidden (代码简洁,但是溢出的不显示)

3、给父亲加伪元素

​ .clearfix:after {

​ content: “”;

​ display: block;

clear: both;

​ height:0;

}

4、给父亲加双伪元素

​ .clearfix:after {

​ content: “”;

​ display: table;

​ }

​ .clearfix:after {

​ clear: both;

​ }

CSS定位
为什么要学习定位?

1 某个元素自由的在一个盒子内移动位置,并且压住其他盒子

2 滚动窗口的时候,某些窗口固定在网页中某个位置,不随页面滚动

这些通过标准流和定位都无法实现,只能通过定位

定位组成

定位=定位模式+边偏移

定位模式position: static relative absolute fixed sticky

边偏移: 距离父元素边线的距离(这四个属性只存在于定位中)top bottom left right

static 静态定位(了解)

默认的定位方式,也叫无定位,标准流方式,很少用到

relative 相对定位(重要)

相对定位的特性:(务必记住)

元素在移动位置的时候,总是相对于它原来的位置来说的(自恋型)

虽然这个盒子走了,但是它之前的位置保留,不影响其他的盒子布局。(不脱标,它最典型的应用就是给绝对定位当爹的。。。)

absolute 绝对定位(重要)

绝对定位在移动位置的时候,是相对于祖先元素来说的(拼爹型)

绝对定位的特点:

1 如果没有祖先元素或者祖先元素没有定位,那么以浏览器(document)为准进行定位。

2 只要父亲有定位,固定,绝对,相对,那么子元素就会以最近的父元素来定位

3 绝对定位脱标 ,比浮动还要高

fixed 固定定位(重要)

1、以浏览器的可视区域为参照点移动位置。

  • 跟父元素没有任何关系。
  • 不随滚动条滚动。

2、不占有原先的位置,可以理解为一种特殊的绝对定位。

固定定位的另外一种用法:贴着版心固定位置。

核心代码:

.side {
    position: fixed;
    left:50%;
    margin-left:600px;(版心的一半宽度)
}
sticky粘性定位 (了解)

相对定位和固定定位的混合

选择器 {position:sticky;
		top:10px}

1 以浏览器的可视区域为参考点。(固定定位特点)

2 粘性定位占有标准流的位置 (相对定位的特点)

3必须添加top left right bottom其中一个才有效。

跟页面滚动搭配使用,兼容性较差。

可以这样理解:

边偏移是触发条件, 当达不到触发条件的时候,按照标准流显示。

达到触发条件后,图层提升,实现固定定位的效果。

注意: 因为这种效果兼容性比较差,所以不常用,网上我们看的类似效果大多用js实现。

定位总结:
定位模式是否脱标移动位置是否常用
static静态定位不能使用边偏移不常用
relative相对定位相对于自身偏移常用
absolute绝对定位相对于带有定位属性的祖先元素偏移(就近原则)常用
fixed固定定位相对于浏览器可视区域偏移常用
sticky粘性定位浏览器可视区不常用
子绝父相(务必记住)

弄清楚这个口诀,就弄明白了子绝父相的由来。

  1. 子级绝对定位,不会占有位置,可以放在父盒子里面的任何一个地方,不会影响其他的兄弟盒子。
  2. 父盒子需要加定位限制子盒子在父盒子内显示
  3. 父盒子布局时要占有位置,所以要用相对定位。(相对定位不脱标)

简单一句话: 父亲要保留位置,儿子不需要位置。

定位叠放次序z-index

数值越大,距离我们越近,可以理解为海拔高度。

只有定位的盒子才有z-index。

绝对定位的盒子如何实现居中

首先left或者top设置为50%(确定中心点)

然后margin 给个负值。或者用transform:translate()

定位特殊特性

绝对定位和固定定位和浮动类似

1 行内元素添加定位后,可以直接设置高度和宽度

2 如果块级元素不给高度和宽度,默认为内容大小

3 脱标的盒子不会触发外边距塌陷

4 绝对定位会完全压住标准流的盒子

浮动只会压住盒子,不会压住盒子里的内容。

浮动的前生今世:

之所以浮动不会压住盒子里的内容,因为浮动最初的目的就是为了让文字环绕图片。后来才引申为布局。

网页布局总结

通过盒子模型我们知道html标签都是一个一个的盒子。

1 先用标准流按行摆放

2 行内元素用浮动来做

3 特殊需求定位来做。

通过浮动和定位,所有元素都变成了行内块元素。

网页布局口诀: 上下罗列盒子,左右浮动,定位点缀

深入学习之后发现,浮动有些不三不四,更像是一个过渡特性,实际上也确实如此,浮动最初是为了做文字环绕效果,后来慢慢演变成布局,其实一直到了flex算彻底解决了布局的问题。

元素的显示与隐藏
display:none (不保留位置)

隐藏元素,不占有原来的位置

display: block 和none相对

visibility(保留位置)

visible

hidden : 元素隐藏,但是保留位置。

overflow(只针对溢出的部分)

hidden

scroll 显示滚动条

auto 溢出显示滚动条

一般情况,我们都不想把溢出的部分显示出来。

CSS高级技巧

精灵图sprites

为了有效的减少服务器接收和发送请求的次数,提高网页的加载速度,出现了CSS精灵技术

精灵图:多个小图片放在一张大图上

使用核心:

1 主要针对背景图片的小背景

2 主要借助于背景位置来实现 background-position

3 一般情况下精灵图都是负值

字体图标iconfont

字体图标的出现是为了代替精灵图。

字体图标展示的是图标,本质上是字体

字体图标的优点:

  • 轻量级 比图片小,一旦字体加载了,图标马上渲染出来
  • 灵活性: 本质上是文字,可以随意改变颜色,产生阴影,透明效果,旋转等
  • 兼容性: 几乎支持所有的浏览器,放心使用

字体图标可以部分代替精灵图。

简单的小图标用字体图标,复杂的用精灵图。

下载字体图标

http://icomoon.io

IcoMoon成立于2011年,推出了第一个自定义图标字体生成器。

阿里iconfont字库: http://www.iconfont.cn

字体图标的使用:

1 将下载好的字体图标fonts目录复制到网页根目录下

2 在css中引入font-face

    <style>
  @font-face {
      font-family: 'icomoon';
      src:  url('fonts/icomoon.eot?hwrgfi');
      src:  url('fonts/icomoon.eot?hwrgfi#iefix') format('embedded-opentype'),
        url('fonts/icomoon.ttf?hwrgfi') format('truetype'),
        url('fonts/icomoon.woff?hwrgfi') format('woff'),
        url('fonts/icomoon.svg?hwrgfi#icomoon') format('svg');
      font-weight: normal;
      font-style: normal;
      font-display: block;
    }

.font {
    font-family: 'icomoon';
    font-size: 40px;
    color: blue;
}

3 、在html中引入字体, (打开demo文件,找到对应图标的值)

4、 在css中指定font-family

CSS实战技巧

页面布局的整体思路

1 必须确定页面的版心(核心区域)(确定宽度 1266,为了兼容)

2 分析页面的行模块,以及每行模块中的列模块(页面布局第一准则)

3、一行中的列模块采用浮动布局,确定每列的宽度、位置(网页布局第二准则)

4、制作HTML结构。先有结构再有样式,结构永远最重要。

5、先理清楚布局结构,再写代码。 这要靠经验积累。

一层层写,类似摆积木。

CSS属性书写顺序

1、布局定位属性:display position float clear visibility overflow (display第一个写,毕竟关系到显示模式)

2、自身属性 width height margin border padding background

3、文本属性 color font text-decoration text-align vertical-align white-space break-word

4、其他属性(CSS3): content cursor border-radius box-shadow background:linear-gradient…

css代码初始化

不同的浏览器对元素的默认样式都有不同的规定,为了兼容性考虑,css一定要做初始化的操作

/* base.css */
/* 把所有的内外边距清零 */
* {
    margin: 0;
    padding: 0
}
/* 去掉斜体 */
em,
i {
    font-style: normal
}
/* 去掉li的小圆点 */
li {
    list-style: none
}

img {
    /* border 0 照顾低版本浏览器 */
    border: 0;
    /* 取消图片底侧有空白缝隙的问题 */
    vertical-align: middle
}

button {
    /* 当我们鼠标经过button的时候变成小手 */
    cursor: pointer
}

a {
    color: #666;
    text-decoration: none
}

a:hover {
    color: #c81623
}

button,
input {
    font-family: Microsoft YaHei, Heiti SC, tahoma, arial, Hiragino Sans GB, "\5B8B\4F53", sans-serif
}

body {
    /* 抗锯齿性,让文字显示的更加清晰 */
    -webkit-font-smoothing: antialiased;
    background-color: #fff;
    /* \5B8B\4F53  这个表示宋体,为了照顾某些浏览器不能兼容中文,用unicode编码表示 */
    font: 12px/1.5 Microsoft YaHei, Heiti SC, tahoma, arial, Hiragino Sans GB, "\5B8B\4F53", sans-serif;
    color: #666
}
/* 元素隐藏 */
.hide,
.none {
    display: none
}
/* 清除浮动 */
.clearfix:after {
    visibility: hidden;
    clear: both;
    display: block;
    content: ".";
    height: 0
}

.clearfix {
    *zoom: 1
}
核心板块类
w {
    width:1200px;
    margin: 0 auto;
}
导航栏写法

不要直接写a,用li包含a。 (不要把连接堆到一起,搜索优化)

.nav>ul>li>a

行内元素

行内元素为了照顾兼容性,尽量只设置左右内外边距,不要设置上下边距。

如何让图片跟父盒子一样大

img { width:100%; height: 100%}

CSS三角的做法
三角的本质是一个实心盒子的边框, 另外三个边框透明,只保留一个有颜色,然后使用绝对定位。
选择器 {
    width: 0;
    height:0 ;
    border: 20px solid transparent;
    border-bottom-color: pink;
    line-height:0;
    font-size:0;
}

用户界面样式

鼠标样式cursor

cursor:

pointer 小手

move 移动

text 文本

not-allowed 禁止

表单元素的轮廓线 outline

input { outline: none}

textarea 禁止拖动:

textarea { resize:none}

textarea 尽量写在一行里,这里可以保证里面没有内容。

vertical-align

设置行内元素或者行内块元素 跟文字的垂直对齐方式

baseline 基线对齐

top 顶线

middle 中线

bottom 底线

多用于图片和文字垂直居中。

img {

vertical-align: middle;

}

图片底下有空白缝隙的解决方案

原因: 图片默认vertical-align为基线对齐,所以留下的空白缝隙是基线到底线的距离。

只要将图片的vertical-align 改为bottom middle任何一个即可

显示不开的文字用省略号代替

单行文本:

  1. white-space: nowrap (强制一行内显示文本)
  2. overflow: hidden; (溢出部分隐藏)
  3. text-overflow:ellipsis (用省略号代替超出的部分)

多行文本

有较大兼容性问题,适合webkit内核

常见布局技巧
margin 负值

margin-left: -1; 实现两个盒子边框合并

让边框突出:

如果没有定位,添加 position=relative

如果 有定位: z-index =100

文字环绕图片的效果

浮动元素不会压住文字,父盒子用标准流,子盒子浮动,不会压住父盒子的文字。

行内块巧妙运用

大盒子添加text-align = center,大盒子里面的所有行内元素和行内块元素都水平居中。

答疑

为什么用不同的盒子,我只想用div?

标签都是有语义的,在合适的地方用合适的盒子

为啥那么多类名?

类名就是给每个盒子起个名字,可以更好的找到这个盒子,选取盒子更容易,后期维护也方便

到底什么时候用margin什么时候用padding?

大部分情况两个可以混用,两者各有优缺点。根据实际情况,总有更简单的办法实现。

自己做没有思路?

布局有很多实现方式,可以先模仿,然后再慢慢摸索自己的风格

最后一定要多运用辅助工具,比如屏幕画笔,ps等等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值