列表在各浏览器中的表现差异

本文探讨了不同浏览器中列表项的显示差异,特别是在IE与非IE浏览器中的表现,并提供了解决方案。
部署运行你感兴趣的模型镜像

  CSS总是出人意表,而IE却总是让人意外,这点相信大家都有同感了。

  我们今天就说说列表,在讲这个之前,得先了解一些关于列表本身的特性,它们在IE及其它非IE浏览器中的表现差异。

  例如,我随便写了一段:

<ul>
<li>无序列表</li>
<li>有序列表</li>
</ul>

  然而就这一段普通的代码,在IE及非IE下也有着截然不同的效果(加上border后更效果更直观)。

  IE下的效果(图一):

  非IE下效果(图二):

  先假设我们不知道是什么原因导致的这种异同。

  由于图一和图二左边都多出了很多空白,于是首先会让我们想到的就是内外补丁padding和margin。

  为了验证我们的推测是否正确,首先我们将padding初始化为0,代码如:ul {padding:0;}看效果是否有变化。结果,IE的效果仍和(图一)相同;而非IE浏览器则变为:

  (图三):

  接下来我们将margin初始化为0,代码如:ul {margin:0;}

  结果为:IE的效果变化为(图三);而非IE浏览器的效果仍和(图二)相同,未发生变化。

  由此可见,IE下的留白是由margin引起的,非IE的留白是由padding引起的(margin和padding大概为40px,可以在自己机器上测试一下)。

  那么如何让IE和非IE同时表现为图二的效果,又如何让IE和非IE同时表现为图一的效果呢?

表现为图一的代码:

ul {
 border:1px solid #ddd;
 padding-left:0;
 margin-left:40px;
}

表现为图二的代码:

ul {
 border:1px solid #ddd;
 padding-left:40px;
 margin-left:0;
}

  讲到了这里,我们不得不说出现在列表里的另一个异常,那就是浮动对列表产生的影响。

  用了一段时间列表后,你肯定会发现,只要对列表元素进行了浮动,在IE中,列表前的默认序号(圆点或阿拉伯数字,即list-style-type)就会消失无形;而在非IE中却是正常的。

  先来一段简单的测试:

ul {
 border:1px solid #ddd;
 float:left;
}

  IE下的效果(图四):

  非IE下效果(图五):

  由前面所述,我们很容易就知道这是因为margin和padding的原因所导致,而只需将margin及padding都设置为0后,你会发现各浏览器中的序号都不见了,效果都和图四一致。

  到这里,可能还会问,我并没有将list-style-type设置为none啊,按理前面的序号应该还在才是。确实,这个说法没错,但序号不见了又是怎么一回事。其原因还是margin和padding,因为默认情况下的序号位置list-style-position为outside,这就要求必须为序号出现预留位置,或margin或padding。

  其实这种情况下的序号也并没有消失,只是因为margin和padding都为0了,于是序号没有了“立足之地”,所以才从我们的眼前凭空“蒸发”了。

  当然,序号还是可以出现的。而要解决这个问题,就得想办法让序号出现不需要预留位置,要解决位置问题,我们当然首先就会想到list-style-position,默认outside是需要留白才能显示的,那我们就更换为inside试试。

ul {
 border:1px solid #ddd;
 list-style-position:inside;
 float:left;
}

  于是我们兴奋的发现,所有的浏览器都变成这样的了:

  

   在了解了这些之后,相信大家对各浏览器中列表的兼容问题都可以比较好的解决。其实只要了解了是什么原因导致各浏览器间的表现异同,然后再去做兼容,还是非常简单的。

您可能感兴趣的与本文相关的镜像

GPT-SoVITS

GPT-SoVITS

AI应用

GPT-SoVITS 是一个开源的文本到语音(TTS)和语音转换模型,它结合了 GPT 的生成能力和 SoVITS 的语音转换技术。该项目以其强大的声音克隆能力而闻名,仅需少量语音样本(如5秒)即可实现高质量的即时语音合成,也可通过更长的音频(如1分钟)进行微调以获得更逼真的效果

携带凭证的跨域请求在浏览器中的表现存在一些差异: #### 兼容性差异 - **旧版本浏览器**:部分旧版本浏览器对携带凭证的跨域请求支持完善。例如,早期的 Internet Explorer 浏览器在处理 CORS 时存在兼容性问题,需要使用特定的 XDomainRequest 对象来处理跨域请求,且该对象对携带凭证的支持有限,支持自定义头部和 PUT、DELETE 等方法。 - **现代浏览器**:主流的现代浏览器如 Chrome、Firefox、Safari 等对携带凭证的跨域请求支持较好,但在实现细节上仍可能存在差异。 #### 错误处理和提示 - **Chrome**:当跨域请求携带凭证且服务器配置当时,Chrome 会在开发者工具的控制台中给出详细的错误信息,提示跨域请求被阻止的具体原因,如 `Access to XMLHttpRequest at 'URL' from origin 'ORIGIN' has been blocked by CORS policy: The value of the 'Access-Control-Allow-Origin' header in the response must not be the wildcard '*' when the request's credentials mode is 'include'.` - **Firefox**:Firefox 也会提供较为详细的错误提示,但错误信息的格式和内容可能 Chrome 略有同。 #### 性能和缓存 - 浏览器在处理携带凭证的跨域请求时,可能在性能和缓存方面存在差异。例如,某些浏览器可能会对携带凭证的请求进行更严格的缓存控制,以确保数据的安全性。 #### 对自定义头部的处理 虽然主流浏览器都支持携带自定义头部的跨域请求,但在处理方式上可能存在细微差别。例如,在预检请求中,浏览器对 `Access-Control-Request-Headers` 字段的处理可能略有同。 ```javascript // 示例代码:携带凭证的跨域请求 const xhr = new XMLHttpRequest(); xhr.open('GET', 'https://example.com/api', true); xhr.withCredentials = true; // 携带凭证 xhr.setRequestHeader('Custom-Header', 'value'); xhr.onreadystatechange = function() { if (xhr.readyState === 4 && xhr.status === 200) { console.log(xhr.responseText); } }; xhr.send(); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值