网页的宽高时时随浏览器缩放而缩放

一、 宽度和高度设置成百分比,不要设置固定的值。例子如下:

<body style=" width:100%; height:100%">

  <embed src="http://player.youku.com/player.php/sid/XNjkzNTc0NTE2/v.swf"  width="100%" height="100%" ></embed>

</body>

 

上面的方法在google和火狐中可以显示正常,上面的代码需要注意一下几点:

1. body标签的宽和高需要设置为100%,在此处是父标签,如果不设置的话宽可以实现随浏览器缩放二缩放,高度不可以。

 

二、下面讲述使用Js时时获取浏览器当前的宽和高然后赋值给所需元素。下面的代码只是时时获取浏览器的高然后赋值给id为body1  的元素。

代码如下:

<!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>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>生产商第一步</title>
<script type="text/javascript" language="javascript">
	  function getWindowSize() {
		var h;
	 
		if(typeof document.compatMode != 'undefined' && document.compatMode == 'CSS1Compat') {
			h = document.documentElement.clientHeight;
		} else if(typeof document.body != 'undefined' && (document.body.scrollLeft || document.body.scrollTop)) {
			h = document.body.clientHeight;
		}
	 
		return h;
	  }
	
	  function getsize(){
		var size = getWindowSize();
		//document.getElementById("body1").value = size.x;
		document.getElementById("body1").style.height= size-20+"px";
	  }
  
 	 window.onload = function(){
	   var currentHeight = document.documentElement.clientHeight; 	  
	   var body1 = document.getElementById("body1");
	   body1.style.height= currentHeight-20+"px";
 	 }
 
</script>
</head>

<body style=" width:98%;" id = "body1"  onresize="getsize()">
  <embed src="http://player.youku.com/player.php/sid/XNjkzNTc0NTE2/v.swf" allowFullScreen="true" quality="hight" width="100%" height="100%" align="middle" allowScriptAccess="always" type="application/x-shockwave-flash" ></embed>
</body>
</html>


 

 

上面的代码分为两步:

1. 在页面首次载入的时候根据浏览器的高度设置body1元素的高度

2. 使用onresize="getsize()"时时监控浏览器的缩放情况,然后根据浏览器的高来设置body1元素的高度。

上面代码注意以下几点:

1. body1.style.height= currentHeight-20+"px";这段代码是设置body1元素的高度,此处必须要加上px否则没效果。

三、下面附带一些js获取浏览器高度的知识。

IE中:

 

document.body.clientWidth ==> BODY对象宽度

 

document.body.clientHeight ==> BODY对象高度

 

document.documentElement.clientWidth ==> 可见区域宽度

 

document.documentElement.clientHeight ==> 可见区域高度

 

FireFox中:

 

document.body.clientWidth ==> BODY对象宽度

 

document.body.clientHeight ==> BODY对象高度

 

document.documentElement.clientWidth ==> 可见区域宽度

 

document.documentElement.clientHeight ==> 可见区域高度

 

Opera中: 

 

document.body.clientWidth ==> 可见区域宽度

 

document.body.clientHeight ==> 可见区域高度

 

document.documentElement.clientWidth ==> 页面对象宽度(即BODY对象宽度加上Margin宽)

 

document.documentElement.clientHeight ==> 页面对象高度(即BODY对象高度加上Margin高)

 

 

没有定义W3C的标准,则

 

IE为:

 

document.documentElement.clientWidth ==> 0

 

document.documentElement.clientHeight ==> 0

 

FireFox为:

 

document.documentElement.clientWidth ==> 页面对象宽度(即BODY对象宽度加上Margin宽)document.documentElement.clientHeight ==> 页面对象高度(即BODY对象高度加上Margin高)

 

Opera为:

 

document.documentElement.clientWidth ==> 页面对象宽度(即BODY对象宽度加上Margin宽)document.documentElement.clientHeight ==> 页面对象高度(即BODY对象高度加上Margin高)

 

 

  

网页可见区域宽: document.body.clientWidth

 

网页可见区域高: document.body.clientHeight

 

网页可见区域宽: document.body.offsetWidth (包括边线的宽)

 

网页可见区域高: document.body.offsetHeight (包括边线的高)

 

网页正文全文宽: document.body.scrollWidth

 

网页正文全文高: document.body.scrollHeight

 

网页被卷去的高: document.body.scrollTop

 

网页被卷去的左: document.body.scrollLeft

 

网页正文部分上: window.screenTop

 

网页正文部分左: window.screenLeft

 

屏幕分辨率的高: window.screen.height

 

屏幕分辨率的宽: window.screen.width

 

屏幕可用工作区高度: window.screen.availHeight

 

