浏览器兼容性问题解决方案之CSS——已在IE、FF、Chrome测试

        在浏览器兼容之JavaScript篇——已在IE、FF、Chrome测试浏览器兼容性问题解决方法,已在IE、FF、Chrome测试中已经对浏览器中存在的CSS的兼容性和JS的兼容性进行了简单说明,现在继续对浏览器中存在的CSS的兼容性问题进行简单说明。

1)列表不能换行的问题

问题:

        li设置为浮动,后面的li紧随其后,不能换行

解决:

       在下一个li上清除浮动:clear:both

实例:   

<style type=text/css>
#one{
float:left;
}
#two{
clear:left;
}
</style>
</head>
<body> 
<li  id="one"> 一级标题
  <div id="onediv"> 
    <ul  id="oneli">二级标题 </ul> 
    <ul id="oneli"> 二级标题</ul> 
  </div> 
</li> 
<li id="two"> 一级标题
  <div> 
    <ul> 二级标题</ul> 
    <ul> 二级标题</ul> 
  </div> 
</li> 
</body>

2)如何对齐文本和文本输入框

问题:

        当input元素在设置了高时,在IE7、IE8、IE9下会出现文本和文本输入框不能对齐的现象,其他正常,包括opera

解决:

        vertical-align:middle;

实例:

<style type="text/css">
  .in{
  width:200px;
}
.alter
{
  width:200px;
  vertical-align:middle;
}
</style>
</head>
<body>
<div>修正前:</div>
<div>
用户名<input name="用户名" type="text" class="in" style="height:100px; ">
密码<input name="密码" type="text"  class="in" style="height:100px; "  >
</div>
<br/>
<br/>
<div>修正后:</div>
<div>用户名<input name="用户名" type="text" class="alter" style="height:100px; "  >
密码<input name="密码" type="text"  class="alter" style="height:100px; " ></div>
</body>

3)容器宽度在浏览器中解释不同

问题:

       不同浏览器下宽度不同,比如说设置width:200px,在iE7、IE8、IE9下显示的是200px,在FF、Chrome、Opera中显示的是220px

解决:

       用width:200px; *width:220px,其中iE7、IE8、IE9会识别两个宽度,以后者为准,故宽度为220px,在FF、Chrome、Opera中,识别第一个宽度,解析后显示宽度为220px

实例:

</head>
<body>
修正前:
 <div style="border:10px solid red;width:200px;height:200px;cursor:pointer;" οnclick="alert(this.offsetWidth)" >点我,看看有什么不同!
</div>
修正后:
 <div  style="border:10px solid red;width:200px; *width:220px; height:200px;cursor:pointer; " οnclick="alert(this.offsetWidth)" >点我,看看有什么不同!
</div>
</body>

4) Div居中问题

问题:

       IE7、IE8、IE9在设置了margin-left和margin-right为auto后,并不能使div居中显示,其他行

解决:

      设定body居中,定义text-algin: center

实例:

<body style="text-align:center;">
 <div style="margin-left:auto;margin-right:auto; width:300px; height:200px; border:10px solid red;" >div居中问题解决
</div>
</body>

5) 字体大小问题

问题:

       对字体大小small的定义不同,在Firefox和Chrome中为small,而IE7、IE8、IE9中为16px,差别挺大

解决:

       明确说明字体的大小,例如16px

实例:

<body >
	<p style="font-size:small;">p对象中的内容,此时字体大小为small</p> 
	<p style="font-size:16px;">p对象中的内容,此时字体大小固定为16px</p>
</div>
</body>

6) min-height问题

问题:

       IE7、IE8、IE9对min-height不识别,其他无问题

解决:

      #box{width: 100px; height: 35px;}

     html>body#box{ width:auto; height:auto; width:100px; min-height:35px;}

 实例:

  <style type="text/css">
#box{ width: 100px; height: 35px;}
html>body #box{ width:auto; height:auto; width:100px; min-height:35px;} 
  </style>
</head>
<body >
	 <div style="border:1px solid red; width:150px; height:35px;">最小宽度问题</div>
	 <br/>
	 <div style="border:1px solid red; width:150px; min-height:35px;">最小宽度问题</div>
	 解决方法:
	 <div id="box" style="border:1px solid red;">最小宽度问题</div>
	 <br/>
	 <div id="box" style="border:1px solid red;">最小宽度问题</div>
