一、用CSS实现以下布局
?
让我们一起来做一个页面
首先,我们需要一个布局。
请使用CSS控制3个div,实现如下图的布局。

?
二、用javascript优化布局。
?
由于我们的用户群喜欢放大看页面
于是我们给上一题的布局做一次优化。
当鼠标略过某个区块的时候,该区块会放大25%,
并且其他的区块仍然固定不动。

提示:
也许,我们其他的布局也会用到这个放大的效果哦。
可以使用任何开源代码,包括曾经你自己写的。
关键字:
javascript、封装、复用
?
==========分=割=线==================
一、CSS布局
页面格式如下:
?
<div id="box"> <div id="first">first</div> <div id="second">second</div> <div id="third">third</div> <div id="newdiv"></div> </div>
?
分为四个div框,前三个添加了三个单词以便于辨认,后面的"newdiv"是放大后显示的div框。并在外面加了一个大框,在后面的定位时用到。
css代码:
#box{width:410px; height:360px;position:relative; }
#first{width:100px; height:200px; background:#ccd; margin-bottom:10px;}
#second{width:200px; height:360px;background:#ccd; position:absolute; top:0px;left:110px;}
#third{width:100px; height:150px; background:#ccd; margin-top:10px; }
在编写?css时,我放弃使用float,因为在IE和FF中会产生差距较大的效果,不好控制。改用position定位,更利用控制。
?
二、JavaScript优化布局
思想:对前三个框添加mouseover事件函数,处理过程为:当鼠标经过时,本div框visibility属性设为hidden,显示newdiv框,采用绝对定位,大小为本鼠标经过的div框的1.25倍,而且给newdiv添加一个mouseout事件,当鼠标移出时newdiv消失,显示出本div框。
Js代码:
var newdiv;//放大显示的div元素
var lastele;//上一个鼠标经过的div元素
var ele;//鼠标正在经过的div元素
var section = {"first":1, "second":2, "third":3}
for (var divId in section )
{
ele = document.getElementById(divId);
ele.onmouseover = showcontent;//为前三个div元素添加mouseover事件。
}
function showcontent()
{
this.style.visibility = "hidden";
var ht = this.clientHeight;
var wt = this.clientWidth;
var px = parentX(this);//返回的是一个纯数值!!!
var py = parentY(this);
var parent = this.parentNode;
if (lastele)
{
lastele.style.visibility = "visible";
}
newdiv = document.getElementById("newdiv");
newdiv.onmouseout = function(){newdiv.style.display = "none"; if (lastele) lastele.style.visibility = "visible";};//为newdiv添加mouseout事件
newdiv.style.display = "inline";
newdiv.style.height = 1.25*ht + "px";//火狐中必须指出单位,否则无法解析。
newdiv.style.width = 1.25*wt + "px";
newdiv.style.position = "absolute";
newdiv.style.top = py + "px";
newdiv.style.left = px + "px";
newdiv.style.backgroundColor = "#aac";
lastele = this;
}
//确定元素相对于父元素的位置的两个函数。
//获取元素相对于父亲的水平位置
function parentX(elem){
//如果offsetParent是父元素,则直接退出
return elem.parentNode == elem.offsetParent?elem.offsetLeft:pageX(elem) - pageX(elem.patentNode);
}
//获取元素相对于父亲的垂直位置
function parentY(elem){
return elem.parentNode == elem.offsetParent?elem.offsetTop:pageY(elem) - pageY(elem.parentNode);
}
?以上~~
FF和IE都能正常显示~~
?
Ps:本来是个面试题,我却搞了一天 ==! 途中我很无聊的给box添加了"z-index:-1;" 结果在FF中mouseover事件无法响应了,真是晕啊~~