屏幕可用工作区宽度: window.screen.availWidth

 

 

 

 

 

HTML精确定位:scrollLeft,scrollWidth,clientWidth,offsetWidth 

 

scrollHeight: 获取对象的滚动高度。 

 

scrollLeft:设置或获取位于对象左边界和窗口中目前可见内容的最左端之间的距离 

 

scrollTop:设置或获取位于对象最顶端和窗口中可见内容的最顶端之间的距离 

 

scrollWidth:获取对象的滚动宽度 

 

offsetHeight:获取对象相对于版面或由父坐标 offsetParent 属性指定的父坐标的高度 

 

offsetLeft:获取对象相对于版面或由 offsetParent 属性指定的父坐标的计算左侧位置 

 

offsetTop:获取对象相对于版面或由 offsetTop 属性指定的父坐标的计算顶端位置 

 

event.clientX 相对文档的水平座标 

 

event.clientY 相对文档的垂直座标 

 

event.offsetX 相对容器的水平坐标 

 

event.offsetY 相对容器的垂直坐标 

 

document.documentElement.scrollTop 垂直方向滚动的值 

 

event.clientX+document.documentElement.scrollTop 相对文档的水平座标+垂直方向滚动的量 

 

 

 

 

<think>我们有一个需求:设置一个div宽度为100%(即占满其父容器宽度),同时高度根据浏览器宽度进行缩放(即高度宽度变化,保持一定的比)。这通常用于响应式设计,比如视频嵌入、图片展示等场景。 实现思路: 1. 设置div的宽度为100%。 2. 利用padding-top或padding-bottom的百分比值来设置高度,因为padding的百分比值是基于父容器宽度的(注意:margin和height的百分比是基于父容器的高度,而padding-top/padding-bottom的百分比是基于父容器的宽度)。 3. 创建一个具有特定比的容器,常见的方法是使用一个包裹容器,并设置其position为relative,然后内部内容使用绝对定位填满。 例如,如果我们想要一个16:9的比(常见视频比例),那么高度应该是宽度的9/16,即56.25%。我们可以这样设置: HTML结构: ```html <div class="aspect-ratio-box"> <div class="aspect-ratio-box-content"> 内容 </div> </div> ``` CSS: ```css .aspect-ratio-box { width: 100%; position: relative; /* 设置padding-top为56.25%(因为9/16=0.5625) */ padding-top: 56.25%; /* 这就是高度的值,相对于宽度的56.25% */ } .aspect-ratio-box-content { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } ``` 这样,.aspect-ratio-box的高度由padding-top撑开,而padding-top的值是相对于宽度的百分比。内部的内容通过绝对定位填满整个容器。 如果需要其他比例,比如4:3,则padding-top为75%(3/4=0.75)。 另外,也可以使用CSS变量来灵活设置比。 示例:使用CSS变量定义比 ```css .aspect-ratio-box { --aspect-ratio: calc(9 / 16 * 100%); /* 16:9的比例 */ width: 100%; padding-top: var(--aspect-ratio); position: relative; } ``` 或者,我们可以直接使用aspect-ratio属性(较新的浏览器支持): 在支持aspect-ratio属性的浏览器中,我们可以更简单地实现: ```css .aspect-ratio-box { width: 100%; aspect-ratio: 16/9; /* 直接设置比 */ } ``` 但是注意,aspect-ratio属性可能在不支持的浏览器中不起作用,因此如果需要兼容旧浏览器,建议使用padding方法。 根据需求,我们使用宽度100%,高度宽度缩放,因此上述方法均可。考虑到兼容性,使用padding的方法更普遍。 另外,用户提到高度根据浏览器宽度缩放,也就是宽度变化时高度自动调整。上面的方法正是利用这一原理。 参考引用: 引用[3]中提到浏览器缩放后div实际宽度发生变化,这与我们的问题有一定关联,因为我们的方法依赖于父容器的宽度。如果父容器宽度因为缩放而改变,那么我们的div高度也会相应改变,这正是我们想要的效果。 引用[4]中提到了使用height:100%来适应浏览器高度,但这里我们更关注高度宽度变化,而不是高度100%。不过,如果父容器的高度设置是100%,那么我们的方法同样适用。 因此,我们可以这样实现: 步骤: 1. 创建一个外层容器(如.aspect-ratio-box),设置宽度100%,并设置padding-top为所需比例的百分比(如56.25%对应16:9)。 2. 内部创建一个绝对定位的容器,填满外层容器。 示例代码: HTML: ```html <div class="responsive-container"> <div class="content"> 这里可以放置图片、视频或其他内容 </div> </div> ``` CSS: ```css .responsive-container { width: 100%; position: relative; padding-top: 56.25%; /* 16:9 Aspect Ratio */ /* 如果需要其他比例,修改padding-top即可,例如4:3:padding-top: 75%; */ } .content { position: absolute; top: 0; left: 0; bottom: 0; right: 0; background: #eee; /* 仅用于演示,可以看到区域 */ display: flex; justify-content: center; align-items: center; } ``` 这样,.responsive-container的高度就会根据其宽度(100%宽度)按照比例缩放。 注意事项: - 如果父容器有内边距(padding)或边框(border),可能会影响宽度的计算(因为width:100%是内容宽度,不包括padding和border)。可以使用box-sizing: border-box来调整,使宽度包含padding和border。 - 如果外层容器本身没有宽度(比如其父元素宽度不定),那么宽度100%将基于其父元素的宽度,因此需要确保父元素有宽度。 另外,如果希望高度宽度变化,但高度不是固定比例,而是其他函数关系(比如高度等于宽度的一半),那么我们可以使用padding-top: 50%;(因为50%是相对于宽度的50%)。 总结:使用padding-top的百分比值(基于父容器宽度)来创建高度宽度变化的效果,并通过内部绝对定位来放置内容。 相关问题: 1. 如何实现一个正方形div(相等)? 2. 如何实现一个div的高度宽度变化,但比例是自定义的(如2:1)? 3. 使用aspect-ratio属性有什么优缺点?如何做兼容性处理?</think>### CSS设置div宽度100%并高度浏览器宽度缩放 要实现一个宽度为100%且高度浏览器宽度缩放的div,核心是利用**百分比值**和**CSS的padding技巧**,因为`padding`的百分比值是基于**父容器宽度**计算的。以下是具体实现方法: #### 方法1:使用padding-top百分比(推荐) ```html <div class="responsive-box"> <div class="content">内容区域(高度宽度缩放)</div> </div> ``` ```css .responsive-box { width: 100%; /* 宽度占满父容器 */ position: relative; padding-top: 56.25%; /* 关键:高度=宽度的56.25%(16:9比例) */ } .content { position: absolute; top: 0; left: 0; width: 100%; height: 100%; /* 填满父容器 */ background: #eee; } ``` **原理**: - `padding-top: 56.25%` 根据父容器宽度计算高度(16:9比例时:9/16=56.25%)[^3] - 内部元素通过`position: absolute`填满容器 - **比例调整**: - 正方形:`padding-top: 100%` - 4:3比例:`padding-top: 75%` - 自定义比例:`padding-top: (高度/宽度)*100%` #### 方法2:使用aspect-ratio属性(现代浏览器) ```css .responsive-box { width: 100%; aspect-ratio: 16/9; /* 直接定义比 */ background: #eee; } ``` **注意**:`aspect-ratio`兼容性较好(Chrome 88+、Firefox 89+),但需考虑旧浏览器回退方案[^1]。 #### 关键知识点 1. **百分比基准**: - `width: 100%` → 基于父容器宽度 - `padding-top: X%` → 基于父容器**宽度**(非高度)[^3][^4] 2. **浏览器缩放影响**: 浏览器缩放时,CSS像素与设备像素比例变化可能导致实际尺寸微调(如375px变为375.56px)[^3]。 3. **层级关系**: 父容器需明确尺寸(如`body, html { height: 100% }`),否则百分比可能失效[^4]。 #### 示例:16:9响应式盒子 ```css /* 确保根元素高度有效 */ html, body { height: 100%; margin: 0; } .responsive-box { width: 100%; position: relative; padding-top: 56.25%; /* 16:9比例 */ background: #f0f0f0; } .responsive-box > .content { position: absolute; top: 0; left: 0; width: 100%; height: 100%; display: flex; justify-content: center; align-items: center; } ``` ### 相关问题 1. **如何实现正方形div(1:1比)?** `padding-top: 100%`即可实现。 2. **浏览器缩放导致尺寸偏差如何解决?** 使用媒体查询修正特定缩放比例下的样式,或改用`vw/vh`单位[^3]。 3. **aspect-ratio属性兼容性如何优化?** 结合padding方法作为回退: ```css .responsive-box { padding-top: 56.25%; /* 旧浏览器回退 */ aspect-ratio: 16/9; /* 现代浏览器优先 */ } ``` 4. **如何让div同时适应宽度高度变化?** 使用视口单位: ```css .box { width: 100vw; /* 视口宽度100% */ height: 50vw; /* 高度=视口宽度50% */ } ``` > 引用说明:CSS百分比和视口单位的计算规则参考了浏览器渲染机制[^3][^4],比实现方法结合了CSS规范与常见实践[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值