浏览器CSS兼容性问题解决方案整理

server/2024/10/18 0:20:50/

1、CSS Hack

使用 hacker 可以把浏览器分为3类:IE6;IE7和遨游;其他(IE8 Chrome ff Safari opera等)
(1)IE6认识的 hacker 是 下划线 _ 和星号 *
(2)IE7和遨游认识的 hacker 是 星号 *
如: height:300px;*height:200px;_height:100px;
(1)IE6浏览器在读到 height:300px 的时候会认为高时 300px
继续往下读,他也认识 *heihgt , 所以当IE6读到 *height:200px 的时候会覆盖掉前一条的相冲突设置,认为高度是 200px 。
继续往下读,IE6还认识 _height ,所以他又会覆盖掉 200px 高的设置,把高度设置为 100px 。
(2)IE7和遨游也是一样的从高度 300px 的设置往下读。当它们读到 *height:200px 的时候就停下了,因为它们不认识 _height 。
所以它们会把高度解析为 200px ,剩下的浏览器只认识第一个 height:300px ;
所以他们会把高度解析为 300px 。因为优先级相同且想冲突的属性设置后一个会覆盖掉前一个,所以书写的次序是很重要的。

2、CSS 样式兼容不同浏览器问题

所有浏览器通用: height: 100px;
IE6 专用: _height: 100px; 或者 *height: 100px;
IE7 专用: *+height: 100px;
IE7、FF 共用: height: 100px !important;
以下两种方法几乎能解决现今所有兼容:
(1) !important
随着IE7对 !important 的支持, !important 方法现在只针对IE6的兼容(注意写法,记得该声明位置需要提前)

.box {width: 100px !important; /* IE7+FF */width: 80px; /* IE6 */
}

(2)IE6/IE77对FireFox <from 针对FireFox ie6 ie7的css样式>
*+html 与 *html 是IE特有的标签,FireFox 暂不支持。而 *+html 又为 IE7特有标签。

.box { width: 120px; } /* FireFox */
*html .box { width: 80px;} /* ie6 fixed */
*+html .box { width: 60px;} /* ie7 fixed, 注意顺序 */

3、万能 float 闭合(非常重要) 可以用这个解决多个 div 对齐时的间距不对

将以下代码加入 Global CSS 中,给需要闭合的 div 加上 class=“clearfix” 即可,屡试不爽。
代码:

<style>
/* Clear Fix */
.clearfix:after {content: ".";display: block;height: 0;clear: both;visibility: hidden;
}
.clearfix {display: inline-block;
}
/* Hide from IE Mac \*/
.clearfix {display:block;
}
/* End hide from IE Mac */
/* end of clearfix */
</style>

4、其他兼容技巧

Firefox下给 div 设置 padding 后会导致 width 和 height 增加, 但IE不会(可用 !important 解决)
居中问题:
垂直居中将 line-height 设置为当前 div 相同的高度, 再通过 vetical-align: middle ( 注意内容不要换行)
水平居中: margin: 0 auto; (当然不是万能)
若需给 a 标签内内容加上 样式,需要设置 display: block; (常见于导航标签)
Firefox 和 IE 对 BOX 理解的差异导致相差 2px 的还有设为 float 的 div 在 ie下 margin 加倍等问题
ul 标签在 FF 下面默认有 list-style 和 padding 最好事先声明,以避免不必要的麻烦(常见于导航标签和内容列表)
作为外部 wrapper 的 div 不要定死高度,最好还加上 overflow: hidden 以达到高度自适应

5、兼容代码:兼容最推荐的模式。

/* FF */
.submitbutton {float: left;width: 40px;height: 57px;margin-top: 24px;margin-right: 12px;
}
/* IE6 */
*html .submitbutton {margin-top: 21px;
}
/* IE7 */
*+html .submitbutton {margin-top: 21px;
}

6、不同浏览器的标签默认margin 和 padding 不同

问题说明:随便写几个标签,不加样式控制的情况下,各自的 margin 和 padding 差异较大。
解决方案: CSS: *{margin: 0;padding:0;} 或者直接引入normalize

7、图片默认有间距

问题说明:几个 img 标签放在一起的时候,有些浏览器会有默认的间距,加了问题一中提到的通配符也不起作用。
解决方案:使用 float 属性为 img 布局
备注:因为 img 标签是行内属性标签,所以只要不超出容器宽度, img 标签都会排在一行里,但是部分浏览器的 img 标签之间会有个间距。去掉这个间距使用 float 是正道。

