HTML DOM 節點
在 HTML DOM (Document Object Model) 中, 每個東西都是 節點 :
文檔本身就是一個文檔對象
所有 HTML 元素都是元素節點
所有 HTML 屬性都是屬性節點
插入到 HTML 元素文本是文本節點
注釋是注釋節點
元素對象
在 HTML DOM 中, 元素對象代表著一個 HTML 元素。
元素對象 的 子節點可以是, 可以是元素節點,文本節點,注釋節點。
NodeList 對象 代表了節點列表,類似于 HTML元素的子節點集合。
元素可以有屬性。屬性屬于屬性節點(查看下一節)。
瀏覽器支持
所有主流瀏覽器都支持 元素對象 和 NodeList 對象。.
屬性和方法
以上屬性和方法可適用于所有 HTML 元素:
屬性 / 方法 | 描述 |
---|---|
element.accessKey | 設置或返回accesskey一個元素 |
element.addEventListener() | 向指定元素添加事件句柄 |
element.appendChild() | 為元素添加一個新的子元素 |
element.attributes | 返回一個元素的屬性數組 |
element.childNodes | 返回元素的一個子節點的數組 |
element.classlist | 返回元素的類名,作為 DOMTokenList 對象。 |
element.className | 設置或返回元素的class屬性 |
element.clientHeight | 在頁面上返回內容的可視高度(不包括邊框,邊距或滾動條) |
element.clientWidth | 在頁面上返回內容的可視寬度(不包括邊框,邊距或滾動條) |
element.cloneNode() | 克隆某個元素 |
element.compareDocumentPosition() | 比較兩個元素的文檔位置。 |
element.contentEditable | 設置或返回元素的內容是否可編輯 |
element.dir | 設置或返回一個元素中的文本方向 |
element.firstChild | 返回元素的第一個子節點 |
element.focus() | 設置文檔或元素獲取焦點 |
element.getAttribute() | 返回指定元素的屬性值 |
element.getAttributeNode() | 返回指定屬性節點 |
element.getElementsByTagName() | 返回指定標簽名的所有子元素集合。 |
element. getElementsByClassName() | 返回文檔中所有指定類名的元素集合,作為 NodeList 對象。 |
element.getFeature() | 返回指定特征的執行APIs對象。 |
element.getUserData() | 返回一個元素中關聯鍵值的對象。 |
element.hasAttribute() | 如果元素中存在指定的屬性返回 true,否則返回false。 |
element.hasAttributes() | 如果元素有任何屬性返回true,否則返回false。 |
element.hasChildNodes() | 返回一個元素是否具有任何子元素 |
element.hasfocus() | 返回布爾值,檢測文檔或元素是否獲取焦點 |
element.id | 設置或者返回元素的 id。 |
element.innerHTML | 設置或者返回元素的內容。 |
element.insertBefore() | 現有的子元素之前插入一個新的子元素 |
element.isContentEditable | 如果元素內容可編輯返回 true,否則返回false |
element.isDefaultNamespace() | 如果指定了namespaceURI 返回 true,否則返回 false。 |
element.isEqualNode() | 檢查兩個元素是否相等 |
element.isSameNode() | 檢查兩個元素所有有相同節點。 |
element.isSupported() | 如果在元素中支持指定特征返回 true。 |
element.lang | 設置或者返回一個元素的語言。 |
element.lastChild | 返回的最后一個子元素 |
element.namespaceURI | 返回命名空間的 URI。 |
element.nextSibling | 返回該元素緊跟的一個元素 |
element.nodeName | 返回元素的標記名(大寫) |
element.nodeType | 返回元素的節點類型 |
element.nodeValue | 返回元素的節點值 |
element.normalize() | 使得此成為一個"normal"的形式,其中只有結構(如元素,注釋,處理指令,CDATA節和實體引用)隔開Text節點,即元素(包括屬性)下面的所有文本節點,既沒有相鄰的文本節點也沒有空的文本節點 |
element.offsetHeight | 返回,任何一個元素的高度包括邊框和填充,但不是邊距 |
element.offsetWidth | 返回元素的寬度,包括邊框和填充,但不是邊距 |
element.offsetLeft | 返回當前元素的相對水平偏移位置的偏移容器 |
element.offsetParent | 返回元素的偏移容器 |
element.offsetTop | 返回當前元素的相對垂直偏移位置的偏移容器 |
element.ownerDocument | 返回元素的根元素(文檔對象) |
element.parentNode | 返回元素的父節點 |
element.previousSibling | 返回某個元素緊接之前元素 |
element.querySelector() | 返回匹配指定 CSS 選擇器元素的第一個子元素 |
document.querySelectorAll() | 返回匹配指定 CSS 選擇器元素的所有子元素節點列表 |
element.removeAttribute() | 從元素中刪除指定的屬性 |
element.removeAttributeNode() | 刪除指定屬性節點并返回移除后的節點。 |
element.removeChild() | 刪除一個子元素 |
element.removeEventListener() | 移除由 addEventListener() 方法添加的事件句柄 |
element.replaceChild() | 替換一個子元素 |
element.scrollHeight | 返回整個元素的高度(包括帶滾動條的隱蔽的地方) |
element.scrollLeft | 返回當前視圖中的實際元素的左邊緣和左邊緣之間的距離 |
element.scrollTop | 返回當前視圖中的實際元素的頂部邊緣和頂部邊緣之間的距離 |
element.scrollWidth | 返回元素的整個寬度(包括帶滾動條的隱蔽的地方) |
element.setAttribute() | 設置或者改變指定屬性并指定值。 |
element.setAttributeNode() | 設置或者改變指定屬性節點。 |
element.setIdAttribute() | |
element.setIdAttributeNode() | |
element.setUserData() | 在元素中為指定鍵值關聯對象。 |
element.style | 設置或返回元素的樣式屬性 |
element.tabIndex | 設置或返回元素的標簽順序。 |
element.tagName | 作為一個字符串返回某個元素的標記名(大寫) |
element.textContent | 設置或返回一個節點和它的文本內容 |
element.title | 設置或返回元素的title屬性 |
element.toString() | 一個元素轉換成字符串 |
nodelist.item() | 返回某個元素基于文檔樹的索引 |
nodelist.length | 返回節點列表的節點數目。 |
如您還有不明白的可以在下面與我留言或是與我探討QQ群308855039,我們一起飛!
)CSS 標準盒子模型(Box Model)
在網頁中所有HTML元素可以看作盒子,在CSS中,"box model"術語是用來設計和布局時使用的;CSS盒模型本質上是一個盒子,封裝周圍的HTML元素包括:外邊距(margin)邊框(border)內邊距(padding)實際內容(content)四個屬性,所以布局時每個元素所占的總寬高是這4個屬性的總和;比如寬度:總元素的寬度=寬度+左填充+右填充+左邊框+右邊框+左邊距+右邊距
1.1Margin(外邊距)清除邊框外的區域,外邊距是透明的
1.2Border(邊框)圍繞在內邊距和內容外的邊框
1.3Padding(內邊距)清除內容周圍的區域,內邊距是透明的
1.4Content(內容)盒子里填充的內容比如文本,圖像等
標準盒子模型
寬度為100px的div
根據盒子模型得出該元素的總寬度為:100+(20+20)+(15+15)+(15+15)(由里至外)因此如果想在此div中放置一個寬度為100px的元素,此元素的總寬度必須小于等于100px
2)DIV+CSS布局
Div+CSS布局就是將網頁內容用<div>分割為塊,之后使用css設置每個塊的大小,位置等
DIV+CSS布局最重要的是靈活運用float(浮動)屬性,其值:1)left 2)right 3)both
clear屬性作用是清除浮動,其值為:1)left 2)right 3)both
d2向右浮動 float:right
因為div是塊級元素,如果都沒有脫離文檔流div就會按照從上到下的順序放置
d2設置為右浮動其他兩個div位置的變化:
1)d1沒有脫離文檔流會占據一行,所以d2只能浮動到d1下面的右面如上圖所示
2)d2脫離文檔流,d3自動填充到d2的位置
d1,d2全部設置為右浮動
1)當d1,d2都設置為右浮動時:因為css中d1在d2上面先設置,因此d1在右側,如果d2在d1上面先設置樣式,則d2在右側,d1在左側,自己測試不再截圖
2)當d1,d2都設置為右浮動時:d3就會跑到上圖中d2的位置
3)如果3個div都設置左或右浮動,當3個width加一起<=100%就會在第一行顯示(d1,d2,d3)
<style type="text/css">
#d1 {
margin: 0px;
background-color: red;
padding: 0px;
width: 50%;
height: 100px;
float:right;
}
#d2 {
margin: 0px;
background-color: yellow;
padding: 0px;
width: 50%;
height: 100px;
float:right;
}
#d3 {
margin: 0px;
background-color: green;
padding: 0px;
width: 50%;
height: 100px;
}
</style>
d2清除左浮動,d3設置為右浮動
當d2清除了左浮動,d3設置為右浮動,就會如上圖所示;如果d2清除的是右浮動,d2就會在d1上面,d3就會定位在d1下面的右面,自己測試不再截圖
當d2清除了左浮動,如果想要d2緊挨著d1(與d1在一行上),可以通過position脫離文檔流設置其上下左右屬性使其定位在d1右側,自己測試
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>div+CSS布局</title>
<style type="text/css">
#d1 {
margin: 0px;
background-color: red;
padding: 0px;
width: 30%;
height: 100px;
float:left;
}
#d2 {
margin: 0px;
background-color: yellow;
padding: 0px;
width: 40%;
height: 100px;
clear: left;
}
#d3 {
margin: 0px;
background-color: green;
padding: 0px;
width: 30%;
height: 100px;
float: right;
}
</style>
</head>
<body>
<div id="d1"><span style="font-size: 50px;">d1</span></div>
<div id="d2"><span style="font-size: 50px;">d2</span></div>
<div id="d3"><span style="font-size: 50px;">d3</span></div>
</body>
</html>
DIV+CSS布局綜合運用position+上下左右屬性與float屬性為網頁進行布局
注意:瀏覽器的兼容性問題,特別是使用IE內核的瀏覽器對W3C的規范不怎么遵守
. block(區塊)
block面板主要是設置對象文本的文字間距、對齊方式、上標、下標、排列方式、首行縮進等。
(1)word-spacing:設置單詞之間的間距。可以設置負值。
默認值:normal
(2)letter-spacing:設置字符之間的間距。可以指定負值。因為中文也是字符, 這個參數可以設置文字間的間距。
默認值:normal
(3)vertical-align:指定元素的垂直對齊方式。針對<td>表格設置垂直對齊方法,但是對<div>設置無效,可以將display屬性設置為table-cell值;
可以指定sub(下標)、super(上標)、top(與頂端對齊)、middle(居中)、bottom(與底端對齊)等。適用于行內塊元素 img、input、td等
baseline 默認。元素放置在父元素的基線上。
sub 垂直對齊文本的下標。
super 垂直對齊文本的上標
top 把元素的頂端與行中最高元素的頂端對齊
text-top 把元素的頂端與父元素字體的頂端對齊
middle 把此元素放置在父元素的中部。
bottom 把元素的頂端與行中最低的元素的頂端對齊。
text-bottom 把元素的底端與父元素字體的底端對齊。
% 使用 "line-height" 屬性的百分比值來排列此元素。允許使用負值。
inherit 規定應該從父元素繼承 vertical-align 屬性的值。
默認值: baseline
(4)text-align:設置文本的排列方式(適用于行內元素和行內塊元素, 如 a、span、input、img、label等元素)。left(左對齊)、right(右對齊)、center(居中)、justify(兩端對齊)。也可用于<hr/>下劃線對齊方式
默認值: 如果 direction 屬性是 ltr, 則默認值是 left;如果 direction 是 rtl,則為 right。(關于CSS direction 屬性看下面的內容介紹)
text-align 和margin auto 區別
text-align 可以讓塊級元素里面的文字內容居中對齊.
文字內容 == (圖片 input 行內元素 行內塊元素)
但是對于里面的塊級元素無效
讓一個塊級元素居中對齊 : margin:0 auto;
(5)text-indent:設置文本第一行的縮進值。負值用于將文本第一行向外拉, 主要給<p>設置首行。
要在每段前空兩格,可設置為2em,因為em是當前字體尺寸,2em就是兩個字的大小。
默認值: not specified(沒有規定的)
p{font-size:12px;text-indent:2em;}
上述代碼就是可以實現段落首行縮進24px(也就是兩個字體大小的距離)。
(6)white-space:設置如何處理元素內的空白符。有三個選項可選:
normal 會將空白符全部壓縮;
pre 則會如同處理pre標簽內的文本一樣處理這些空白符,也就是說,所有的空白符,包括空格,標簽,回車,等都會得以保留;
nowrap 指定文本只有遇到br標簽時才換行。
默認值: normal
(7)display: none 此元素不會被顯示。
block 此元素將顯示為塊級元素,此元素前后會帶有換行符。
inline 默認值。此元素會被顯示為內聯元素,元素前后沒有換行符。
inline-block 行內塊元素。(CSS2.1 新增的值)
list-item 此元素會作為列表顯示。
run-in 此元素會根據上下文作為塊級元素或內聯元素顯示。
compact CSS 中有值 compact,不過由于缺乏廣泛支持,已經從 CSS2.1 中刪除。
marker CSS 中有值 marker,不過由于缺乏廣泛支持,已經從 CSS2.1 中刪除。
table 此元素會作為塊級表格來顯示(類似 <table>),表格前后帶有換行符。
inline-table 此元素會作為內聯表格來顯示(類似 <table>),表格前后沒有換行符。
table-row-group 此元素會作為一個或多個行的分組來顯示(類似 <tbody>)。
table-header-group 此元素會作為一個或多個行的分組來顯示(類似 <thead>)。
table-footer-group 此元素會作為一個或多個行的分組來顯示(類似 <tfoot>)。
table-row 此元素會作為一個表格行顯示(類似 <tr>)。
table-column-group 此元素會作為一個或多個列的分組來顯示(類似 <colgroup>)。
table-column 此元素會作為一個單元格列顯示(類似 <col>)
table-cell 此元素會作為一個表格單元格顯示(類似 <td> 和 <th>)
table-caption 此元素會作為一個表格標題顯示(類似 <caption>)
inherit 規定應該從父元素繼承 display 屬性的值。
默認值: inline
常用的屬性:
display:none; //隱藏
display:block //顯示(將行內元素轉換為塊元素)
dispaly:inline //將塊元素轉換行內元素
dispaly:inline-block //將塊元素轉換為行內塊元素
display:table-cell; //此元素會作為一個表格單元格顯示(類似 <td> 和 <th>) 用于多行文本、塊元素垂直居中
以上轉換涉及行內塊元素(img、input)轉換;
經過大量的測試證明:屬性display是不能用于轉換行內塊元素(img、input)
同義詞: 內聯元素(行內元素)
4. box(方框或盒子) 主要針對圖片、表格、層、段落(p)、標題(h1-h6)等
box面板主要設置對象的邊界、間距、高度、寬度、和漂浮方式等。
(1)width:定義元素的寬。
默認值:auto
(2)height:定義元素的高。
默認值:auto
以上width、height屬性如果是針對div標簽設置css樣式,則與定位設置窗口width、height屬性一致(Dreamweaver會自動填充數據)
在父元素和子元素都設置了高度和寬度的情況下:
如果子元素的寬度超出了它的父元素的寬度, 則會父元素不會限制其顯示寬度;
如果子元素的高度超出了它的父元素的高度, 則會父元素不會限制其顯示高度;
(3)float:定義元素的漂浮方式。left 表示對象浮在左邊、right表示對象浮在右邊、none 表示對象不浮動。
默認值:none
一個span標簽不需要轉成塊級元素, 就能夠設置寬度、高度了。所以能夠證明一件事兒, 就是所有標簽已經不區分行內、塊了。
也就是說, 一旦一個元素浮動了, 那么, 將能夠并排了, 并且能夠設置寬高了。無論它原來是個div還是個span。
span{
float: left;
width: 200px;
height: 200px;
background-color: orange;
}
(4)clear:不允許元素的漂浮,相對于前一個<div>設置浮動時,下一個有清除設置的元素就會移到它的下面。
left表示不允許左邊有浮動對象 right表示不允許右邊有浮動對象
none 表示允許兩邊都可以有浮動對象 both 不允許有浮動對象。
默認值:none
浮動的主要作用是將塊元素排在同一行(span也可以設置浮動);
浮動元素它會向左或者向右進行浮動, 所謂浮動可以理解"飄";
浮動元素向它遇到父元素的邊框就停止浮動;
浮動元素的層級會比普通元素要高, 并且它不會再占用原有的高度;
浮動元素只會影響后面的元素, 不會影響前面的元素:
浮動元素的后面的元素(可能是一個也可能是多個元素受到影響)也會繼承浮動元素的特性, 它也會浮動了要解決這個問題有兩辦法;
第一個:需要清除浮動
第二個:給父元素設置一個高度(子元素都設置了height高度條件下), 不建議使用
清除浮動后它不會影響到它后面的元素, 父元素會將所有的浮動元素包圍者
當然浮動元素對后面的元素的影響可以做首字母方法, 圖文混排(文字環繞圖片)等特效;
(5)padding:定義元素內容與其邊框的空距(如果元素沒有邊框就是指頁邊的空白)。
可以分別設置分別設置上、右、下、左內邊距。
padding-top
padding-right
padding-bottom
padding-left
p {padding:20px} 設置設置上、右、下、左內邊距都為20px
p {margin: 20px 30px 30px 20px;} 設置padding-top padding-right padding-bottom padding-left分別為20px 30px 30px 20px
默認值:0。
要懂得, 用小屬性層疊大屬性:
padding: 20px;
padding-left: 30px;
注意:大屬性要寫在前面, 小屬性寫在后面;
比如:
div{
width: 200px;
height: 200px;
padding-left: 10px;
padding-right: 20px;
padding:40px 50px 60px;
padding-bottom: 30px;
border: 1px solid #000;
}
padding-left:10px和padding-right:20px沒用, 因為后面的padding大屬性, 層疊覆蓋了。
(6)margin:定義元素的邊框與其他元素之間的距離(如果沒有邊框就是指內容之間的距離)。
可以分別設置上邊界、右邊界、下邊界、左邊界的值。
margin-top
margin-right
margin-bottom
margin-left
p {margin:20px}
p {margin:10px 0px 15px 5px;}
默認值:0
marign:上邊界值 右邊界值 下邊界值 左邊界值
margin屬性值必須按照上面順序進行排列,以空格分開。如果僅輸入一個值,則4個邊界值會同時設置為此值。
如果僅輸入兩個的值,則缺少的值會以對邊的設置值進行替代。例如:
div{margin:5px 10px 15px 20px} /*上=5px,右=10px,下=15px,左=20px*/
div{margin:5px} /*上=5px,右=5px,下=5px,左=5px*/
div{margin:5px 10px} /*上=5px,右=10px,下=5px,左=10px*/
div{margin:5px 10px 15px} /*上=5px,右=10px,下=15px,左=10px*/
5. border(邊框) 針對段落(p標簽)、圖片、表格、標題(h1-h6)、form、input等(幾乎所有的元素都可以設置邊框)
border面板可以設置對象邊框的寬度、顏色及樣式。
(1)border-width:設置元素邊的寬度。可以分別設定top(上邊寬)、right(右邊寬)、bottom(下邊寬)、left(左邊寬)的值。
border-top-width border-right-width border-bottom-width border-left-width
thin 定義細的邊框。
medium 默認。定義中等的邊框。
thick 定義粗的邊框。
length 允許您自定義邊框的寬度。
inherit 規定應該從父元素繼承邊框寬度。
默認值: medium
(2)border-color:設置邊框的顏色。你可以分別對每條邊設置顏色。
注意:我們可以通過設置不同的顏色做出亮邊和暗邊的效果,這樣元素看起來是立體的。
border-top-color border-right-color border-bottom-color border-left-color
默認值: not specified(未規定的)
(3)border-style:設置邊框樣式。
border-top-style border-right-style border-bottom-style border-left-style
可以設置為none(無邊框)、dotted(點線)、dashed(虛線)、solid(實線)、double(雙線)、
groove(凹槽,3D凹線)、ridge(凸槽,3D凸線)、inset(凹邊,3D嵌入線)、outset(凸邊,3D浮出線)等邊框樣式。
默認值:none(無邊框)
推薦:表單輸入框:inset(凹邊) 按鈕:outset(凸邊)
兼容性問題
比如, border:10px ridge red; 在chrome和firefox、IE中有細微差別:
如果公司里面的設計師, 處女座的, 追求極高的頁面還原度, 那么不能使用css來制作邊框。
就要用到圖片, 就要切圖了。所以, 比較穩定的就幾個:solid、dashed、dotted, 其他的邊框樣式盡量不要用。
border可以沒有: border: none;
某一條邊沒有: border-left: none;
也可以調整左邊邊框的寬度為0px: border-left-width: 0px;
注意:border-bottom-style:可以修改a鏈接的"下劃線"的風格
border-bottom-width:可以修改a鏈接的"下劃線"的寬度(粗細)
border-bottom-color:可以修改a鏈接的"下劃線"的顏色
*請認真填寫需求信息,我們會在24小時內與您取得聯系。