一、请看下面的HTML代码
1
<HTML>
2
<HEAD>
3
<TITLE>Position </TITLE>
4
</HEAD>
5
<BODY>
6
<table border=1>
7
<tr>
8
<td >
9
<textarea id="textareaInput" style="font-family: Tahoma; font-size: 11px;" cols="35" rows="3"/></textarea>
10
</td>
11
<td width='300' align='right' >
12
<DIV id=senddiv style="WIDTH: 70px; HEIGHT: 41px;">
13
<IMG id=btnSendOut style="WIDTH: 70px; POSITION: absolute; HEIGHT: 41px" src="windows_button_bg.gif">
14
<div id=divSendOut style="WIDTH: 70px; POSITION: absolute; HEIGHT: 41px;line-height:41px" align='center' >Send</div>
15
</DIV>
16
</td>
17
</tr>
18
</table>
19
</div>
20
</BODY>
21
</HTML>

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

二、运行的结果
三、问题
为什么img(id为btnSendOut)和文字div(id为divSendOut)出现在table外了呢?
四、原因
img和文字div都用的绝对(position:absolute)位置,但都没有设置left和top属性,这样会根据当前的HTML位置来确定left和top属性。上级容器是个div(id为senddiv)中,此div延续上级td的align属性,这样当前位置应在div的右边。于是img和文字div从div(id为senddiv)的右边开始显示,由于都是绝对的,脱离HTML的显示,所以都会超出table外。
五、解决方案
找到了原因,解决起来就容易了。我们只需要把div(id为senddiv)的align属性设置为left就可以了。因为img,div(id为divSendOut),div(id为senddiv)的大小都是一样的。
对于把字符串"Send"居中在div(id为divSendOut)中间,我们可以设置div的line-height属性(注意该属性的单位)和height属性一样就可以了。但是如果需要居中的不是文字,而且其它的对象,例如另一个div,则就需要利用脚本来控制了。