8、CSS 布局中的居中问题

问题说明: 首先在父级元素定义 text-align: center; 这个的意思就是在父级元素内的内容居中;对于IE这样设定就已经可以了。但在mozilla中不能居中。
解决办法:在子元素定义时候设定时再加上 margin-right: auto; margin-left: auto;

9、链接(a标签)的边框与背景

a 链接加边框和背景色,需设置 display: block; 同时设置 float: left; 保证不换行。参照 menubar, 给 a 和 menubar 设置高度是为了避免底边显示错位,若不设 height, 可以在 menubar 中插入一个空格。
19、超链接访问过后 hover 样式就不出现的问题
问题说明:被点击访问过的超链接样式不在具有 hover 和 active了
解决技巧是改变CSS属性的排列顺序: L-V-H-A ;

<style type="text/css"> 
<!-- a:link {} a:visited {} a:hover {} a:active {} --> 
</style>

10、浏览器 CSS 兼容前缀

-o-transform:rotate(7deg); // Opera-ms-transform:rotate(7deg); // IE-moz-transform:rotate(7deg); // Firefox-webkit-transform:rotate(7deg); // Chrometransform:rotate(7deg); // 统一标识语句

http://www.ppmy.cn/server/7528.html

相关文章

npm常用命令详解

前言 npm&#xff08;Node Package Manager&#xff09;是Node.js的包管理器&#xff0c;它允许开发者安装、分享、更新和管理JavaScript库和工具。以下是一些常用的npm命令及其详细解释&#xff1a; 基础命令 1. 初始化一个新项目 npm init这个命令会引导你创建一个新的pack…

安全狗云眼的主要功能有哪些?

"安全狗云眼"是一款综合性的网络安全产品&#xff0c;主要用于实时监控和保护企业的网络安全。其核心功能包括威胁检测、漏洞扫描、日志管理和合规性检查等。 以下是安全狗云眼的主要功能详细介绍&#xff1a; 1、资产管理 定期获取并记录主机上的Web站点、Web容器、…

vite+vue3+antDesignVue 记录-持续记录

记录学习过程 持续补充 每天的学习点滴 开始时间2024-04-12 1&#xff0c;报错记录 &#xff08;1&#xff09;env.d.ts文件 解决方法&#xff1a; 在env.d.ts文件中添加以下代码&#xff08;可以看一下B站尚硅谷的讲解视频&#xff09; declare module *.vue {import { Defi…

Android startForegroundService与startForeground

启动service service启动有四种形式。 1.显示启动(如直接按service的全路径启动) 2.隐示启动(如通过intent-filter的action标签启动) 3.通过bindservice显示启动。 4.通过bindservice隐示启动。 Demo 创建一个service的子类&#xff0c;如 import android.app.Notifica…

力扣HOT100 - 25. K 个一组翻转链表

解题思路&#xff1a; class Solution {public ListNode reverseKGroup(ListNode head, int k) {ListNode dum new ListNode(0, head);ListNode pre dum;ListNode end dum;while (end.next ! null) {for (int i 0; i < k && end ! null; i) {end end.next;}if …

Vue模版语法(初学Vue之v-指令语法)

目录 一、介绍 1.概念 2.常见指令语法及用法 1.v-bind: 2.v-model: 3.v-if / v-else-if / v-else: 4.v-for: 5.v-on: 6.v-show: 7.v-pre: 8.v-cloak: 二、使用 1.Mustache插值语法 2.v-once指令使用 3.v-text指令使用 4.v-html指令使用 5.v-pre指令使用 6.v-…

springboot 从mysql 迁移人大金仓 -kingbase

一、配置方法修改 1、添加maven依赖 <!-- 人大金仓 --><dependency><groupId>cn.com.kingbase</groupId><artifactId>kingbase8</artifactId><version>8.6.0</version></dependency> 2、连接配置&#xff0c;修改 .y…

安全开发实战(3)--存活探测与端口扫描

目录 安全开发专栏 前言 存活探测 端口扫描 方式一: 1.3.1 One 1.3.2 Two 1.3.3 批量监测 方式二: 1.3.1 One 1.3.2 Two 1.3.3 Three 1.3.4 扫描ip地址,提取出开放端口和协议 ​编辑 1.3.5 批量扫描(最终完成版) 总结 安全开发专栏 安全开发实战​http://t.csd…