参考文档
①②③④⑤⑥⑦⑧⑨
[TOC]
"CSS"列表示在CSS版本的属性定义(CSS1,CSS2,或对CSS3)。
选择器 | 示例 | 示例说明 | CSS |
---|---|---|---|
.class | .intro | 选择所有class="intro"的元素 | 1 |
#id | #firstname | 选择所有id="firstname"的元素 | 1 |
* | * | 选择所有元素 | 2 |
element | p | 选择所有 元素 |
1 |
element,element | div,p | 选择所有 元素和 元素 |
1 |
element element | div p | 选择 元素内的所有 元素 |
1 |
element>element | div>p | 选择所有父级是 元素的 元素 |
2 |
element+element | div+p | 选择所有紧接着 元素之后的 元素 |
2 |
[attribute] | [target] | 选择所有带有target属性元素 | 2 |
[attribute=value] | [target=-blank] | 选择所有使用target="-blank"的元素 | 2 |
[attribute~=value] | [title~=flower] | 选择标题属性包含单词"flower"的所有元素 | 2 |
[attribute|=language] | [lang|=en] | 选择 lang 属性以 en 为开头的所有元素 | 2 |
:link | a:link | 选择所有未访问链接 | 1 |
:visited | a:visited | 选择所有访问过的链接 | 1 |
:active | a:active | 选择活动链接 | 1 |
:hover | a:hover | 选择鼠标在链接上面时 | 1 |
:focus | input:focus | 选择具有焦点的输入元素 | 2 |
:first-letter | p:first-letter | 选择每一个 元素的第一个字母 |
1 |
:first-line | p:first-line | 选择每一个 元素的第一行 |
1 |
:first-child | p:first-child | 指定只有当 元素是其父级的第一个子级的样式。 |
2 |
:before | p:before | 在每个 元素之前插入内容 |
2 |
:after | p:after | 在每个 元素之后插入内容 |
2 |
:lang(language) | p:lang(it) | 选择一个lang属性的起始值="it"的所有 元素 |
2 |
element1~element2 | p~ul | 选择p元素之后的每一个ul元素 | 3 |
[attribute^=value] | a[src^="https"] | 选择每一个src属性的值以"https"开头的元素 | 3 |
[attribute$=value] | a[src$=".pdf"] | 选择每一个src属性的值以".pdf"结尾的元素 | 3 |
[attribute*=value] | a[src*="runoob"] | 选择每一个src属性的值包含子字符串"runoob"的元素 | 3 |
:first-of-type | p:first-of-type | 选择每个p元素是其父级的第一个p元素 | 3 |
:last-of-type | p:last-of-type | 选择每个p元素是其父级的最后一个p元素 | 3 |
:only-of-type | p:only-of-type | 选择每个p元素是其父级的唯一p元素 | 3 |
:only-child | p:only-child | 选择每个p元素是其父级的唯一子元素 | 3 |
:nth-child(n) | p:nth-child(2) | 选择每个p元素是其父级的第二个子元素 | 3 |
:nth-last-child(n) | p:nth-last-child(2) | 选择每个p元素的是其父级的第二个子元素,从最后一个子项计数 | 3 |
:nth-of-type(n) | p:nth-of-type(2) | 选择每个p元素是其父级的第二个p元素 | 3 |
:nth-last-of-type(n) | p:nth-last-of-type(2) | 选择每个p元素的是其父级的第二个p元素,从最后一个子项计数 | 3 |
:last-child | p:last-child | 选择每个p元素是其父级的最后一个子级。 | 3 |
:root | :root | 选择文档的根元素 | 3 |
:empty | p:empty | 选择每个没有任何子级的p元素(包括文本节点) | 3 |
:target | #news:target | 选择当前活动的#news元素(包含该锚名称的点击的URL) | 3 |
:enabled | input:enabled | 选择每一个已启用的输入元素 | 3 |
:disabled | input:disabled | 选择每一个禁用的输入元素 | 3 |
:checked | input:checked | 选择每个选中的输入元素 | 3 |
:not(selector) | :not(p) | 选择每个并非p元素的元素 | 3 |
::selection | ::selection | 匹配元素中被用户选中或处于高亮状态的部分 | 3 |
:out-of-range | :out-of-range | 匹配值在指定区间之外的input元素 | 3 |
:in-range | :in-range | 匹配值在指定区间之内的input元素 | 3 |
:read-write | :read-write | 用于匹配可读及可写的元素 | 3 |
:read-only | :read-only | 用于匹配设置 "readonly"(只读) 属性的元素 | 3 |
:optional | :optional | 用于匹配可选的输入元素 | 3 |
:required | :required | 用于匹配设置了 "required" 属性的元素 | 3 |
:valid | :valid | 用于匹配输入值为合法的元素 | 3 |
:invalid | :invalid | 用于匹配输入值为非法的元素 | 3 |
标签选择器 类选择器 ID选择器 通配符选择器
后代选择器 子选择器 并集选择器 伪类选择器
-
后代选择器:div p
- 用空格表示,可以是孩子或者孙子
-
子选择器 div > p
-
伪类选择器: 用
:
表示- 链接伪类
a:link a:visited a:hover a:active
- 注意事项:书写顺序;实际中只修改
a 与 a:hover
- 注意事项:书写顺序;实际中只修改
- focus伪类:
input:focus
- 链接伪类
https://www.w3school.com.cn/css/css_font.asp
属性 | 描述 |
---|---|
font | 简写属性。作用是把所有针对字体的属性设置在一个声明中。 |
font-family | 设置字体系列。 |
font-size | 设置字体的尺寸。 |
font-style | 设置字体风格。 |
font-variant | 以小型大写字体或者正常字体显示文本。 |
font-weight | 设置字体的粗细。 |
属性 | 描述 |
---|---|
color | 设置文本颜色 |
line-height | 设置行高。 |
letter-spacing | 设置字符间距。 |
text-align | 对齐元素中的文本。 |
text-decoration | 向文本添加修饰。 |
text-indent | 缩进元素中文本的首行。 |
text-indent:2em
text-decoration 取消下划线
line-height 可以居中对齐
块元素:占一行例如div
。 行元素:多个一行span
h1~h6 p div ul ol li
- 自己占一行
- 高度 宽度 内外边距
- width 不写,默认宽度与父窗口一样宽 100%
- 是一个容器,里面可以放
块元素
与行元素
注意事项
- 文字块
p h1
等不能放置div了。
内联元素
<a> <strong> <b> <em> <i> <del> <s> <ins> <u> <span>
- 一行可以多个
- 高度与宽度设置无效
- 默认宽度就是自己本身宽度
- 行元素只能放
行元素
与文本
。- 不能放置div 等块元素
<a>
可以放块元素
input img td
- 可以设置宽度与高度
- 默认宽度是本身宽度(继承了行元素)
- 一行可以放多个
行转块
与 转行内块
用到的比较多。 [可以参考小米侧边栏案例](#4.1 小米侧边栏)
行转块: display: block;
例如将<a>
转换后,就可以设置高度与宽度
块转行: isplay: inline;
不能设置宽度与高度
转行内块:display:inline-block;
一行可以放多个
背景颜色 背景图片 背景平铺 背景图片位置 背景图片固定
属性 | 描述 |
---|---|
background | 简写属性,作用是将背景属性设置在一个声明中。 |
background-attachment | 背景图像是否固定或者随着页面的其余部分滚动。 |
background-color | 设置元素的背景颜色。 |
background-image | 把图像设置为背景。 |
background-position | 设置背景图像的起始位置。 |
background-repeat | 设置背景图像是否及如何重复。 |
background-image属性描述了元素的背景图像。
实际开发常见于logo或者一些装饰性的小图片 或者是超大的背景图片.
优点是非常便于控制位置(精灵图也是一种运用场景)
body
{
background-image: url(bgimage.gif);
background-color: #000000;
}
默认都是平铺的。 可以设置沿着X或Y轴平铺。
可以添加背景图片与背景颜色,背景图片会靠上。
有三种方式:
值 | 描述 |
---|---|
top left center right bottom 两两组合 | 如果您仅规定了一个关键词,那么第二个值将是"center"。默认值:0% 0%。 |
x% y% | 第一个值是水平位置,第二个值是垂直位置。左上角是 0% 0%。右下角是 100% 100%。如果您仅规定了一个值,另一个值将是 50%。 |
xpos ypos | 第一个值是水平位置,第二个值是垂直位置。左上角是 0 0。单位是像素 (0px 0px) 或任何其他的 CSS 单位。如果您仅规定了一个值,另一个值将是50%。您可以混合使用 % 和 position 值。 |
也可是混合单位
20px center;
值 | 描述 |
---|---|
scroll | 默认值。背景图像会随着页面其余部分的滚动而移动。 |
fixed | 当页面的其余部分滚动时,背景图像不会移动。 |
inherit | 规定应该从父元素继承 background-attachment 属性的设置。 |
让代码更加简洁
background black url(imgs/bg.jpg) no-repeat fixed center top
背景颜色半透明,非常常见
background rgba(0,0,0,0.3)
解决样式冲突,就近原则,用最后代码会覆盖上面的代码。
长江后浪推前浪。
子标签会继承父标签的属性。恰当使用,可以简化代码。
主要继承:
- 文字相关
- 颜色相关
- 行高:line-height
- 行高不指定单位,例如:1.5 是什么意思:
line-height:1.5;
- 行高不指定单位,例如:1.5 是什么意思:
不继承:
- 高度等信息
关键点是如何覆盖到上级的css样式
权重叠加
网页布局三大核心:盒子模型、浮动、定位。
具体步骤
- 1:将网页分割成大块的盒子 ,Box
- 2:摆放Box的位置(这一步比较难)
- 3:填充Box的内容
下图,展示了不同的盒子:
主要属性有:
- 边框:border
- 外边距 margin
- 内边距 padding
- 实际内容 content
border-width 粗细
border-color 颜色
border-style 虚线(dashed),实线(solid),点线(dotted),
没有顺序限制
border: 1px solid red
四个边框,可以分别指定: border-top border-bottom
重点是把相邻单元格的边框合并,不然会粗。border-collapse:collapse;
可以统一设置table td th
的边框
这个边框的实际大小为:220px
<div>
width:200px;
height:200px;
background-color: pink;
boder: 10px solid red;
</div>
可以变成圆形,圆角矩形等等。
border-radius:10px;
/*圆形,必须是正方形*/
border-radius:50%;
/*圆角矩形,高度的一半*/
border-radius:50%;
/*设置4个角*/
border-radius:10px 20px 30px 40px;
/*只有一个角*/
border-top-left-radius:10px;
padding: 5px; 表示上下左右
padding 实际会影响盒子大小。
实际会影响盒子大小。
CSS布局:float、position、flex、grid
网页布局准则:
- 第一准则
- 多个块级元素--纵向排列找标准流
- 多个块级元素--横向排列找浮动流
- 第二准则
- 先设置盒子大小,之后设置盒子的位置.
标准流
默认按照block inline
来布局的。 也就是说什么都不做,就是标准流。
浮动流
固定流
默认按照block inline
来布局的。 也就是说什么都不做,就是标准流。
为什么需要浮动?
有很多的布局效果,标准流没有办法完成,此时就可以利用浮动完成布局。因为浮动可以改变元素标签默认的排列方式。
浮动最典型的应用:可以让多个块级元素-行内排列显示。
什么是浮动?
float属性用于创建浮动框,将其移动到一边,直到左边缘或右边缘触及包含块或另-个浮动框的边缘。
可能的值
值 | 描述 |
---|---|
left | 元素向左浮动。 |
right | 元素向右浮动。 |
none | 默认值。元素不浮动,并会显示在其在文本中出现的位置。 |
inherit | 规定应该从父元素继承 float 属性的值。 |
浮动和标准流的父盒子搭配。
-
先用标准流的父元素排列.上下位置.
-
之后内部子元素采取浮动排列左右位置
一个元素浮动了,理论上其余的兄弟元素也要浮动。
- 盒子里面有多个子盒子, 如果其中-一个盒子浮动了 ,那么其他兄弟也应该浮动,以防止引起问题。
- 浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流.(例如下图:会在第一个标准流后面)
其他
- 浮动上沿对齐。
- 如果父级宽度装不下这些浮动的盒子,多出的盒子会另起一行对齐。
- 浮动有行内块属性。
- 行盒子
- 可以直接设置高度与宽度。例如:span添加
float:left
。
- 可以直接设置高度与宽度。例如:span添加
- 块级盒子
- 没有设置宽度,默认宽度和父级一样宽。添加浮动后,它的默认宽度根据内容来决定
- 行盒子
由于父级盒子很多情况下,不方便给高度,但是子盒子浮动又不占有位置,最后父级盒子高度为0时,就会 影响下面的标准流盒子。
/*在实际工作中,几乎只用下面的*/
clear:both;
常用后3种。
1.额外标签法也称为隔墙法,是W3C推荐的做法。 2.父级添加overflow属性 3.父级添加after伪元素 4.父级添加双伪元素
额外标签法也称为隔墙法,是W3C推荐的做法。 额外标签法会在浮动元素末尾添加一个空的标签。
- 例如
<div style=" clear:both" > </div>
- 或者其他标签(如
<br/>
)。 - 必须块级元素,不能是行元素。
优点:通俗易懂,书写方便
缺点:添加许多无意义的标签,结构化较差
overflow:hidden;
overflow很神奇,还可以控制滚动轴,今后会详细说明。
●优点: 代码简洁 ●缺点: 无法显示溢出的部分
.clearfix:after {
content: "";
display: block;
height: 0;
clear: both;
visibility: hidden;
}
/* IE6、 7专有*/
.clearfix {
*zoom: 1;
}
/*父元素种添加这个*/
<div class="box clearfix">
<div class='damao'>
大毛
</div>
<div class="ermao">
二毛
</div>
</div>
小米、腾讯都用的是这个。
.clearfix : before,
.clearfix : after {
content:"";
display: table;
}
.clearfix:after {
clear: both;
}
.clearfix {
*zoom:1;
}
/*父元素种添加这个*/
<div class="box clearfix">
<div class='damao'>
大毛
</div>
<div class="ermao">
二毛
</div>
</div>
- 一个图片浮动在另外一个上面
- 固定在屏幕上的某个位置
定位= 定位模式+边偏移
通过opsition
实现
可能的值
值 | 描述 |
---|---|
absolute | 生成绝对定位的元素,相对于 static 定位以外的第一个父元素进行定位。元素的位置通过 "left", "top", "right" 以及 "bottom" 属性进行规定。 |
fixed | 生成固定定位的元素,相对于浏览器窗口进行定位。元素的位置通过 "left", "top", "right" 以及 "bottom" 属性进行规定。 |
relative | 生成相对定位的元素,相对于其正常位置进行定位。因此,"left:20" 会向元素的 LEFT 位置添加 20 像素。 |
static | 默认值。没有定位,元素出现在正常的流中(忽略 top, bottom, left, right 或者 z-index 声明)。 |
inherit | 规定应该从父元素继承 position 属性的值。 |
- 在页面中不动:fixed
- 盖上另外一个盒子: absolute
边偏移就是定位的盒子移动到最终位置。有top、bottom、 left 和right 4个属性。
不常用,position:static
相对自我原有位子的定位。 自恋型
position:relative;
top:100px;
虽然这个盒子走了,但是位置还保留。
例如学成在线
中的鼠标移动上去,出现抖动的例子。
.box .box-bd ul li:hover{
box-shadow: 0 5px 8px -4px rgba(0,0,0,0.1);
position: relative;
top: -2px;
}
是跟父元素来定位的。
绝对定位的特点: ( 务必记住)
- 1.如果没有祖先元素或者祖先元素没有定位,则以浏览器为准定位( Document文档)。
- 2.如果祖先元素有定位(相对、绝对、固定定位) , 则以最近一级的有定位祖先元素为参考点移动位置。
- 3.绝对定位不占有位置。
绝对定位的案例:轮播图
[相对定位]常给[绝对定位]当爹
为什么这么来说的,因为absolute
的父元素必须有定位,不然就按照浏览器的定位来做。
所以为了不影响原有特性,可以给父元素加一个定位模式。
例如淘宝图中的这几个按钮,在图片中居中。
固定定位是元素固定于浏览器可视区的位置。主要使用场景:可以在浏览器页面滚动时元素的位置不会改变。
固定定位的特点: (务必记住)
- 1.以浏览器的可视窗口为参照点移动元素。
- 跟父元素没有任何关系
- 不随滚动条滚动。
- 2.固定定位不在占有原先的位置。
- 固定定位也是脱标的,其实固定定位也可以看做是一种特殊的绝对定位。
小算法: 1.让固定定位的盒子left: 50%.走到浏览器可视区(也可以看做版心)的一半位置。 2.让固定定位的盒子margin-eft:版心宽度的一半距离。多走 版心宽度的一半位置 就可以让固定定位的盒子贴着版心右侧对齐了。
示例代码
fixed {
position: fixed;
/*1.走浏览器宽度的一半*/
left: 50%;
/*2.利用margin 走版心盒子宽度的一半*/
margin-left: 400px ;
width: 50px;
height: 150px;
background-color: skyblue ;
}
粘性定位可以被认为是相对定位和固定定位的混合。Sticky 粘性的
不常用的原因:兼容性较差, IE不支持。
选择器{ position: sticky top: 10px; }
类似京东的这个导航,但是京东是用Js做的。
粘性定位的特点:
- 1.以浏览器的可视窗口为参照点移动元素(固定定位特点)
- 2.粘性定位占有原先的位置(相对定位特点)
- 3.必须添加top. left. right. bottom 其中-一个才有效
- 跟页面滚动搭配使用。兼容性较差, IE不支持。
数值越大越放在上面
选择器{ z-index: 1; }
● 数值可以是正整数、负整数或0,默认是auto ,数值越大,盒子越靠上 ● 如果属性值相同,则按照书写顺序,后来居上 ● 数字后面不能加单位 ● 只有定位的盒子才有 z-index属性
绝对定位和固定定位也和浮动类似。 1.行内元素添加绝对或者固定定位,可以直接设置高度和宽度。 2.块级元素添加绝对或者固定定位,如果不给宽度或者高度,默认大小是内容的大小。
绝对定位(固定定位)会完全压住盒子
- 浮动元素不同,只会压住它下面标准流的盒子,但是不会压住下面标准流盒子里面的文字。
- 绝对定位(固定定位)会压住下面标准流所有的内容。
浮动为什么不压文字呢?
浮动的最初是为了让文字围绕的. 例如下面的效果。
核心原理:将网页中的一些小背景图像整合到-张大图中,这样服务器只需要一次请求就可以了。
1.精灵图主要针对于小的背景图片使用。 2.主要借助于背景位置来实现--background position. 3.一般情况下精灵图都是负值。( 千万注意网页中的坐标: x轴右边走是正值,左边走是负值,y轴同理。)
.box1 {
width: 60px;
height: 60px;
margin: 100px auto;
background: url(images/sprites.png) no-repeat -182px 0;
}
网站上常用的字体图标。
●轻量级:一个图标字体要比一系列的图像要小。- -旦字体加载了,图标就会马上渲染出来,减少了服务器请求 ●灵活性:本质其实是文字,可以很随意的改变颜色、产生阴影、透明效果、旋转等 ●兼容性: 几乎支持所有的浏览器,请放心使用
1.如果遇到一-些结构和样式比较简单的小图标,就用字体图标。 2.如果遇到-些结构和样式复杂-点的小图片 ,就用精灵图。
解压后是这个样子
在style.css有引用的目录。
可以修改名字,然后在html中引用。
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>字体</title>
<link rel="stylesheet" href="style.css">
<style>
* {
margin: 0;
padding: 0;
}
.w{
width: 444px;
height: 322px;
margin: 100px auto;
}
.icon{
color:red;
}
</style>
</head>
<body>
<div class="w">
<span class="icon-database icon"></span>
<i class="icon-database icon"></i>
</div>
</body>
打开网站,将selection.json
上传,就发现自己以前选中的字体。
然后选中新的字体,然后重新下载。
如果将每个边都指定不同的颜色,就显示上图的样子
div {
width: 0;
height: 0;
line-height: 0;
font-size: 0;
border: 50px solid transparent;
border- left-color: pink ;
}
京东三角的应用
<style>
.jd{
position:relative;
width: 120px;
height: 249px;
margin-left: 50px;
background-color:pink;
}
.jd-up {
position: absolute;
top: -10px;
left: 80%;
width: 0;
height: 0;
line-height: 0;
font-size: 0;
border: 5px solid transparent;
border-bottom-color:pink ;
}
</style>
<div class="jd">
<div class="jd-up"></div>
</div>
1i {cursor: pointer;
常用的:
- default
- pointer 小手
- move 移动
- text 文字
- not-allowed 如京东不能小于1
可能的值
值 | 描述 |
---|---|
url | 需使用的自定义光标的 URL。注释:请在此列表的末端始终定义一种普通的光标,以防没有由 URL 定义的可用光标。 |
default | 默认光标(通常是一个箭头) |
auto | 默认。浏览器设置的光标。 |
crosshair | 光标呈现为十字线。 |
pointer | 光标呈现为指示链接的指针(一只手) |
move | 此光标指示某对象可被移动。 |
e-resize | 此光标指示矩形框的边缘可被向右(东)移动。 |
ne-resize | 此光标指示矩形框的边缘可被向上及向右移动(北/东)。 |
nw-resize | 此光标指示矩形框的边缘可被向上及向左移动(北/西)。 |
n-resize | 此光标指示矩形框的边缘可被向上(北)移动。 |
se-resize | 此光标指示矩形框的边缘可被向下及向右移动(南/东)。 |
sw-resize | 此光标指示矩形框的边缘可被向下及向左移动(南/西)。 |
s-resize | 此光标指示矩形框的边缘可被向下移动(南)。 |
w-resize | 此光标指示矩形框的边缘可被向左移动(西)。 |
text | 此光标指示文本。 |
wait | 此光标指示程序正忙(通常是一只表或沙漏)。 |
help | 此光标指示可用的帮助(通常是一个问号或一个气球)。 |
给表单添加outline: 0;或者outline: none;样式之后,就可以去掉默认的蓝色边框。
学成在线上面的搜索框。
input {outline: none;}
默认这个小三角可以拖动文本框的大小。文本域要放在一行。
textarea {
resize: none
}
<!-- 2.防止拖拽文本域-->
<textarea name=
id=""
cols="30"
rows= "10">< /textarea>
vertical-align:middle;
该属性定义行内元素的基线相对于该元素所在行的基线的垂直对齐。
例如学成在想中用户图像与昵称,可以在图像上添加:
.user img{
vertical-align:middle;
}
给文本框添加vertical-align:middle;
<textarea name="" id=" cols="30" rows= "10" ></textarea>请您留言
值 | 描述 |
---|---|
baseline | 默认。元素放置在父元素的基线上。 |
sub | 垂直对齐文本的下标。 |
super | 垂直对齐文本的上标 |
top | 把元素的顶端与行中最高元素的顶端对齐 |
text-top | 把元素的顶端与父元素字体的顶端对齐 |
middle | 把此元素放置在父元素的中部。 |
bottom | 把元素的顶端与行中最低的元素的顶端对齐。 |
text-bottom | 把元素的底端与父元素字体的底端对齐。 |
length | |
% | 使用 "line-height" 属性的百分比值来排列此元素。允许使用负值。 |
inherit | 规定应该从父元素继承 vertical-align 属性的值。 |
由于默认是vertical-align:baseline
,是基线对齐,所以有小边框。
修改成:vertical-align:middle
等任意数值就行。
第二种解决方案
修改成块元素也可以 display:block;
推荐用第一种。
①②③④⑤⑥⑦⑧⑨
/*1.先强制一行内显示文本*/
white-space: nowrap; ( 默认normal自动换行)
/*2.超出的部分隐藏*/
overflow: hidden;
/*3.文字用省略号替代超出的部分*/
text-overflow: ellipsis;
多行文本溢出显示省略号,有较大兼容性问题,适合于webKit浏览器或移动端(移动端大部分是webkit内核)
这里必须:将div的高度设置成一定高度。
overflow: hidden;
text-overflow: ellipsis;
/*弹性伸缩盒子模型显示*/
display: -webkit-box;
/*限制在一个块元素显示的文本的行数*/
-webkit-line-clamp: 2;
/*设置或检索伸缩盒对象的子元素的排列方式*/
-webkit-box-orient: vertical ;
技巧
可以让后台的人来做。 因为这个功能在IE种不能用。
淘宝首页,每个页面都有一个细线边框,这样重叠在一起,就是2像素。那么怎么做呢?
ul li{
float:left;
list-style: none;
width: 150px;
height:200px;
border: 1px solid red;
margin-left: -1px;
}
<ul>
<li>1</li>
<li>1</li>
<li>1</li>
<li>1</li>
<li>1</li>
</ul>
如何让鼠标移动过去的时候,像淘宝一样有边框
第一种方法:如果盒子没有相对定位,那么添加相对定位就可以了。相对定位会压住普通定位
ul li:hover{
position:relative;
border: 1px solid blue;
}
第二种方法:如果li有相对定位,那么例子z-index提高层级。
ul li:hover{
z-index: 1;
border: 1px solid blue;
}
通过浮动的文字特性,用最简单的代码来实现。
<style>
* {
margin:0px;
padding:0px;
}
.box{
width: 300px ;
height: 70px;
background-color: pink;
margin:0 auto;
padding:5px;
}
.pic {
float: left;
width: 120px;
height: 60px;
margin-right:5px;
}
.pic img {
width: 100%;
}
</style>
<body>
<div class="box">
<div class="pic">
<img src="aaa.jpg">
</div>
<p>1232213123123123</p>
</div>
< /body>
通过行内块,快速制作一个分页组件。
行内块的好处:
- 默认每个块都都有一个空格
- 给父块设置
text-align:center;
,那么子元素就居中了。 - 注意:要在文件头添加:
* {margin:0px;padding:ppx;}
<div class="box w">
<a href="#" class="prev"><上一页</a>
<a href="#">1</a>
<a href="#" class="current">2</a>
<a href="#">3</a>
<a href="#">4</a>
<a href="#">5</a>
<a href="#">6</a>
<a href="#" class="epl">...</a>
<a href="#" class="next">下一页></a>
到第<input/>页
<a class="button" href="#">确定</a>
</div>
这种布局不常用了。
例如京东的这个小三角是怎么做出的呢?参考视频
.box1 {
width: 0;
height: 0;
border-top: 100px solid transparent ;
border-right: 50px solid skyblue ;
border-bottom: 0 solid。blue;
border-left: 0 solid green;
}
简写方式:
/* 1.只保留右边的边框有颜色*/
border- color: transparent red transparent transparent;
/* 2.样式都是solid */
border-style: solid;
/* 3. 上边框宽度要大,
右边框宽度稍小,其 余的边框该为0 */
border-width: 100px 50px 0 0 ;
具体的例子
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>分页</title>
<style>
* {
margin: 0px;
padding: 0px;
}
.w{
width: 1240px;
margin: 0px auto;
}
em, i {
font-style: normal;
}
.box{
margin: 10px auto;
text-align: center;
background-color:pink;
width: 180px;
height: 24px;
border: 1px solid red;
}
.box .left{
float: left;
width: 50%;
height: 24px;
background-color: red;
color: #fff;
text-align: center;
line-height: 24px;
}
.box .sj{
float: left;
/* 1.只保留右边的边框有颜色*/
border-color: transparent #fff transparent transparent;
/* 2.样式都是solid */
border-style: solid;
/* 3. 上边框宽度要大,
右边框宽度稍小,其 余的边框该为0 */
border-width: 24px 12px 0 0;
margin-left: -12px;
}
.box .right{
float: left;
width: 50%;
height: 24px;
background-color: #fff;
text-align: center;
line-height: 24px;
color: #999;
text-decoration: line-through;
font-size: 12px;
}
</style>
</head>
<body>
<div class="box">
<div class="left">
<i>¥</i>
<span>98.80</span>
</div>
<div class="sj"></div>
<div class="right">
<i>¥</i>
<span>198.80</span>
</div>
</div>
</body>
另外一个写法
这个结构看起来好点,把三角放到了left的盒中了,这样定位代码更加清晰。
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>CSS三角强化的巧妙运用</title>
<style>
.box1 {
width: 0;
height: 0;
/* 把上边框宽度调大 */
/* border-top: 100px solid transparent;
border-right: 50px solid skyblue; */
/* 左边和下边的边框宽度设置为0 */
/* border-bottom: 0 solid blue;
border-left: 0 solid green; */
/* 1.只保留右边的边框有颜色 */
border-color: transparent red transparent transparent;
/* 2. 样式都是solid */
border-style: solid;
/* 3. 上边框宽度要大, 右边框 宽度稍小, 其余的边框该为 0 */
border-width: 100px 50px 0 0 ;
}
.price {
width: 160px;
height: 24px;
line-height: 24px;
border: 1px solid red;
margin: 0 auto;
}
.miaosha {
position: relative;
float: left;
width: 90px;
height: 100%;
background-color:red;
text-align: center;
color: #fff;
font-weight: 700;
margin-right: 8px;
}
.miaosha i {
position: absolute;
right: 0;
top: 0;
width: 0;
height: 0;
border-color: transparent #fff transparent transparent;
border-style: solid;
border-width: 24px 10px 0 0;
}
.origin {
font-size: 12px;
color: gray;
text-decoration: line-through;
}
</style>
</head>
<body>
<div class="box1"></div>
<div class="price">
<span class="miaosha">
¥1650
<i></i>
</span>
<span class="origin">¥5650</span>
</div>
</body>
</html>
例如京东的初始化代码
- 右键查看京东代码
- 点击first-screen.chunk.css
- background-image 前的代码复制过来
/* 把我们所有标签的内外边距清零 */
* {
margin: 0;
padding: 0
}
/* em 和 i 斜体的文字不倾斜 */
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 {
/* "\5B8B\4F53" 就是宋体的意思 这样浏览器兼容性比较好 */
font-family: Microsoft YaHei, Heiti SC, tahoma, arial, Hiragino Sans GB, "\5B8B\4F53", sans-serif
}
body {
/* CSS3 抗锯齿形 让文字显示的更加清晰 */
-webkit-font-smoothing: antialiased;
background-color: #fff;
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
}
IE9 以上浏览器与移动端适用。
以前布局,我们基本用div来做。div 对于搜索引擎来说,是没有语义的。
- header
- nav 导航标签
- article 内容标签
- section 定义文档的某个区域,类似div
- aside 侧边栏
- footer 尾部
注意: ●这种语义化标准主要 是针对搜索引擎的 ●这些新标签页面中可以使用多次 ●在 IE9中,需要把这些元素转换为块级元素 ●实际中我们移动端更喜欢使用这些标签 ●HTML5还增加了很多其他标签,我们后面再慢慢学
例如小米中的转换
article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}
1.音频: 2.视频:
视频
添加静音标签muted= "muted"
,这样在谷歌浏览器下,也可以播放。
<video src= "media/mi.mp4" autoplay= " autoplay" muted= "muted"></video>
建议适用mp4
HTML5 中的新属性。
属性 | 值 | 描述 |
---|---|---|
autoplay | autoplay | 如果出现该属性,则音频在就绪后马上播放。 |
controls | controls | 如果出现该属性,则向用户显示控件,比如播放按钮。 |
loop | loop | 如果出现该属性,则每当音频结束时重新开始播放。 |
muted | muted | 规定视频输出应该被静音。 |
preload | preload | 如果出现该属性,则音频在页面加载时进行加载,并预备播放。如果使用 "autoplay",则忽略该属性。 |
src | url | 要播放的音频的 URL。 |
poster | 加载前的背景图片 |
音频标签
google默认不播放,需要用js来做。
<audio controls height="100" width="100">
<source src="horse.mp3" type="audio/mpeg">
<source src="horse.ogg" type="audio/ogg">
<embed height="50" width="100" src="horse.mp3">
</audio>
type属性
属性值
值 | 描述 |
---|---|
button | 定义可点击的按钮(大多与 JavaScript 使用来启动脚本) |
checkbox | 定义复选框。 |
color | 定义拾色器。 |
date | 定义日期字段(带有 calendar 控件) |
datetime | 定义日期字段(带有 calendar 和 time 控件) |
datetime-local | 定义日期字段(带有 calendar 和 time 控件) |
month | 定义日期字段的月(带有 calendar 控件) |
week | 定义日期字段的周(带有 calendar 控件) |
time | 定义日期字段的时、分、秒(带有 time 控件) |
定义用于 e-mail 地址的文本字段 | |
file | 定义输入字段和 "浏览..." 按钮,供文件上传 |
hidden | 定义隐藏输入字段 |
image | 定义图像作为提交按钮 |
number | 定义带有 spinner 控件的数字字段 |
password | 定义密码字段。字段中的字符会被遮蔽。 |
radio | 定义单选按钮。 |
range | 定义带有 slider 控件的数字字段。 |
reset | 定义重置按钮。重置按钮会将所有表单字段重置为初始值。 |
search | 定义用于搜索的文本字段。 |
submit | 定义提交按钮。提交按钮向服务器发送数据。 |
tel | 定义用于电话号码的文本字段。 |
text | 默认。定义单行输入字段,用户可在其中输入文本。默认是 20 个字符。 |
url | 定义用于 URL 的文本字段。 |
- required
- placeholder
- autofocus 自动获得焦点
- autocomplete 记录提交的数值
- multiple 多选文件
如何改变placeholder的颜色
input::placeholder{
color:pink;
}
IE9以上版本支持。
①②③④⑤⑥⑦⑧⑨
/*属性等于某个数值--常用*/
input[type=text] {
color:pink;
}
/*有value这个属性*/
input[value] {
color:pink;
}
/*模糊匹配 以icon开头的*/
div[class^=icon] {
color:pink;
}
/*模糊匹配 以icon结尾的*/
div[class$=icon] {
color:pink;
}
/*模糊匹配 有icon的*/
div[class*=icon] {
color:pink;
}
属性选择器的权重比较高:10
根据结构,也就是顺序。
/* 1.选择uL里面的第一个孩子小i */
ul li:first-child {
background-color:pink;
}
ul li:last-child {
background-color:pink;
}
ul li:nth-child(2) {
background-color:pink;
}
ul li:nth-child(even) {
background-color:pink;
}
/*用公式
n : 全部
2n : 偶数
2n+1 : 奇数
5n : 5的倍数 (例如学成在线,一行5个。)
n+5 : 从第五个开始
-n+5 : 前5个
*/
ul li:nth-child(n) {
background-color:pink;
}
/*
nth-of-type nth-child 区别
nth-child 把所有孩子都计算 , 下面这个不会选择
*/
.section div:nth-child(1) {
background-color: red;
}
.section div:nth-of-type(1) {
background-color: blue;
}
<div class='section'>
<p> 123 </p>
<div> 2 </div>
<div> 3 </div>
</div>
nth-child (n)选择某个父元素的一个或多个特定的子元素
- n 可以是数字,关键字和公式
- n如果是数字,就是选择第n个子元素,里面数字从1开始..
- n可以是关键字:even偶数,odd奇数
- n 可以是公式:常见的公式如下(如果n是公式,则从0开始计算,
- 但是第0个元素或者超出了元素的个数会被忽略)
表格隔行变色
通过CSS创建一个CSS标签。
::before
::after
必须有content
●before 和after创建一个元素 ,但是属于行内元素 ●新创建的这个元素在文档树中是找不到的 ,所以我们称为伪元素 ●语法: element::before{} ●before 和after必须有content属性 ●before在父元素内容的前面创建元素, after 在父元素内容的后面插入元素 ●伪元素选择器和标签选择器一样,权重为1
.child::before{
content: "ddd";
}
适用场景
例如:带有的箭头,图片的遮罩。 不用在html中添加内容。
常规做法
.mask{
display:none;
position: absolute;
top: 0;
width: 100%;
height: 100%;
background: url('arr.png') no-repeat rgba(0,0,0,0.4) center center ;
}
/* 这个写法比较特别 */
.tudou:hover .mask{
display:block;
}
改进做法
.tudou::before{
content:'';
display:none;
position: absolute;
top: 0;
width: 100%;
height: 100%;
background: url('arr.png') no-repeat rgba(0,0,0,0.4) center center ;
}
/* 这个写法比较特别 */
.tudou:hover::before{
display:block;
}
官方推荐的隔墙法。
.clearfix::after {
content: "";
display: block;
height: 0;
clear: both;
visibility: hidden;
}
.clearfix::before, .clearfix::after {
content:”";
display:table;
}
. clearfix:after {
clear :both;
}
可以分成两种情况:
- box-sizing: content box盒子大小为width + padding + border ( 以前默认的)
- box- sizing: border- box盒子大小为width
div {
width: 200px;
height :
200px ;
background-color:pink;
border: 20px solid red;
padding: 15px ;
box-sizing: content-box; /*传统模式*/
box-sizing: border-box; /*新的模式*/
}
图像边模糊
/*filter:函数();例如 : filter: blur(5px); blur模糊处理 数值越大越模糊*/
img {
-webkit-filter: blur(5px); /* Chrome, Safari, Opera */
filter: blur(5px);
}
- 转化图像的透明程度
- 图片使用高斯模糊效果
- 给图像设置一个阴影效果
calc()此CSS函数让你在声明CSS属性值时执行一些计算。
width: calc(100% - 80px);
例如让子盒子永远比父盒子小80像素
京东用到这种用法。
过渡动画:是从一个状态渐渐的过渡到另外一个状态 可以让我们页面更好看,更动感十足,虽然低版本浏览器不支持( ie9以下版本)但是不会影响 页面布局。 我们现在经常和:hover -起搭配使用。
transition:属性 花费时间 运动曲线 何时开始;
- 1.属性:想要变化的css属性,宽度高度背景颜色内外边距都可以。
- 如果想要所有的属性都变化过渡,写一个all就可以。
- 2.花费时间:单位是秒(必须写单位)比如0.5s
- 3.运动曲线:默认是ease(可以省略)
- 4.何时开始: 单位是秒(必须写单位)可以设置延迟触发时间默认是0s ( 可以省略)
下面例子变宽
transition:with 0.5s;
/*两个,用逗号分隔*/
transition:with 0.5s,height 0.5s;
/*全部*/
transition:all 0.5s;
- transform
- translate
- 类似定位,进行移动
- 不会影响其他元素位置。 position:relative 的效果差不多
- translateX(50%)是按照盒子自身的宽度的50%
- 对行内元素无效
- rotate 旋转
- 单位 deg
- 都是元素中心
- transform-origin 设置旋转中心点
transform-origin: left bottom;
- scale
- scale(2,2) 分别放大2倍
- 优点:
- 如果只设置width与height,只从最上沿变大,会影响其他盒子。
- scale大小变化,不影响其他盒子。
- 以中心点向外放大。
- translate
传统做法,做成绝对定位:向下向右移动50%,然后再后退盒子的50%,代码如下。
<div
style="
width: 200px;
height: 200px;
background-color: pink;
position: relative;
"
>
<p
style="
position: absolute;
width: 50px;
height: 50px;
background-color: skyblue;
left: 50%;
top: 50%;
margin-left: -25px;
margin-top: -25px;
"
></p>
</div>
使用:transform: translate(-50%,-50%);
替换
margin-left: -25px;
margin-top: -25px;
必须设置下面的属性
* {
margin: 0px;
padding: 0px;
}
.translate{
transition:all 0.5s;
}
.translate:hover{
transform: rotate(360deg);
}
<img src="upload/recom_00.png" alt="" class="translate" >
感觉用字体图标用起来比较方便,但是用旋转也可以做。
- 优点:有动画的效果。
- 缺点:代码写的比较多一点。
.sanjiao::after{
content: "";
display:inline-block;
width: 8px;
height: 8px;
border-right:1px solid #ccc;
border-bottom:1px solid #ccc;
transform: rotate(45deg);
margin-top: 10px;
transition: all 0.5s;
}
.sanjiao:hover:after{
transform: rotate(225deg);
margin-top: 14px;
}
<div
style="
width: 200px;
height: 32px;
border: 1px solid #ccc;
text-align: right;
padding: 0 10px;
"
class="sanjiao"
>
.origin{
overflow: hidden;
width: 200px;
height: 200px;
margin: 0 auto;
border: 1px solid #ccc;
}
.origin::after{
content: "小鱼";
display: block;
width: 100%;
height: 100%;
background-color:pink;
transform-origin: left bottom;
transform: rotate(180deg);
transition: all 0.7s;
}
.origin:hover::after{
transform: rotate(0deg);
}
<div class="origin"></div>
在商品列表中,鼠标经过有一个动画效果。这里可以使用图片放大,就不用关心边框的问题了。
- 使用scale
- 外边框使用overflow:hidden;避免图片超过边框。
.scale{
display: inline-block;
border: 1px solid #ccc;
height: 161px;
overflow: hidden;
}
.scale img:hover{
transform: scale(1.1);
}
鼠标经过那个按钮,那个按钮变大。
.page{
width: 200px;
height: 50px;
line-height: 50px;
border: 1px solid #ccc;
margin: 0 auto ;
padding: 0 15px;
}
.page button{
width: 25px;
height: 25px;
border: 1px solid skyblue;
border-radius: 50%;
transition: scale 0.3s;
margin-left: 10px;
}
.page button:hover{
transform: scale(1.1);
}
<div class="page">
<button>1</button>
<button>2</button>
<button>3</button>
<button>4</button>
<button>5</button>
</div>
transform 用空格可以实现多个效果。 但是有顺序, 要先位移,然后做其他的效果
2D变化总结
●转换transform 我们简单理解就是变形有2D和3D之分 ●我们暂且学了三个分别是位移旋转和缩放 ●2D 移动translate(x, y)最大的优势是不影响其他盒子 ,里面参数用% ,是相对于自身宽度和高度来计算的 ●可以分开写比如 translateX(x)和translateY(y) ●2D旋转rotate(度数) 可以实现旋转元素度数的单位是deg ●2D 缩放sacle(x,y)里面参数是数字不跟单位可以是小数最大的优势不影响其他盒子 ●设置转换中心点 transform-origin:xy;参数可以百分比、 像素或者是方位名词 ●当我们进行综合写法 ,同时有位移和其他属性的时候,记得要将位移放到最前
制作动画分为两步:
- 先定义动画
- 再使用(调用)动画
动画序列
0%是动画的开始, 100% 是动画的完成。这样的规则就是动画序列。 ●在 @keyframes中规定某项CSS样式,就能创建由当前样式逐渐改为新样式的动画效果。 ●动画是使元素从- 种样式逐渐变化为另-种样式的效果。 您可以改变任意多的样式任意多的次数。 ● 请用百分比来规定变化发生的时间,或用关键词"from"和"to" ,等同于6%和100%。
属性
https://www.w3school.com.cn/cssref/pr_animation.asp
语法
animation: name duration timing-function delay iteration-count direction;
值 | 描述 |
---|---|
animation-name | 规定需要绑定到选择器的 keyframe 名称。。 |
animation-duration | 规定完成动画所花费的时间,以秒或毫秒计。 |
animation-timing-function | 规定动画的速度曲线。 |
animation-delay | 规定在动画开始之前的延迟。 |
animation-iteration-count | 规定动画应该播放的次数。 |
animation-direction | 规定是否应该轮流反向播放动画。 |
animation-fill-mode:forwards
停在最终位置,不在动了。
animation-play-state
鼠标放在上面就停止了,然后移动后,还继续走。
/* 定义动画 */
@keyframes move{
/*也可以用from to 来替换*/
0%{
transform: translateX(0px);
}
100%{
transform:translateX(500px)
}
}
.my_move{
width: 50px;
height: 50px;
background-color: pink;
/* 使用动画 */
animation-name: move;
animation-duration: 1s;
}
- 定义一个div,里面包含4个小div.
- 如何让这4个div重叠在一起?
top:50%; left:50% ; transform:translate(-50%,-50%)
- 如何让闪烁?
- 让阴影进行变化。
- 让不同的盒子,启动的时间不一样,这样就造成了闪烁的效果。
- 用scale不好看,会把阴影变大。
<style>
.city {
position: absolute;
top: 200px;
right: 193px;
color: #fff;
}
.dotted {
width: 8px;
height: 8px;
background-color: #09f;
border-radius: 50%;
}
.city div[class^="pulse"] {
/* 保证我们小波纹在父盒子里面水平垂直居中 放大之后就会中心向四周发散 */
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 8px;
height: 8px;
box-shadow: 0 0 12px #009dfd;
border-radius: 50%;
animation: pulse 1.2s linear infinite;
}
.city div.pulse2 {
animation-delay: 0.4s;
}
.city div.pulse3 {
animation-delay: 0.8s;
}
@keyframes pulse {
0% {}
70% {
/* transform: scale(5); 我们不要用scale 因为他会让 阴影变大*/
width: 40px;
height: 40px;
opacity: 1;
}
100% {
width: 70px;
height: 70px;
opacity: 0;
}
}
</style>
<div class="city">
<div class="dotted"></div>
<div class="pulse1"></div>
<div class="pulse2"></div>
<div class="pulse3"></div>
</div>
使用了steps的属性。
- 定义一个div,里面有20个字。
- 先让div的宽度为0 , 然后记录每个字的宽度,计算一共需要多少步。
- 然后使用step让div的宽度扩展到最后。
- 使用forwards保证会在结尾结束
- 使用overflow来隐藏文字。 使用
white-space:nowrap
要求文字步折行。
.text{
width: 0;
height: 30px;
font-size: 20px;
/* background-color: pink; */
animation-name: typein;
animation-duration: 2s;
animation-fill-mode: forwards;
animation-timing-function: steps(7);
overflow: hidden;
}
@keyframes typein{
0%{
}
100%{
width: 145px;
}
}
<div class="text">
小鱼是个好宝宝
</div>
视频中的案例 是给div添加了一个背景,然后通过移动背景位置来进行效果显示。在给div添加两个动画时,可以通过逗号
来实现。
我是给div添加了一个图片,分别给图片与div,添加了两个动画。
还有以下技巧需要实现:
- 如果添加两张背景图片,并且显示不同的位置。
- 如果将小熊移动到浏览器的最下面。我使用的是
position: absolute;bottom: 0;margin-bottom: 20px;
- 使用
top:100%;
效果不行,会出现滚动轴。
- 使用
<head>
<style>
* {
margin: 0;
padding: 0;
}
body {
background-image: url(images/bear/bg1.png), url(images/bear/bg2.png);
background-repeat: no-repeat, no-repeat;
background-attachment: fixed, fixed;
background-position: bottom left, bottom left;
background-color: #3d413c;
/* background-size: contain, cover; */
}
.bear {
position: absolute;
width: 200px;
height: 100px;
bottom: 0;
margin-bottom: 20px;
overflow: hidden;
animation-name: move;
animation-duration: 3s;
animation-fill-mode: forwards;
}
.bear img {
animation-name: runing;
animation-timing-function: steps(8);
animation-duration: 1s;
animation-iteration-count: infinite;
}
@keyframes runing {
0% {
transform: translateX(0);
}
100% {
transform: translateX(-1600px);
}
}
@keyframes move {
from {
left: 0;
}
to {
left: 50%;
transform: translateX(-50%);
}
}
</style>
</head>
<body>
<div class="bear">
<img src="images/bear/bear.png" alt="" />
</div>
</body>
三维坐标系其实就是指立体空间,立体空间是由3个轴共同组成的。
-
x轴: 水平向右
-
注意: x右边是正值,左边是负值
-
y轴:垂直向下
- 注意: y下面是正值,上面是负值
-
z轴: 垂直屏幕
- 注意:往外面是正值,往里面是负值
主要知识点
- 3D位移: translate3d(x,y,z)
- 3D旋转: rotate3d(x,y,z)
- 透视: perspective
- 放父窗口,一帮放在body
- 3D星现transfrom-style
- 放在父盒子,保证子盒子有3D效果
- box父盒子里面包含前后两个子盒子
- box是翻转的盒子front是前面盒子back是后面盒子
- 初始状态:将后面盒子先反转180度
- 鼠标移动上去后,将父盒子反转过来,就能看到背面了。
- 要保证父盒子的子盒子也要有3d效果
transform-style: preserve-3d;
- 要保证父盒子的子盒子也要有3d效果
.pai {
position: relative;
width: 100px;
height: 100px;
margin: 0 auto;
transition: transform 1s;
transform-style: preserve-3d;
transform: rotateX(20deg);
}
.pai:hover {
cursor: pointer;
transform: rotateX(20deg) rotateY(180deg);
}
.front,
.back {
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
background-color: blue;
color: #fff;
text-align: center;
line-height: 100px;
border-radius: 50%;
}
.back {
background-color: red;
transform: rotateY(180deg);
}
<div class="pai">
<div class="back">反面</div>
<div class="front">正面</div>
</div>
有两个div
- 其中一个放倒,然后往下移动一半。
- 正面那个,向前移动一半。
<style>
.menu3d {
position: relative;
margin-left: 50px;
width: 64px;
height: 32px;
transform-style: preserve-3d;
transition: transform 0.5s;
}
.menu3d:hover {
transform: rotateX(90deg);
}
.menu3d .front,
.menu3d .bottom {
position: absolute;
width: 100%;
height: 100%;
left: 0;
right: 0;
background-color: red;
color: #fff;
text-align: center;
line-height: 32px;
}
.menu3d .bottom {
background-color: blue;
/* 必须先选准后移动,并且x轴移动的角度要做判断 */
transform: translateY(16px) rotateX(-90deg);
}
.menu3d .front {
z-index: 1;
transform: translateZ(16px);
}
</style>
<ul>
<li>
<div class="menu3d">
<div class="front">正面</div>
<div class="bottom">反面</div>
</div>
</li>
</ul>
<style>
body {
perspective: 1000px;
}
section {
position: relative;
width: 300px;
height: 200px;
margin: 150px auto;
transform-style: preserve-3d;
/* 添加动画效果 */
animation: rotate 10s linear infinite;
background: url(media/pig.jpg) no-repeat;
}
section:hover {
/* 鼠标放入section 停止动画 */
animation-play-state: paused;
}
@keyframes rotate {
0% {
transform: rotateY(0);
}
100% {
transform: rotateY(360deg);
}
}
section div {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: url(media/dog.jpg) no-repeat;
}
section div:nth-child(1) {
transform: rotateY(0) translateZ(300px);
}
section div:nth-child(2) {
/* 先旋转好了再 移动距离 */
transform: rotateY(60deg) translateZ(300px);
}
section div:nth-child(3) {
/* 先旋转好了再 移动距离 */
transform: rotateY(120deg) translateZ(300px);
}
section div:nth-child(4) {
/* 先旋转好了再 移动距离 */
transform: rotateY(180deg) translateZ(300px);
}
section div:nth-child(5) {
/* 先旋转好了再 移动距离 */
transform: rotateY(240deg) translateZ(300px);
}
section div:nth-child(6) {
/* 先旋转好了再 移动距离 */
transform: rotateY(300deg) translateZ(300px);
}
</style>
</head>
<body>
<section>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
</section>
</body>
私有前缀
- -moz- :代表firefox浏览器私有属性
- -ms- :代表ie浏览器私有属性
- -webkit- :代表safari、chrome 私有属性
- -0-: 代表Opera私有属性
提倡写法
-moz -border- radius: 10px;
-webkit-border-radius: 10px;
-o-border-radius: 10px;
border radius: 10px;
①②③④⑤⑥⑦⑧⑨
当面没有考虑到这种情况,都是顶端居中的。
最后也找到了两个解决方法。
行高=Box高度
也就是单独设置line-height
。
思考
- 如果height > line-height 文字偏上
- 如果height < line-height 文字偏下
在行内块中添加:vertical-align:middle;
这个的作用只能在兄弟元素之间起作用。
如果一行中与多个行内块元素,这时候要分别设置,如果设置不一样的参数,那么也乱套了,所以有些会在父元素上设置。
让盒子水平居中
- 步骤一:指定宽度
- 步骤二:设置margin
margin:0 auto; 左右自适应。
在父元素中,设置如下CSS
text-align:center;
相邻元素,如果没有设置:height , padding 会塌陷。 这种没有办法解决,认为是一种正常的方式。
- 都是正数,取最大
- 都是负数,取最小
- 有正有负数,取正+负
下面的例子,怎么修改下面盒子的margin-top,都不会改变间距,除非大于60px
<div style="width: 580px; height: 286px;background-color: #ddd; margin:10px auto; " >
<div style="margin-bottom: 60px;
background-color: pink; " >
margin-bottom: 20px;
</div>
<div style="margin-top: 40px;
background-color: skyblue; " >
margin-bottom: 20px;
</div>
</div>
对于两个嵌套关系(父子关系)的块元素,父元素有上外边距同时子元素也有上外边距,此时父元素会塌陷较大的外边距值。
只要子盒子有margin-top
,就有可能出现塌陷的问题。
.father{
width:400px;
height:400px;
background-color:purple;
margin-top:50px;
}
.son{
width:200px;
height:200px;
background-color:pink;
margin-top:100px;
}
<div class="father">
<div class="sun"/>
</div>
有很多解决方案,推荐使用:overflow:hidden
-
可以为父元素定义上边框。
boder: 1px solid transparent;
-
可以为父元素定义上内边距。
padding: 1px;
-
可以为父元素添加。
overflow:hidden;
-
还有其他方法,比如浮动、固定,绝对定位的盒子不会有塌陷问题,后面咱们再总结。
网页元素很多都带有默认的内外边距,而且不同浏览器默认的也不一致。因此我们在布局前,首先要清除下网页元素的内外边距。
例如body
就有一个8px的margin. ul li
也有类似的。
<body>
123456
<ul>
<li>123</li>
</ul>
</body>
简单粗暴的方法
* {
padding:0; /*清除内边框*/
margin:0; /*清除外边框*/
}
注意;行内元素为了照顾兼容性,尽量只设置左右内外边距,不要设置上下内外边距。但是转换为块级和行内块元素就可以了
影子不占用空间
box-shadow: 10px 10px 10px -4px rgba(0,0,0,0.3);
**注释:**box-shadow 向框添加一个或多个阴影。该属性是由逗号分隔的阴影列表,每个阴影由 2-4 个长度值、可选的颜色值以及可选的 inset 关键词来规定。省略长度的值是 0。
值 | 描述 | 测试 |
---|---|---|
h-shadow | 必需。水平阴影的位置。允许负值。 | 测试 |
v-shadow | 必需。垂直阴影的位置。允许负值。 | 测试 |
blur | 可选。模糊距离。 | 测试 |
spread | 可选。阴影的尺寸。 | 测试 |
color | 可选。阴影的颜色。请参阅 CSS 颜色值。 | 测试 |
inset | 可选。将外部阴影 (outset) 改为内部阴影。 | 测试 |
不常用
text-shadow:
**注释:**text-shadow 属性向文本添加一个或多个阴影。该属性是逗号分隔的阴影列表,每个阴影有两个或三个长度值和一个可选的颜色值进行规定。省略的长度是 0。
值 | 描述 | 测试 |
---|---|---|
h-shadow | 必需。水平阴影的位置。允许负值。 | 测试 |
v-shadow | 必需。垂直阴影的位置。允许负值。 | 测试 |
blur | 可选。模糊的距离。 | 测试 |
color | 可选。阴影的颜色。参阅 CSS 颜色值。 | 测试 |
类似网站广告,当我们点击关闭就不见了.但是我们重新刷新页面,会重新出现! 本质:让一个元素在页面中隐藏或者显示出来。
- display 显示隐藏
- visibility 显示隐藏
- overflow 溢出显示隐藏
display:none;
display:block; /*还有显示的意思*/
位置不保留。后面的盒子会顶替上来。
visibility:visible;/*还有显示的意思*/
visibility:hidden;
位置保留。后面的盒子不会顶替上来。
可能的值
值 | 描述 |
---|---|
visible | 默认值。内容不会被修剪,会呈现在元素框之外。 |
hidden | 内容会被修剪,并且其余内容是不可见的。 |
scroll | 内容会被修剪,但是浏览器会显示滚动条以便查看其余的内容。 |
auto | 如果内容被修剪,则浏览器会显示滚动条以便查看其余的内容。 |
inherit | 规定应该从父元素继承 overflow 属性的值。 |
auto : 需要的时候才有滚动条
-般情况下。我们都不想让溢出的内容显示出来.因为溢出的部分会影响布局。 但是如果有定位的盒子.请慎用overflow.hidden 因为它会隐藏多余的部分。
下面这个盒子,如果用,会把hot给截取的 。
- 可以快速生成html或者css
快速格式化代码: vscode: shift+alt+f
其实QQ也有这个功能。
- 是一个截图工具,可以一直显示在前面。
- 不耽误写代码
屏幕测量工具,里面有屏幕标尺的工具
具体步骤
因为网页美大部分效果图都是利用PS ( Photoshop )来做的,所以以后我们大部分切图工作都是在PS里面完成。 ●文件→打开:可以打开我们要测量的图片 ●Ctrl+R:可以打开标尺,或者视图>标尺 ●右击标尺,把里面的单位改为像素 ●Ctrl+加号(+)可以放大视图, Ctrl+减号(-)可以缩小视图 ●按住空格键,鼠标可以变成小手,拖动PS视图 ●用选区拖动可以测量大小
重点注意事项
不要用笔记本的屏幕进行测量,因为有些笔记本的屏幕默认放大到150%,所以不准。
应该在笔记本上外接一个显示器,然后在另外一个显示器上测量。
列表的下沿+上文字 = 行高
下图中,两个绿色线之间就是行高。
如何测量列表与上一个元素的间距?
这个不好测量,因为这个行高可能是line-height或者是height.
如果是line-height,那么就需要 (line-height) - font-size,然后除以2。 得到上边的空白,然后在测量文字上沿的距离,然后减去空白。
用Ps自己的功能取色
导出单个png图片。
如果图层上有文字。那么多个图层合并,然后导出
- 1.利用切片选中图片
- 利用切片工具手动划出
- 2.导出选中的图片
- 文件菜单→导出→存储为web设备所用格式→选择我们要的图片格式→存储。
- 一定要选择:选中的切片
下载地址:https://www.crx4chrome.com/extensions/iahnhfdhidomcpggpaimmmahffihkfnj/
https://fancynode.com.cn/pxcook
一个自动把图片转换成CSS的工具,看看起来非常不错。
案例的核心思路分为两步:
-
1.把链接a转换为块级元素,这样链接就可以单独占-行,并且有宽度和高度
display: block;
-
2.鼠标经过a给链接设置背景颜色
<style>
a {
display: block;
width: 240px;
line-height: 40px;
background-color: #55585a;
font-size: 16px;
color: #fff;
text-decoration:none;
text-indent: 2em;
}
a:hover{
background-color:#ff6700;
}
</style>
<body>
<a href="#">手机 电话卡</a>
<a href="#">电视 盒子</a>
<a href="#">笔记本 平板</a>
<a href="#">出行 穿戴</a>
<a href="#">智能 路由器</a>
<a href="#">健康 儿童</a>
<a href="#">耳机 音响</a>
</body>
参考网址:https://pvp.qq.com/
如何让一个文字前面有一个图片?
<style>
h3{
line-height: 40px;
width: 118px;
font-size:14px;
font-weight:400;
padding-left: 25px;
background-image: url(icon.png);
background-repeat: no-repeat;
background-position: left;
}
</style>
<h3>成长守护平台</h3>
例如中间这个图片,如何让窗口放大缩小后,图片的中心还在页面中间?
当然也可以将body替换成div之类的。
body{
background-image: url(big.jpg);
background-repeat: no-repeat;
background-position: top center ;
/*
混合方法,20px是距离顶部有20个像素
background-position: center 20px ;
*/
}
鼠标移动到链接上,会显示不同的颜色
练习价值:
练习价值:
- 1.链接属于行内元素,但是此时需要宽度高度,因此需要模式转换
- 2.里面文字需要水平居中和垂直居中.因此需要单行文字垂直居中的代码.
- 由于图片有一个小箭头,如何设置line-height,让文字靠上呢?
- 3.链接里面需要设置背景图片.因此需要用到背景的相关属性设置.
- 4.鼠标经过变化背景图片,因此需要用到链接伪类选择器.
示例代码:
<style>
.nav a{
display: inline-block;
width: 120px;
height: 58px;
text-decoration: none;
text-align: center;
/* 比高度小一点,图片会向上 */
line-height: 50px;
color: white;
}
.bg1{
background: url(wc-bg1.png) no-repeat;
}
.bg1:hover{
background-image: url(wc-bg11.png);
}
.bg2{
background: url(wc-bg2.png) no-repeat;
}
.bg2:hover{
background-image: url(wc-bg22.png);
}
</style>
<div class="nav">
<a href="#" class="bg1">五彩导航</a>
<a href="#" class="bg2">五彩导航</a>
</div>
做一个类似这样的模块
这个案例模拟了如何参考其他网站的例子,自己做一个类似的网站。
具体步骤如下:
用ps
- 用margin来解决外边框合并。
- 清除浏览器默认的内外边框 * margin padding 0
- 如何让盒子水平居中。 margin auto
为啥用不同的盒子,只用div多好?
因为每一个Html都有语义的。例如标题用h
段落用p
为什么用那么多类名呢?
便于阅读
重点练习一下测量的技巧。
这里里面有一个技巧,如何去掉 li的点。list-style: none;
其实,也可以不用ul li
,用<p>
代码会更简洁一点。
<head>
<style>
* {
margin:0px;
padding:0px;
}
.news {
margin: 50px auto;
width: 250px;
height: 165px;
border: 1px solid #cccccc;
}
.news h3{
padding: 0 15px;
font-weight: 400;
font-size: 14px;
color: #666666;
line-height: 32px;
border-bottom: 1px dotted #cccccc;
}
.news-bd{
margin-top: 7px;
padding-left: 20px;
}
.news-bd ul {
list-style: none;
}
.news-bd ul li a {
text-decoration: none;
line-height: 23px;
font-size: 12px;
color: #666666;
}
.news-bd ul li a:hover{
text-decoration:underline;
}
</style>
</head>
<body>
<div class="news">
<h3>品优购快报</h3>
<div class="news-bd">
<ul>
<li><a href="#">【特惠】爆款耳机5折秒!</a></li>
<li><a href="#">【特惠】母亲节,健康好礼低至5折!</a></li>
<li><a href="#">【特惠】爆款耳机5折秒!</a></li>
<li><a href="#">【特惠】9.9元洗100张照片!</a></li>
<li><a href="#">【特惠】长虹智能空调立省1000</a></li>
</ul>
</div>
</div>
</body>
步骤:
- 做一个大的Div居中。
- 然后做一个left,浮动到左侧。
- 然后做8个div,分别浮动到后面。设计巧妙的情况下,会折行下来。
<head>
<style>
* {
margin:0px;
padding:0px;
}
.box{
width: 1226px;
height: 615px;
background-color:pink;
margin: 10px auto;
}
.left{
float: left;
width: 234px;
height: 100%;
background-color: purple;
}
.right{
float: left;
width: 992px;
height: 100%;
background-color:skyblue;
}
.right > div{
float: left;
width: 234px;
height: 300px;
background-color: pink;
margin-left: 14px;
margin-bottom: 14px;
}
</style>
</head>
<body>
<div class="box">
<div class="left">left</div>
<div class="right">
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
<div>6</div>
<div>7</div>
<div>8</div>
</div>
</div>
</body>
搭建一个下面的网页布局。 实际上不建议使用float,可以使用dispaly:flex 或者 table
<head>
<style>
* {
margin:0px;
padding:0px;
}
.top{
height: 50px;
background-color: gray;
}
.banner{
width: 980px;
height: 150px;
background-color: gray;
margin:10px auto;
}
ul{
list-style: none;
}
.box{
width: 980px;
height: 300px;
margin: 0 auto;
background-color: gray;
}
.box li{
float: left;
width: 237.5px;
height: 300px;
background-color: pink;
margin-right: 10px;
}
.box .last{
margin-right: 0px;
}
.footer{
height: 50px;
margin-top: 10px;
background-color: gray;
}
</style>
</head>
<body>
<div class="top">top</div>
<div class="banner">banner</div>
<div class="box">
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li class="last">4</li>
</ul>
</div>
<div class="footer">footer</div>
</body>
准备工具
- psd图
- ps+cutterman
- vccode
CSS属性书写顺序(重点)
建议遵循以下顺序:
-
1.布局定位属性
- : display / position/ float / clear / vibility/ overflow (建议display第-个写,毕竟关系到模式)
-
2.自身属性
- : width/ height/ margin/ padding / border / background
-
3.文本属性
- : color/ font / text- decoration/ text- align/ vertical- align/ white- space / break word
-
4.其他属性(CSS3)
- : content/ cursor / border-radius/ box-shadow/ text- shadow/ background:linar-gradient...
页面布局整体思路
为了提高网页制作的效率,布局时通常有以下的整体思路:
- 1.必须确定页面的版心(可视区) , 我们测量可得知。
- 2.分析页面中的行模块,以及每个行模块中的列模块。其实页面布局第1准则.
- 3.一行中的列模块经常浮动布局,先确定每个列的大小,之后确定列的位置.页面布局第2准则
- 4.制作HTML结构。
- 我们还是遵循,先有结构,后有样式的原则。结构永远最重要
- 5.所以先理清楚布局结构,再写代码尤为重要,这需要我们多写多积累
为了让每行有5个,可以让最外的边框放大。
但是这样不一定合理,例如flex就可以实现,或者动态的让第5个边框没有margin-left
这个例子,在做footer的时候,由于上面没有添加清除浮动
, footer会移动上去。
- 首先去掉边框
- 确定主框的宽度,例如:
.w
- 修改常用样式:
a li
- 添加清除浮动
未来可以通过less等工具,让CSS像写代码一样具有变量的属性。
* {
margin: 0;
padding: 0;
}
li{
list-style: none;
}
a{
text-decoration:none;
}
a:hover{
color: #00a4ff;
}
body{
background-color: #f3f5f7;
}
.clearfix:before,.clearfix:after {
content:"";
display:table;
}
.clearfix:after {
clear:both;
}
.clearfix {
*zoom:1;
}
1.大盒子我们类名为: tb- promo 淘宝广告 2.里面先放- 张图片。 3.左右两个按钮用链接就好了。左箭头 prev右箭头 next 4.底侧小圆点ul继续做。类名为promo nav
- 定位必须指定:left top botomm right 其中的任意一个,不然不起作用。
核心原理:原先半透明的黑色遮罩看不见,鼠标经过大盒子.就显示出来。 遮罩的盒子不占有位置,就需要用绝对定位和display配合使用。
这个很重要
/* 这个写法比较特别 */
.tudou:hover .mask{
display:block;
}
完整的代码
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>土豆</title>
<link rel="stylesheet" href="style.css">
<style>
* {
margin: 0;
padding: 0;
}
.tudou{
position:relative;
width: 444px;
height: 322px;
margin: 100px auto;
}
a {
text-decoration: none;
color: #fff;
}
.tudou img{
width: 100%;
height: 100%;
}
.mask{
display:none;
position: absolute;
top: 0;
width: 100%;
height: 100%;
background: url('arr.png') no-repeat rgba(0,0,0,0.4) center center ;
}
/* 这个写法比较特别 */
.tudou:hover .mask{
display:block;
}
</style>
</head>
<body>
<div class="tudou">
<div class="mask"></div>
<img src="tudou.jpg" alt="">
</div>
</body>
.bar{
width: 150px;
height: 15px;
border: 1px solid red;
border-radius: 7px;
padding: 1px;
}
.bar_in
{
width:50%;
height:100%
background-color: red;
transition: width 0.5s;
}
.bar:hover .bar_in {
width: 100% ;
}
<div class="bar">
<div class="bar-in">
</div>
</div>
实际上有两个背景图,鼠标移动后,让背景的left进行移动。
在做shortcut
头部快捷菜单的时候,感觉有点乱了,主要是元素之间的定位。
看了一下京东,他们有些地方使用了#id
来进行css定位。
参考京东的。并进行如下的修改box-sizing: border-box;
* {
margin: 0;
padding: 0;
/* css3盒子模型 */
box-sizing: border-box;
}
html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}
淘宝
blockquote,body,button,dd,dl,dt,fieldset,form,h1,h2,h3,h4,h5,h6,hr,input,legend,li,ol,p,pre,td,textarea,th,ul{margin:0;padding:0}
自动生成代码
创建index.html文件,然后输入!
自动生成代码。
修改语言为zh-CN
引入base.css
common.css公共样式里面包含版心宽度、清除浮动、页面文字颜色等公共样式。
-
第一步:制作favicon图标
- 1.把品优购图标切成png图片。
- 2.把png图片转换为ico图标,这需要借助于第三方转换网站 ,例如此特虫 : htp://www.bitbug.net/
-
第二步:favicon图标放到网站根目录下
-
第三步:在html中引用
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
- title
- description
- Keywords
<title>京东(JD.COM)-正品低价、品质保障、配送及时、轻松购物!</title>
<meta name="description"
content="京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务,为您提供愉悦的网上购物体验!"/>
<meta name="Keywords" content="网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东"/>
将css 放到 common.css
主要的难点是右侧
。
-
小竖线
- 用
li
来做。 可以适用nth-child
选择偶数做特殊样式。
- 用
-
下拉箭头
- 要适用到字体。
- 使用到
after
伪元素,但是这样做不好调整上下位置。- 建议参考京东,单独用一个
i
来包裹。
- 建议参考京东,单独用一个
-
动态效果
- 移动到小箭头,箭头向上。
- 出现下拉菜单
-
下拉菜单
- 主框的下边框要有阴影,这个更自然。
- 菜单使用
绝对定位
,下浮到父亲的最底部。 - 菜单里面使用
dl dd float:left
进行排列。
.arrow-icon::after{
display: inline-block;
content: "\e91e";
font-family: 'icomoon';
margin-left: 5px;
}
.arrow-icon:hover::after{
content: "\e921";
}
①②③④⑤⑥⑦⑧⑨
logo要优化
-
logo 里面首先放一个h1标签,目的是为了提权,告诉搜索引擎,这个地方很重要。
-
h1里面再放一个链接,可以返回首页的,把logo的背景图片给链接即可。
-
为了搜索引擎收录我们,我们链接里面要放文字(网站名称) , 但是文字不要显示出来。
- 方法1 : text-indent移到盒子外面( text indent:- 9999px) , 然后overflow:hidden ,淘宝的做法。
- 方法2:直接给font-size:0;就看不到文字了,京东的做法。
-
最后给链接个title属性,这样鼠标放到logo.上就可以看到提示文字了。
<style>
#header .logo{
position: absolute;
/* 父窗口高度/2 减去子窗口高度 */
top: calc( 100%/2 - 61px/2 );
width: 171px;
height: 61px;
}
#header .logo a{
font-size: 0px;
display: block;
width: 171px;
height: 61px;
background:url(../images/logo.png) no-repeat;
}
</style>
<section id="header" class="header w">
<div class="logo">
<h1><a href="index.html" title="网站名称">网站名称</a></h1>
</div>
</section>
搜索框
父盒子有2px的边框,然后把子盒子放入就可以了。
购物车上的那个圆角
●count 统计部分用绝对定位做 ●count 统计部分不要给宽度,因为可能买的件数比较多,让件数撑开就好了,给一个高度 ●- -定注意左下角不是圆角,其余三个是圆角写法: border-radius: 7px 7px 7px 0;
有几个关键点:
- 横向导航的
服装城 美妆馆
的<a>
应该转成inline-block
,这样不用移动到文字上,也能点击。 - 全部分类的下的详细分类做成
position:absolute
,因为其他页面中要显示出现。 - 鼠标移动到详细分类中,应该与最左边有一个2px的区间。
- 小箭头不好做,可以使用
posion
定位来实现。子绝父相
一定要记得。
- 如果要用flex底部就能居中对齐了。
- 使用了精灵图
- 用精灵图工具对背景图片进行处理。
.icons_service1 {
background: url('../images/icons.png') no-repeat -253px -3px;
width: 49px;
height: 49px;
}
中间部分单独做一个css: index.css
main盒子宽度为980像素,位置距离左边220px (margin-left) ,给高度就不用清除浮动
- focus
- Newsflash
轮播图我做成背景图片了。 应该做成 ul>li
,然后把多个图片放在一起。
通过不同的方式,把图片移动进来。
- 九宫格不好做
- 视频教程中,是通过
overflow:hidden
把多余的切除的,方法也不错。
- 视频教程中,是通过
- 文字多了以后,要出现省略号。
- 电影票处,有一个
减
的字符。
制作难点:
- 那几个小不通栏杆的小细线怎么处理?
- 通过伪元素来添加
- 怎么添加顶头?
- 最后一个怎么不添加?
- 通过伪元素来添加
.recom_bd li{
position: relative;
float: left;
}
.recom_bd li img{
width: 248px;
height: 163px;
}
.recom_bd li:nth-child(-n+3)::after{
content: '';
position: absolute;
right: 0;
top: 10px;
width: 1px;
height: 145px;
background-color: #ddd;
}
-n+3
选择前三个
position: absolute;
来设置小细线
京东头部是通过不同的li
来设置细线。其他的地方都是通过after
来设置的。
content: "";
display: block;
position: absolute;
top: 50%;
right: 0;
width: 1px;
height: 200px;
background: linear-gradient(180deg,white,#eeeeee,white);
- 右侧
换一批
没有很好的办法与猜你喜欢对齐
, 只能使用手工调整的方法。- 使用
line-height
比总体高度小的方法,让字体向下。 - 也可以用[大号字体]-[小号字体]的大小,然后取
margin-top
来做。
- 使用
- 下面的列表使用了ul>li
- 为了不掉下来,让ul的宽度大了一点。
- 为了有那个小边框,在图片下面做了一个小的div, 然后让这个div有一个右侧的边框。
家用电器为主
- 高度,从
家用电器
上沿到下面的线来测量,得到的是:30px - 分隔符,使用了最简单的方法
<li><a href="">热门</a>|</li>
- 分三个区域
- 都是用图片做出来的。
使用一个div:app ,将首页除了头部外的功能区给包裹起来。
然后用一个elevator
绝对定位,通过left: 50%;定位到中间,然后加上1200/60 + 15px 就移动到右侧了。
那么如何贴到左侧呢? 使用margin-left: -(600px + 15px + 电梯的宽度) ;
#app{
position: relative;
}
.elevator{
position: absolute;
top: 0;
left: 50%;
margin-left: 615px;
}
要使用js了。给电梯添加一个class ,向下面的。
.elevator_fix {
position: fixed;
top: 75px;
-webkit-animation: eleShow .5s ease both;
animation: eleShow .5s ease both;
}
使用 after
.elevator_item .item_line::after{
content: "";
display: block;
position:absolute;
width: 40px;
height: 1px;
bottom: 0;
background-color: #fff;
}
一个字大小是14px
,3个字就是42px
,只要小于42px就可以了。
width: 38px;
height: 38px;
- li的背景变成红色
- a变成白色,要覆盖默认值。
- 要把那个线也给变成红色。
.elevator_item .item_line::after{
content: "";
display: block;
position:absolute;
width: 40px;
height: 1px;
bottom: 0;
background-color: #fff;
}
.elevator_list li:hover {
background-color:red;
}
/* 移动上面后 a 颜色 */
.elevator_item a:hover {
color: #fff !important;
}
/* 移动上面后 将分割线的背景也给变了 */
.elevator_list li:hover .item_line::after{
background-color:red;
}