Head First HTML与CSS阅读笔记(二)

上一篇Head First HTML与CSS阅读笔记(一)中总结了《Head First HTML与CSS》前9章的知识点,本篇则会将剩下的10~15章内容进行总结,具体如下所示。

div与Span

此元素应该是HTML中使用频度最高的元素之一,div将属于一个逻辑区的元素包含起来;

如果添加div有助于将页面分解为逻辑区,保证结构清晰并便于指定样式,则应该使用div,否则,过多的div只会让页面更加复杂,不应滥用;

width属性指定元素内容区的宽度,不包括内边距,边框和外边距的宽度;

整个元素宽度 = 内容区宽度 + 两侧内边距宽度 + 两侧边框宽度 + 两侧外边距宽度;

块元素默认的宽度是“auto”,允许内容填满可用的全部空间,一般不用指定元素的高度,默认为auto;

text-align只能在块元素上设置,对块元素中所有内联内容对其;

CSS子孙选择器:注意#id h2与#id>h2的区别,后者是直接子元素,前者则是#id下的所有子孙h2元素;

line-height属性值可直接使用数字表示,如:

#elixirs {
  line-height: 1;
}

表示#elixirs <div>中的个元素行高是其自己字体大小的1倍;

一些属性的简写形式:

background: white url(image/coll.png) repeat-x;
border: #007e7e solid thin;
font: font-style font-variant font-weight font-size/line-height font-family;
如:
font: small/1.6em Verdana, Helvetica, sans-serif;

伪类

a元素的几种状态:link, visited, hover, focus(焦点在此链接上时), active(第一次单击链接时),伪类举例:

#elixirs a:link {
  color: #007e7e;
}

#elixirs a:visited {
  color: #333333;
}

伪类还有很多,如first-child,last-child等,伪类会根据元素的状态来指定元素的样式;

nth-child伪类,状态是一个元素相对于它的兄弟元素的数字顺序;

p:nth-child(even) {          //偶数
  background-color: red;
}

p:nth-child(odd) {            //奇数
  background-color: green;
}

p:nth-child(2n) {
  background-color: red;
}

p:nth-child(2n+1) {
  background-color: green;
}

层叠

在所有样式表中,最优先的是作者的样式表,其次是读者的样式表,最后才是浏览器的样式表,如果读者在样式表的一个属性声明最后加上“!important”就可覆盖作者的样式;

布局与定位

并排放置两个内联元素时,两元素的外边距不会折叠,上下放置两个块元素时,会把他们共同的外边距折叠折叠在一起,折叠的外边距高度就是最大的外边距高度;

即使一个元素嵌套在另一个元素内,如果外面元素没设置边框,这两个外边距也会折叠;

流体布局

扩展浏览器窗口时,页面中的内容会扩展以适应页面;

浮动float

浮动一个元素步骤:

1. 指定一个标识(id);
2. 指定一个宽度,所有浮动元素都必须有一个宽度;
3. 使用float: right/left是元素浮动;

浮动元素会被从正常流中删除,但是在对内联元素定位时,会考虑浮动元素的边界,会围绕着浮动元素;

浮动一个元素时,如果希望它在某个元素的后面,就要移动浮动元素的HTML,让它紧挨着放在那个元素的下面;

设置两栏布局的话,可以采用右侧边栏浮动,左侧主内容区使用margin-right指定距右侧的距离,如边栏总宽度330px,则设置margin-right: 330px;

使用了浮动,下面的元素则会上移,可能会出现重叠的问题,应使用clear属性,clear会要求当元素流入页面时,在这个元素的左边,右边或两边不允许有浮动内容,如:clear: right/left/both;

浮动元素的外边距不会折叠;

浮动布局适合在一个文本段落中浮动图像,让文本围绕着这个图像;

缺点:必须把需要浮动的<div>移到其父元素之下最前面位置,另外,无法创建两个高度相同的列;

冻结布局

当用户调整屏幕大小时,设计仍能保持原样,指定页面的总宽度,调整浏览器大小,宽度不会变化;

凝胶布局

凝胶布局会锁定页面中内容区的宽度,但会将它在浏览器中居中,使用margin: 0 auto;

很多博客网站采用此种布局;

缺点:内容不会扩展来填满整个浏览器窗口;

绝对定位