</div>
</body>

7) 层垂直居中

问题:

         层不能垂直居中

解决:

         利用position:absolute;top:50%;left:50%;margin:-100px;width:200px;height:200px;border:1px solid red;

实例:

<style type="text/css">
#hello{
position:absolute;
top:50%;
left:50%;
margin:-100px;
width:200px;
height:200px;
border:1px solid red;
}
  </style>
</head><body> 
<div id="hello">层垂直居中问题</div> 
</body>

8) 嵌套div标签的居中问题

问题:

         假定有一下情况:即div嵌套div

         <div id="a">
         <div id="b"> </div>
         </div>

        此时要设置内层div在外层div的居中位置,在外层设置了text-algin为center后,IE7、IE8、IE9显示正常,但是在IE10和chrome和opera和FF仍然显示在居左位置。

解决:

    除在外层设置text-algin为center,在内层div中设置margin:0 auto样式

实例:

  <style type="text/css">
 .alter{
 width:150px; height:50px; 

 }
  </style>
</head>
<body >
解决前:
	 <div style="border:1px solid red; width:300px; height:100px;text-align:center;">
	<div style="border:1px solid red; width:150px; height:50px;">嵌套div标签的居中问题</div>
	</div>
</div>
解决后:
	 <div style="border:1px solid red; width:300px; height:100px;text-align:center;">
	<div style="border:1px solid red; width:150px; height:50px; margin:0 auto;">嵌套div标签的居中问题</div>
	</div>
</body>

9) td高度的问题

问题:

        在IE9、IE10、FF、chrome中table中td的高度不包含border的宽度,但是IE7和IE8中td的高度包含了border的高度,设置line-height和height一样。

解决:

       暂无解决方法

其问题示例如下:   

<body >
<table>
<tr>
<td style="line-height:20px; border:5px solid red;">设置line-height:20px</td>
</tr>
</table>
<table>
<tr>
<td style="height:20px; border:5px solid red;">设置height:20px</td>
</tr>
</table>
</body>

10) li指定高度后,出现排版错误

问题:

       在IE7下如果为li指定高度可能会出现排版错位,其他浏览器无此现象

解决:

       设置line-height

实例:

<style type="text/css">
li{
list-style-position:inside;
}
  </style>
</head><body > 
解决前:
<li style="height:40px;">hello</li>
<li style="height:40px;">hello</li>
<li style="height:40px;">hello</li>
<li style="height:40px;">hello</li>
解决后:
<li style="line-height:40px;">hello</li>
<li style="line-height:40px;">hello</li>
<li style="line-height:40px;">hello</li>
<li style="line-height:40px;">hello</li>
</body>

11) list-style-position默认值的问题

问题:

       IE7、FF、chrome、Opera默认的li的list-style-position属性为inside,而在IE8、IE9、IE10默认的是list-style-position:outside

解决:

         将其显示的样式明确表示

实例:

<style type="text/css">
li{
	list-style-position:inside;
}
  </style>
</head><body > 
<div>解决前:
<li >hello</li>
<li >hello</li>
</div>
<div>解决后:
<li >hello</li>
<li >hello</li>
</div>
</body>

12) 禁止选取网页内容

问题:

       在需要禁止选取网页的内容,FF用-moz-user-select:none,其他浏览器用onselectstart='return false'

解决:

       FF:-moz-user-select:none

       其他:onselectstart='return false'

实例:

</head><body onselectstart ='return false'  > 
<div name="content" style="width:192px; -moz-user-select:none;"  >
善良公社中有一个功能是实现用户登录后根据用户名查询订单和预购信息,在easyui框架下向datagrid中导入数据,因为1.0版本中社河做过这个功能,参照他的代码完成了我这部分,根本思想是一样的:查找数据转换为json格式,再显示到窗体中。
</div>
</body>

13)如何对其文本和文本输入框的内容

问题:

        当input元素在设置了高和设置了text-align:center时,在IE7、IE8、IE9下会出现文本和文本输入框内容不能对齐的现象,其他正常,包括opera

