定位:
- 定位指的就是将指定的元素摆放到页面的任意位置
通过定位可以任意的摆放元素 - 通过position属性来设置元素的定位
- 可选值:
static:默认值,元素没有开启定位
relative:开启元素的相对定位
absolute:开启元素的绝对定位
fixed:开启元素的固定定位(也是绝对定位的一种)
relative
当元素的position属性设置为relative时,则开启了元素的相对定位
1.当开启了元素的相对定位以后,而不设置偏移量时,元素不会发生任何变化
2.相对定位是相对于元素在文档流中原来的位置进行定位
3.相对定位的元素不会脱离文档流
4.相对定位会使元素提升一个层级
5.相对定位不会改变元素的性质,块还是块,内联还是内联
position: relative;
当开启了元素的定位(position属性值是一个非static的值)时,可以通过left right top bottom四个属性来设置元素的偏移量
- left:元素相对于其定位位置的左侧偏移量
- right:元素相对于其定位位置的右侧偏移量
- top:元素相对于其定位位置的上边的偏移量
- bottom:元素相对于其定位位置下边的偏移量
通常偏移量只需要使用两个就可以对一个元素进行定位,
一般选择水平方向的一个偏移量和垂直方向的偏移量来为一个元素进行定位
absolute
当position属性值设置为absolute时,则开启了元素的绝对定位
绝对定位:
position:absolite;
1.开启绝对定位,会使元素脱离文档流
2.开启绝对定位以后,如果不设置偏移量,则元素的位置不会发生变化
3.绝对定位是相对于离他最近的、开启了定位的祖先元素进行定位的(一般情况,开启了子元素的绝对定位,都会同时开启父元素的相对定位)如果所有的祖先元素都没有开启定位,则会相对于浏览器窗口进行定位
4.绝对定位会使元素提升一个层级
5.绝对定位会改变元素的性质:
- 内联元素变成块元素
- 块元素的宽度和高度默认都被内容撑开
fix
当元素的position属性设置fixed时,则开启了元素的固定定位
固定定位也是一种绝对定位,它的大部分特点都和绝对定位一样
position:fix;
- 不同的是:
固定定位永远都会相对于浏览器窗口进行定位
固定定位会固定在浏览器窗口某个位置,不会随滚动条滚动
IE6不支持固定定位
元素的层级
-
如果定位元素的层级是一样,则下边的元素会盖住上边的
通过z-index属性可以用来设置元素的层级
可以为z-index指定一个正整数作为值,该值将会作为当前元素的层级,层级越高,越优先显示z-index:10;
对于没有开启定位的元素不能使用z-index
-
设置元素的透明背景
opacity可以用来设置元素背景的透明,它需要一个0-1之间的值
0 表示完全透明
1 表示完全不透明
0.5 表示半透明opacity: 0.5;
-
opacity属性在IE8及以下的浏览器中不支持
IE8及以下的浏览器需要使用如下属性代替
alpha(opacity=透明度)
透明度,需要一个0-100之间的值
0 表示完全透明
100 表示完全不透明
50 半透明filter: alpha(opacity=50);
设置元素背景
使用background-image来设置背景图片
语法:background-image:url(相对路径);
-如果背景图片大于元素,默认会显示图片的左上角
-如果背景图片和元素一样大,则会将背景图片全部显示
-如果背景图片小于元素大小,则会默认将背景图片平铺以充满元素-
可以同时为一个元素指定背景颜色和背景图片,这样背景颜色将会作为背景图片的底色
一般情况下设置背景图片时都会同时指定一个背景颜色background-color: #bfa; background-image: url(img/1.png);
background-repeat用于设置背景图片的重复方式
-
可选值:
repeat,默认值,背景图片会双方向重复(平铺)
no-repeat,背景图片不会重复,有多大就显示多大
repeat-x, 背景图片沿水平方向重复
repeat-y,背景图片沿垂直方向重复background-repeat: repeat-y;
背景的偏移与定位
背景图片默认是贴着元素的左上角显示
通过background-position可以调整背景图片在元素中的位置
- 可选值:
该属性可以使用 top right left bottom center中的两个值来指定一个背景图片的位置
top left 左上
bottom right 右下
center中间
-
如果只给出一个值,则第二个值默认是center
也可以直接指定两个偏移量
第一个值是水平偏移量
- 如果指定的是一个正值,则图片会向右移动指定的像素
- 如果指定的是一个负值,则图片会向左移动指定的像素
第二个是垂直偏移量
- 如果指定的是一个正值,则图片会向下移动指定的像素
- 如果指定的是一个负值,则图片会向上移动指定的像素background-position: -50px -50px;
background-attachment
background-attachment用来设置背景图片是否随页面一起滚动
-
可选值:
scroll,默认值,背景图片随着窗口滚动
fixed,背景图片会固定在某一位置,不随页面滚动
不随窗口滚动的图片,我们一般都是设置给body,而不设置给其他元素background-attachment: fixed;
背景固定
body{
height: 5000px;
background-image: url(img/2.jpg);
background-repeat: no-repeat;
background-position: center;
/*
当背景图片的background-attachment设置为fixed时,
背景图片的定位永远相对于浏览器的窗口
*/
background-attachment: fixed;
}
简写背景属性
没有顺序要求,没有数量要求
background
- 通过该属性可以同时设置所有背景相关的样式
- 没有顺序的要求,谁在前睡在后都行
- 也没有数量的要求,不写的样式就使用默认值
background: #bfa url(img/3.png) center center no-repeat fixed;
表格
table创建表格
tr表示行
th表头
td单元格
<body>
<!-- 在HTML中,使用table标签来创建一个表格 -->
<table border="1" width="40%" align="center">
<!-- 在table标签中使用tr来表示表格中的一行,有几行就有几对tr -->
<tr>
<!-- 在tr中需要使用td来创建一个单元格,有几个单元格就有几个td -->
<td>A1</td>
<td>A2</td>
<td>A3</td>
<td>A4</td>
</tr>
可以使用th标签来表示表头中的内容,它的用法和td一样,不同的是它会有一些默认效果
<table>
<tr>
<th>学号</th>
<th>姓名</th>
<th>性别</th>
<th>住址</th>
</tr>
横向合并colspan="数字",是几就合并几个单元格
<tr>
<td>D1</td>
<td>D2</td>
<!-- colspan横向的合并单元格 -->
<td colspan="2">D3</td>
</tr>
纵向合并rowspan="2"
<tr>
<td>B1</td>
<td>B2</td>
<td>B3</td>
<!-- rowspan用来设置纵向的合并单元格 -->
<td rowspan="2">B4</td>
</tr>
text-align:设置文本的水平对齐。
vertical-align:设置文本的垂直对齐。
可选值:top、baseline、middle、bottom
-
border-spacing:边框间距
table和td边框之间默认有一个距离,通过border-spacing属性可以设置这个距离border-spacing: 10px;
-
border-collapse:合并边框
border-collapse可以用来设置表格的边框合并
如果设置了边框合并,则border-spacing自动失效border-collapse: collapse;
可选值:
collapse:合并边框
separate:不合并边框
长表格
有一些情况下表格是非常的长的,这时就需要将表格分为三个部分,表头,表格的主体,表格底部
在HTML中为我们提供了三个标签:
thead 表头
tbody 表格主体
tfoot 表格底部
这三个标签的作用,就来区分表格的不同的部分,他们都是table的子标签,都需要直接写到table中,tr需要写在这些标签当中
thead中的内容,永远会显示在表格的头部
tfoot中的内容,永远都会显示表格的底部
tbody中的内容,永远都会显示表格的中间
如果表格中没有写tbody,浏览器会自动在表格中添加tbody
并且将所有的tr都放到tbody中,所以注意tr并不是table的子元素,而是tbody的子元素
通过table > tr 无法选中行 需要通过tbody > tr
<body>
<table>
头部
<thead>
<tr>
<th>日期</th>
<th>收入</th>
<th>支出</th>
<th>合计</th>
</tr>
</thead>
中间
<tbody>
<tr>
<td>2017.03.01</td>
<td>500</td>
<td>300</td>
<td>2000</td>
</tr>
底部
<tfoot>
<tr>
<td></td>
<td></td>
<td>合计</td>
<td>100</td>
</tr>
</tfoot>
表格的布局
以前表格更多的情况实际上是用来对页面进行布局的,但是这种方式早已被CSS所淘汰了
表格的列数由td最多的那行决定
表格是可以嵌套,可以在td中在放置一个表格
<body>
<table border="1" width="50%">
<tr height="100px">
<td colspan="2"></td>
</tr>
<tr height="400px">
<td width="20%"></td>
<td width="80%">
<table border="1" width="100%" height="100%">
<tr height="100px">
<td width="20%"></td>
</tr>
<tr height="100px">
<td width="20%"></td>
</tr>
</table>
</td>
</tr>
<tr height="100px">
<td colspan="2"></td>
</tr>
</table>
</body>
完善clearfix
解决父子元素的外边距重叠
.box1:before{
content: "";
/*display:table可以将一个元素设置为表格显示*/
display: table;
}
解决父元素高度塌陷
.clearfix:after{
content: "";
display: block;
clear: both;
}
经过修改后的clearfix是一个多功能的样式,既可以解决高度塌陷,又可以确保父元素和子元素的垂直外边距不会重叠
合并并解决兼容性
.clearfix:before,
.clearfix:after{
content: "";
display: table;
clear: both;
}
.clearfix{
zoom: 1;
}
表单
表单的作用就是用来将用户信息提交给服务器的
比如:百度的搜索框 注册 登录这些操作都需要填写表单
-
使用form标签创建一个表单
form标签中必须指定一个action属性,该属性指向的是一个服务器的地址
当我们提交表单时将会提交到action属性对应的地址<form action="demo075_target.html">
使用form创建的仅仅是一个空白的表单,我们还需要向form中添加不同的表单项
-
在表单中可以使用fieldset来为表单项进行分组,可以将表单项中的同一组放到一个fieldset中
<fieldset> <!-- 在fieldset可以使用legend子标签,来指定组名 --> <legend>用户信息</legend>
-
使用input来创建一个文本框,它的type属性是text
如果希望表单项中的数据会提交到服务器中,还必须给表单项指定一个name属性
name表示提交内容的名字<input type="text" name="aaa">
-
用户填写的信息会附在url地址的后边以查询字符串的形式发送给服务器
<form action="demo075_target.html" method="get">host
url地址?查询字符串
-格式:method="get"
属性名=属性值&属性名=属性值&属性名=属性值&……
在文本框中也可以指定value属性值,该值将会作为文本框的默认值显示
method="post"打包,隐藏
-
在html中还为我们提供了一个专门用来选中表单中的提示文字的label标签label for="um"
该标签可以指定一个for属性,该属性的值需要指定一个表单项的id值<label for="um">用户名</label> <!-- value是默认值,提示信息用:placeholder="用户名/邮箱/手机号" --> <input id="um" type="text" name="username" value="我是value"><br><br>
-
密码框type="password"
使用input创建一个密码框,它的type属性值是password<label for="pwd">密码</label> <input id="pwd" type="password" name="password"><br><br>
- 单选按钮type="radio"
- 使用input来创建一个单选按钮,它的type属性使用radio
- 单选按钮通过name属性进行分组,name属性相同是一组按钮
- 像这种需要用户选择但是不需要用户直接填写内容的表单项,还必须指定一个value属性,这样被选中的表单项的value属性值将会最终提交给服务器
如果希望在单选按钮或者是多选框中指定默认选中的选项,则可以在希望选中的项中添加checked="checked"属性
性别<input type="radio" name="gender" value="male" id="male"><label for="male">男</label>
<input type="radio" name="gender" value="female" checked="checked" id="female"><label for="female">女</label>
-
多选框
- 使用input创建一个多选框,它的type属性使用checkbox爱好<input type="checkbox" name="hobby" value="zq">足球 <input type="checkbox" name="hobby" value="lq">篮球 <input type="checkbox" name="hobby" value="ymq" checked="checked">羽毛球 <input type="checkbox" name="hobby" value="ppq" checked="checked">乒乓球
- 下拉列表
- 使用select来创建一个下拉列表
下拉列表的name属性需要指定给select,而value属性需要指定给option
可以通过在option中添加selected="selected"来将选项设置为默认选中
当为select添加一个multiple="multiple",则下拉列表变为一个多选的下拉列表
<select name="start">
<!--
在select中可以使用optgroup对选项进行分组
同一个optgroup中的选项是一组
可以通过label属性来指定分组的名字
-->
<optgroup label="女明星">
<!-- 在下拉列表中使用option标签来创建一个一个列表项 -->
<option value="fbb">范冰冰</option>
<option value="lxr">林心如</option>
<option value="zw">赵薇</option>
</optgroup>
<optgroup label="男明星">
<option value="zbs" selected="selected">赵本山</option>
<option value="ldh">刘德华</option>
<option value="zjl">周杰伦</option>
</optgroup>
</select>
<br><br>
-
使用textarea创建一个文本域
自我介绍<textarea name="info"></textarea> <br><br>
-
提交按钮可以将表单中的信息提交给服务器
使用input创建一个提交按钮,它的type属性值是submit
在提交按钮中可以通过value属性来指定按钮上的文字<input type="submit" value="注册" />
-
创建一个重置按钮,点击重置按钮以后表单中内容将会恢复为默认值
<input type="reset">
-
创建一个单纯的按钮,这个按钮没有任何功能,只能被点击
<input type="button" value="按钮">
-
除了使用input,也可以使用button标签来创建按钮
这种方式和使用input类似,只不过由于它是成对出现的标签,使用起来更加的灵活<button type="submit">提交</button> <button type="reset">重置</button> <button type="button">按钮</button>