使用position属性制定这个元素要绝对定位,例如:

#sidebar {
  position: absolute;
  top: 100px;
  right: 200px;
  width: 280px;
}

一个元素绝对定位时,浏览器会将它从正常流中完全删除,然后将它放在top和right属性指定的位置上,并且流中的元素不会将其内联内容围绕在一个绝对定位的元素周围;

绝对定位可以分层放置,一个元素可以放在另一个绝对定位元素上面,每个定位元素(绝对定位,相对定位,固定定位)都有一个名为z-index的属性,z-index值越大,越方在上面;

可以对任何元素指定绝对位置,包括块元素和内联元素;

position属性有static(默认值),absolute,fixed(固定定位,固定元素永远也不会移动),relative(相对定位会让元素正常流入页面,在页面上显示之前要进行偏移);

相对定位元素仍在正常流中(还在它原本的位置上),然后按照指定的量偏移,可以使用top、left,bottom,right偏移元素,它是相对于其外围包含的元素来定位的;

绝对定位是相对于离它最近的父元素来定位的,可以将一个<div>放在另一个<div>中,对外围<div>使用相对定位,然后用绝对定位指定内部<div>的位置,这样就能相对于父<div>定位了,即一个绝对定位元素嵌套在另一个定位元素中,这个元素就会相对外包含元素定位;

固定定位

#coupon {
  position: fixed;
  top: 300px;
  left: -90px;
}
固定定位元素是相对浏览器的位置不会变动,而不是页面;

表格布局

表格布局结构也比较简单,如下所示:

首先,创建一个<div>表示整个表格,行和列要嵌套在这个<div>中;
然后,对表格中的每一行创建一个<div>,包含行的内容;
最后,在行中,对于每一列,只需要一个块元素作为该列内容;

<div id="tableContainer">
  <div id="tableRow">
    <div id="main">
      ...
    </div>
    <div id="sidebar">
      ...
    </div>
  </div>
</div>

div#tableContainer {
  display: table;
  border-spacing: 10px; //指定表格中单元格之间的边框间距,可看做常规元素的外边距
}

div#tableRow {
  display: table-row;
}

#main {
  display: table-cell;
verticle-align: top;
width: 500px; //控制列宽度 } #sidebar { display: table-cell;
verticle-align: top/middle/bottom; }

border-spacing和外边距创建的空间不会折叠;

建立多栏布局,且内容栏是均匀的,表格布局就比较适合;

HTML5标记

<section>与<article>的区别?

使用<section> 可以把相关内容分组在一起,<article>包含独立内容,如一个新闻报道,一个博客帖子或者一个简短的报告;要组织相关的内容就是用<section>,而对于独立的内容,则使用<article>;

<time>元素负责在页面中增加日期或时间,datetime属性用来指定一个日期或时间,如果元素内容没有采用官方Internet日期/时间格式来写,就必须有datetime属性;

<time datetime="2015-01-31">1/31/2015</time>

在<section>、<article>、<aside>元素中也可以是用<header>和<footer>元素,可以把一些元素组合起来放在首部或尾部;

导航使用<nav>元素,导航内容一般使用列表来构建;

<video>元素使用

<video controls autoplay width="512" height="288" src="video/test.mp4" poster="images/test.png">
</video>

controls属性使播放器提供一些控制视频音频播放的组件;
autoplay属性,一旦页面加载,视频就会自动播放;
poster属性,提供一个可选的海报图像,视频未播放时就显示这个图像;
loop属性,布尔属性,如果有loop,视频结束播放后会自动重新开始播放视频;
preload属性,preload属性通常用来细粒度的控制视频如何加载,来实现优化,值为"none"表示用户在真正播放视频之前不下载,"metadata"表示下载视频元数据,但不下载视频内容;

<video>元素可以对每一种视频格式分别使用一个<source>元素,提供一组视频,让浏览器选择其支持的第一种格式,如下:

<video controls autoplay width="512" height="288">
  <source src="video/tweetsip.mp4">
  <source src="video/tweetsip.webm">
  <source src="video/tweetsip.ogv">
  <p>Sorry, your browser doesn't support the video element</p>
</video>

<mark>元素用于突出显示某些文本;

<audio>包含声音内容;

<canvas>在页面中显示用JS绘制的图像和动画;

<progress>显示任务的完成进度;

