css frame

当今的WEB应用要适应各种不同的大小的显示器,很多HTML元素支持百分比,可以完成比例布局。但实际的布局不只有百分比,也有固定大小的部分,单纯使用百分比是无法实现的。通常要实现这一布局自适应,传统的方法是用frame来实现,但是会存在页面加载不一致、搜索引擎收录困难等问题。现在一般用CSS或javascript技术来实现,有时还需要两者结合使用。
CSS实现布局主要是靠CSS的绝对定位和边距设置,来看HTML内容:
<body>
<div id="framecontentLeft">left</div>
<div id="framecontentTop">top</div>
<div id="maincontent">content</div>
</body>
三个div标签分别是左边和上边的固定大小部分和可变大小的内容区域。加在以上元素上的样式表如下:
	body{
margin: 0;padding: 0;border: 0;overflow: hidden; height: 100%; max-height: 100%;
}
#framecontentLeft, #framecontentTop{
position: absolute; top: 0; left: 0; width: 200px; height: 100%; overflow: hidden;
background-color: navy; color: white;
}
#framecontentTop{
left: 200px; right: 0;width: auto;height: 120px; overflow: hidden;
background-color: blue; color: white;
}
#maincontent{
position: fixed; left: 200px; top: 120px; right: 0; bottom: 0; overflow: auto;
background: #fff;
}

上面的样式指定了页面的大小显示区的100%,对左边设置了宽度,对上边设置了高度,对内容区设置了左边距和上边距,都采用绝对定位。如果要继续在内容区中使用百分比,需要把定位方式设置为fixed。大多数现现代浏览器都支持以上样式,fixed和max-height这样的属性IE6不支持,需要添加以下样式:
	* html body{ padding: 120px 0 0 200px; }
* html #maincontent{ height: 100%; width: 100%; }
* html #framecontentTop{ width: 100%;}
实现中没有采用css表达式是考虑性能问题将来的浏览器可能不支持。以上方式不支持嵌套,但内容区可以使用百分比。如果内容区有固定大小的元素,还有需要大小自适应的元素,建议使用javascript来计算并设置元素的高度和宽度。
以CSS方式实现比较简洁,不影响性能,如果是特别复杂的嵌套布局,可以采用javascript布局组件。当前可以选择jquery UI.Layout plug-in 和jLayout。它们的缺点是前者要引入30多K的脚本文件,后者只有几K但是需要页面是XHTML规范。在项目中具体采用哪种方式,要根据非功能性需求来进行选择。
JavaScript(特别是涉及jQuery)中,向框架(frame)内的HTML添加CSS通常涉及到两个步骤:首先获取到帧内的特定区域,然后对该区域应用CSS样式。这里是一个基本的例子,假设我们有一个iframe,它的id是`myFrame`,我们想要给其中的`#content`元素添加样式: 1. **获取iframe内容区域**: 使用`contents()`方法来获取iframe的内容窗口,然后再次使用`find()`或者`$("#content")`来定位目标元素。 ```javascript var iframe = document.getElementById("myFrame"); var iframeContent = iframe.contentDocument || iframe.contentWindow.document; // 根据浏览器兼容性 var contentElement = iframeContent.querySelector("#content"); // 选择ID为"content"的元素 ``` 2. **添加CSS规则**: 创建一个新的`<style>`元素,设置`textContent`属性为CSS样式,然后将其添加到`<head>`内或者`contentElement`的`<head>`内,取决于你的需求。 ```javascript var styleElement = document.createElement("style"); styleElement.textContent = ` #content { color: red; font-size: 16px; } `; // 添加到iframe的头部 if (iframeContent.head) { iframeContent.head.appendChild(styleElement); } else { // 添加到iframe的内容元素内,如果它有自己的头部 contentElement.head.appendChild(styleElement); } ``` 注意:由于同源策略的限制,如果你的脚本运行在不同的域(比如iframe加载的是另一个网站的内容),你可能无法直接修改iframe内的元素。在这种情况下,可能需要跨域权限或者服务器端配合。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值