解决:

       在样式中设置line-height:100px

实例:

<style type="text/css">
  .in{
  width:200px;
}
.alter
{
  width:200px;
  vertical-align:middle;
}
</style>
</head>
<body>
<div>修正前:</div>
<div>
用户名<input name="用户名" type="text" class="in" style="height:100px; line-height:100px;text-align:center;" value="zhudan" >
密码<input name="密码" type="text"  class="in" style="height:100px; line-height:100px;text-align:center;"  value="zhudan">
</div>
<br/>
<br/>
<div>修正后:</div>
<div>用户名<input name="用户名" type="text" class="alter" style="height:100px; line-height:100px;text-align:center;" value="zhudan" >
密码<input name="密码" type="text"  class="alter" style="height:100px; line-height:100px;text-align:center;" value="zhudan"></div>
</body>
        到此为止,我整理的有关于CSS的兼容性和JS的兼容性就在这里了,我感觉我所整理的这些东西也只是众多兼容性问题中的一些皮毛,更多的还有待我去发现解决总结。


      


### 解决方案概述 当使用 `scrollbar-width` 或其他滚动条样式属性时,可能会遇到由于滚动条宽度的变化而导致页面布局发生偏移的情况。这种现象通常是因为浏览器默认的滚动条会占用一定的空间,在隐藏或更改其宽度时会影响父容器的实际可用区域。 以下是针对此问题的具体解决方案: --- #### 方法一:通过设置固定宽高并配合溢出处理来避免布局抖动 可以通过显式指定容器的高度和宽度,并结合 `overflow` 属性实现固定的视觉效果。这样即使滚动条被隐藏或者调整大小,也不会影响整体布局。 ```css .table-box { width: 100%; /* 显式设定宽度 */ height: 300px; /* 设定高度以防止自动扩展 */ box-sizing: border-box; overflow-y: auto; /* 使用auto而非scroll*/ scrollbar-width: thin; /* 可选,减少滚动条尺寸 */ } ``` 上述方法可以有效缓解因滚动条显示/隐藏带来的内容位移问题[^1]。 --- #### 方法二:利用伪类模拟滚动条行为 对于 WebKit 内核浏览器(如 Chrome),还可以借助 `-webkit-scrollbar` 来完全重写滚动条外观,从而达到更精确控制的效果。需要注意的是该方式兼容性有限,仅适用于特定场景下优化用户体验。 ```css /* 定义整个滚动条轨道 */ .table-box::-webkit-scrollbar { width: 8px; /* 设置滚动条总宽度 */ } /* 调整滑块部分颜色与形状 */ .table-box::-webkit-scrollbar-thumb { background-color: rgba(0, 0, 0, 0.2); border-radius: 4px; } /* 修改空白区背景色 */ .table-box::-webkit-scrollbar-track { background-color: transparent; } ``` 尽管这种方法提供了极大的灵活性,但在某些情况下可能仍然无法规避原生滚动机制的影响[^4]。 --- #### 方法三:采用备用策略应对不同环境下的差异表现 考虑到跨平台一致性需求,建议同时声明多种规则覆盖主流设备特性。例如下面的例子展示了如何兼顾 Firefox 和 Chromium 的渲染逻辑: ```css .table-box { max-height: 50vh; /* 动态适应视口比例 */ overflow-x: hidden; overflow-y: overlay; /* 不增加额外边距 */ /* FF专用配置 */ scrollbar-width: none; /* IE fallback */ -ms-overflow-style: none; } /* 防止WebKit系列残留痕迹 */ .table-box::-webkit-scrollbar { display: none;} ``` 这里特别强调了 `overlay` 值的应用价值——它允许滚动功能存在却不侵占原有界面结构的空间资源][^[^23]。 --- ### 总结 综上所述,推荐优先尝试 **方法一** 中提到的基础 CSS 技巧作为通用型预防措施;如果追求极致定制化,则可考虑引入更多高级技术手段比如 **方法二** 所述之纯 CSS 绘制技巧或是综合运用多重条件判断完成最终适配工作(**方法三**) 。无论如何,请务必测试目标受众群体所使用的具体客户端版本号及其对应支持程度后再做决定!
评论 27
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值