<meter>显示某个范围的度量;

表格与列表

<caption>元素指定表格标题,默认显示在表格上方,想将标题移动到表格下方,可在css中使用caption-side: bottom来改变;

不能单独地设置各个单元格的“外边距”,而要使用border-spacing为所有单元格设置一个共同的间距;

border-collapse属性用来折叠边框,使单元格之间没有边框间距,如下所示:

table {
  border: thin solid black;
  caption-side: bottom;
  border-collapse: collapse;
}

可以使用rowspan属性指定一个表格数据单元格占多少行,然后从这个单元格所跨越的其他行中删除相应的表格数据元素;

使用colspan属性指定跨多列,跨多列时,需要删除同一行中的表格数据元素;

嵌套表格也很简单,只需要把另一个<table>元素放在一个<td>中即可;

列表的主要属性是list-style-type,disc是默认值,其他值还包括circle,square,none(会删除所有列表标记);

定制标记

list-style-image属性允许为列表设置标记图像;

li {
  list-style-image: url(image/backpack.gif);
  padding: 5px;
}

list-style-position控制列表上的文本回绕,属性设为"inside"文本会在标记下回绕,设为"outside"文本会在文本下回绕;

HTML表单

 表单里可以有什么?

<input type="text" name="fullname" placeholder="Buckaroo Banzai" required> //文本输入
<input type="submit"> //提交按钮
<input type="radio" name="hotornot" id="hot" value="hot" checked>
<label for="hot">hot</label>
<input type="radio" name="hotornot" id="not" value="not">
<label for="not">not</label>
<input type="checkbox" name="spice" value="Salt" checked> <input type="checkbox" name="spice" value="Pepper"> <input type="checkbox" name="spice" value="Garlic"> <textarea name="comments" rows="10" cols="48"> xxxx </textarea> <select name="characters"> <option value="Buckaroo">Buckaroo</option> <option value="Tommy">Tommy</option> <option value="Penny">Penny</option> </select> <input type="number" min="0" max="20"> //限制只能输入数字 <input type="range" min="0" max="20" step="5"> //范围输入,显示为滑动条 <input type="color"> //颜色输入 <input type="date"> //日期输入 <input type="email"> //email输入 <input type="tel"> //电话号码输入 <input type="url"> //URL输入 email、tel、url都是text的变体,在移动设备上会显示不同的定制键盘;
<input type="password" name="secret">
<input type="file" name="doc"> //文件输入
多选菜单
<select name="characters" multiple>
<option value="Buck">Buckaroo</option>
....
</select>

CSS选择器

伪元素

伪元素可以用来选择元素的某些部分,如:first-letter伪元素用来选择一个块元素中文本的第一个字母;:first-line伪元素用来选择段落的第一行;

p:first-letter {
  font-size: 3em;
}

属性选择器

根据属性值来选择元素;

img[width] {border: black thin solid;}
img[height="300"] {border: red thin solid;}
img[alt~="flowers"] {border: #ccc thin solid;} //alt属性包含“flowers”的所有图像;

按兄弟选择

h1+p {
  font-style: italic;
}
选择所有紧跟在<h1>元素后面的p元素;

结合选择器

div#greentea > blockquote p:first-line {
  font-style: italic;
}

开发商特定的CSS属性

div#box {
  transform: rotate(45deg);  //通用属性,旋转45度
  -webkit-transform: rotate(45deg);  //Safari,Chrome
  -moz-transform: rotate(45deg);  //mozilla
  -o-transform: rotate(45deg);  //Opera
  -ms-transform: rotate(45deg);  //IE
}

CSS变换和过渡

transition属性,使元素在规定时间内变换到新状态;

#box {
  position: absolute;
  top: 100px;
  left: 100px;
  width: 200px;
  height: 20px;
  transition: transform 2s;
  -webkit-transition: -webkit-transform 2s;
  -moz-transition: -moz-transform 2s;
  -o-transition: -o-transform 2s;
}

#box:hover {
  transform: rotate(45deg);
  -webkit-transform: rotate(45deg);
  -moz-transform: rotate(45deg);
  -o-transform: rotate(45deg);
  -ms-transform: rotate(45deg);
}

 

posted @ 2015-02-01 00:51  冰轮封雪  阅读(2383)  评论(0编辑  收藏  举报