Css样式兼容

福叔 2013-05-30

一、overflow解决float浮动后高度自适应问题

发一个区块内的元素被应用了float之后,那么整个box的高度对就不以被浮动对象的高度为标准了。

如图中的城市导航内的城市列表中采用了float之后,那个外框的高度并不是内容元素的高度:

怎么解决这个问题呢?经发现可以采用overflow来解决!方法是在父元素加上如下代码即可

overflow:auto;zoom:1;

overflow:auto;是让高度自适应,zoom:1;是为了兼容IE6,也可以用height:1%;的方式来解决。

二、CSS清理浮动方式

1.清理浮动有很多种方式,像使用br标签自带的clear属,使用元素的overflow,使用空标签来设置clear:both等等。

2.考虑到兼容问题和语义化的问题,一般我们都会使用如下代码来清理浮动。

/*清理浮动*/

.clearfix:after{

visibility:hidden;

display:block;

font-size:0;

content:"";

clear:both;

height:0;

}

.clearfix{

zoom:1;

}

其原理是,在「高级」浏览器中使用:after伪类在浮动块后面加上一个非display:none的不可见块状内容来,并给它设置clear:both来清理浮动。在ie6和7中给浮动块添加haslayout来让浮动块撑高并正常影响文档流。

上面的代码应该是现在主流的清理浮动方式。现在支付宝就使用这样的方式。而现在,NicolasGallagher给出了一个更简洁的方案:

.cf:before,.cf:after{

content:"";

display:table;

}

.cf:after{

clear:both;

}

.cf{

zoom:1;

}

原理还是一样的。使用:after伪类来提供浮动块后的clear:both。不同的是,隐藏这个空白使用的是display:table。而不是设置visibility:hidden;height:0;font-size:0;这样的hack。

值得注意的是这里中的:before伪类。其实他是来用处理top-margin边折叠的,跟清理浮动没有多大的关系。但因为浮动会创建blockformattingcontext,这样浮动元素上的另而一元素上如果刚好有margin-bottom而这个浮动元素刚好有margin-top的话,应该让他们不折叠(虽然这种情况并不常见)。

3.在网页中,DIV一般都是嵌套的,外面称为窗口,里面的DIV存放内容,如果不浮动的话,如下面这段代码

<divstyle=”background:#ccc;”>

<divstyle=”float:left;width:30%;height:40px;background:#333;“>Contenthere</div>

</div>

本来我们期望看到的是,外面背景为#ccc的层包含了里面背景为#333的层,但实际上,外面的层在显示的时候高度几乎为0,这就是因为里面的层用了浮动,但如果强制规定外层容器的尺寸,则显得就不那么灵活了,高度就不能自动适应了。这时,如果我们在里面清除浮动

<divstyle=”background:#ccc;”>

<divstyle=”float:left;width:30%;height:40px;background:#333;“>Contenthere</div>

<divstyle=”clear:both”></div>

</div>

那么显示就正常了。

三、解决IE6双边距的问题

a)在火狐浏览器下浏览是正确的,但是在IE6下浏览是双倍的magin-left.这是IE6的一个bug.

解决办法是给浮动的层增加属性:display:inline,取消其块级元素的属性。

b)在ff中如果两个块级元素要排在同一行,需要使用float来解决。在ie6中,块级元素会把另外的块级元素赶到另一行。

在前一个块级元素上加上float:left;之后,在ie6中就会显示两个块级元素在同一行。但是在ff中我们会发现后一个块级元素与前一个块级元素重叠了,解决方法就是在后一个块级元素上也加上float:left;

四、CSS中的强制换行与强制不换行

/*禁止换行*/

.nowrap{word-break:keep-all;white-space:nowrap;}

/*强制换行*/

.break{word-break:break-all;}

在不想换行的标记上加入样式nowrap,在需要强制换行的地方加入样式break,这样就实现了强制换行与不换行了。

五、怎么把标题超出部分设置成“……”

<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<htmlxmlns="http://www.w3.org/1999/xhtml">

<head>

<metahttp-equiv="Content-Type"content="text/html;charset=gb2312"/>

<title>无标题文档</title>

<style>

.ellipsisspan{

white-space:nowrap;

text-overflow:ellipsis;/*forinternetexplorer*/

overflow:hidden;

width:190px;

display:block;

}

html>body.ellipsis{

clear:both;

}

html>body.ellipsisspan:after{

content:"...";

}

html>body.ellipsisspan{

max-width:180px;

width:auto!important;

float:left;

}

</style>

</head>

<body>

<divclass="ellipsis">

<span>www.aa25.cn—毛毛虫是怎么渡过面前的大河的?答案长成蝴蝶

</span>

</div>

</body>

</html>

六、关于DIV高度自动伸展的问题

问题:一个DIV的最小高度是400PX,当内容高度不足400PX时,其高度设置为400PX,当内容高度大于400PX,则按实际高度伸展。

IE6和FIREFOX都要有效!

答案:

.a{height:400px;height:auto;min-height:400px;width:500px;}

七、什么是CSShack?针对不同的浏览器去写不同的CSS

1.由于不同的浏览器,比如InternetExplorer6,InternetExplorer7,MozillaFirefox等,对CSS的解析认识不一样,因此会导致生成的页面效果不一样,得不到我们所需要的页面效果。

这个时候我们就需要针对不同的浏览器去写不同的CSS,让它能够同时兼容不同的浏览器,能在不同的浏览器中也能得到我们想要的页面效果。

这个针对不同的浏览器写不同的CSScode的过程,就叫CSShack,也叫写CSShack。

CSSHack的原理是什么

由于不同的浏览器对CSS的支持及解析结果不一样,还由于CSS中的优先级的关系。我们就可以根据这个来针对不同的浏览器来写不同的CSS。

IE6IE7FireFox

下划线_yes

星号*yesyes

!importantyesyes

Yes-识别no-不识别

书写顺序,一般是将识别能力强的浏览器的CSS写在后面。下面如何写里面说得更详细些。

如何写CSSHack

比如要分辨IE6和firefox两种浏览器,可以这样写:

<style>

div{

background:green;/*forfirefox*/

*background:red;/*forIE6*/

}

</style>

我在IE6中看到是红色的,在firefox中看到是绿色的。

IE专用的条件注释

<!--其他浏览器-->

<linkrel="stylesheet"type="text/css"href="css.css"/>

<!--[ifIE7]>

<!--适合于IE7-->

<linkrel="stylesheet"type="text/css"href="ie7.css"/>

<![endif]-->

<!--[iflteIE6]>

<!--适合于IE6及一下-->

<linkrel="stylesheet"type="text/css"href="ie.css"/>

<![endif]-->

八、CSS中的!important属性用法

关于CSS的运用技巧有很多,今天主要探讨一下CSS中!important这个属性的用法。在CSS的使用中,遇到最多的问题就是不同浏览器之间的兼容问题。由于IE并不严格执行W3C标准,而又几乎垄断了浏览器市场。所以作为一名合格的网站制作人员,必须要针对不同的浏览器进行微调。实现不同浏览器之间兼容的方法有很多,比如利用JS探测用户的浏览器类型,从而调用不同的样式表。或者就是利用!important属性来实现微调的效果。下面是具体的例子。

下面是一段普通的DIV代码:

<divid="a"></div>

下面是有关层A在CSS样式表中的定义,注意,这里使用了!important这个属性。

#a{margin-left:30px!important;margin-left:20px;}

在上面的例子中,层a在IE浏览器中,左边距为20像素,而在Firefox中,左边距则变为30像素。这是因为,!important在CSS中表示优先调用,由于IE不能够识别这个属性,所以在IE中,只能够调用“margin-left:20px;"这个选项,所以同样的一段代码,在Firefox和IE中就会显示不同的样式。

不过值得注意的是,最新版的IE7.0已经可以识别!important,这个属性了,但是IE6.0仍然不能识别。所以这个小技巧还是相当有用的.

九、display:inline;与float:left;的用途

display:inline;(内联)《CSS权威指南》中文字显示:

任何不是块级元素的可见元素都是内联元素。其表现的特性是“行布局”形式。“行布局”的意思就是说其表现形式始终以行进行显示。

比如,我们设定一个内联元素border-bottom:1pxsolid#000;时其表现是以每行进行重复,每一行下方都会有一条黑色的细线。如果是块级元素那么所显示的的黑线只会在块的下方出现。

当然这看起来不像是display:inline;与float:left;的区别所在,但是当理解了float:left;的特性那么我们就清楚到底是怎么回事了。

float:left;(左浮动)他使得指定元素脱离普通的文档流而产生的特别的布局特性。并且FLOAT必需应用在块级元素之上,也就是说浮动并不应用于内联标签。或者换句话来说当应用了FLOAT那么这个元素将被指定为块级元素。

那么我们很清楚了,内联(display:inline;)元素不能设置宽高,因为内联属于行布局,其特性是在一行里进行布局,所以不能被设定宽高。

十、用CSS实现段落前面缩进两个字

<styletype="text/css">

<!--

p{

text-indent:2em;/*em是相对单位,2em即现在一个字大小的两倍*/

}

-->

</style>

<p>段落前面空两个字的距离,不要再使用空格了。应该使用首行缩进text-indent。长度单位em。相对于当前对象内文本的字体尺寸。我们首行缩进了2em。2em即现在一个字大小的两倍。</p>

十一、常用的列表元素ulollidldtdd释义

ol有序列表

<ol>

<li>……</li>

<li>……</li>

<li>……</li>

</ol>

表现为

1……

2……

3……

ul无序列表,表现为li前面是大圆点而不是123

<ul>

<li>……</li>

<li>……</li>

</ul>

很多人容易忽略dldtdd的用法

dl内容块

dt内容块的标题

dd内容

可以这么写:

<dl>

<dt>标题</dt>

<dd>内容1</dd>

<dd>内容2</dd>

</dl>

dt和dd中可以再加入olulli和p

理解这些以后,在使用div布局的时候,会方便很多,w3c提供了很多元素辅助布局。

十二、让IE6、IE7、IE8支持CSS3的圆角、阴影样式

想做个页面用到css3的圆角和阴影效果,但ie浏览器不支持,之前也听说有插件可以实现,周六在网上找到了一个方法,原文如下:

但凡是前端工程师,都知道IE6,IE7,IE8不支持、或者不完全支持CSS3的属性。

CSS3有很多很强大、绚丽的效果,比如,圆角,阴影,渐变透明,渐变背景,等等。

因为IE6时代,没有什么标准,而因为各种原因,IE6用户几乎不会更新IE版本。

让IE6,IE7,IE8支持CSS3效果,有一个思路就是利用VML模拟。

VML是TheVectorMarkupLanguage(矢量可标记语言),原本是微软自己开发的东西,很强大。

也就是说,IE下面,可以用VML做出圆角。半透明、阴影、渐变背景。

早在去年的时候,就有老外这个思路写成了插件,方便前端程序员开发。。。

它可以让IE6,IE7,IE8支持CSS3特效……

之前的bug一直有一个严重bug,今天上去看的时候,官方修正了这个Bug,并且增加了js渲染方法(之前是用behavior导入)。

看看如何调用:

1、在你的网页加载PIE.js脚本。

注意,用IE专用的注释,防止非IE浏览器下载。

<!--[ifltIE10]>

<scripttype="text/javascript"src="PIE.js"></script>

<![endif]-->

2、用js调用:

$(function(){

if(window.PIE){

$('.rounded').each(function(){

PIE.attach(this);

});

}

});

3、已经搞定了。

在让IE6支持CSS3的所有插件中,这个应该是最好的插件了。

官方实时测试例子:http://css3pie.com/

官方下载:http://css3pie.com/download-latest

测试了半天也不行,谁知太大意了,忽略了两点,一是在本地预览无效,得传到服务器环境下,或者本地服务器环境,二是在css里忘记加behavior:url(pie.htc);造成的。今天终于测试可用了,但新的问题又来了,我用的是自适应宽度,加上后会出现横向滚动条,去掉就好了,其他情况下正常,而且对文字阴影好像没有效果,不知道大家遇到这样的问题没有,如想使用的朋友可以试试吧,附本人制作的实例:

十三、有利于SEO的DIV+CSS的命名规则

为了更加符合SEO的规范,下面是目前流行的CSS+DIV的命名规则:

页头:header

登录条:loginBar标志:logo

侧栏:sidebar

广告:banner导航:nav

子导航:subNav

菜单:menu

子菜单:submenu

搜索:search

滚动:scroll

页面主体:main

内容:content

标签页:tab

文章列表:list

提示信息:msg

小技巧:tips

栏目标题:title

友情链接:friendLink

页脚:footer

加入:joinus

指南:guild

服务:service

热点:hot

新闻:news

下载:download

注册:register

状态:status

按钮:btn

投票:vote

合作伙伴:partner

版权:copyright

CSSID的命名

外套:wrap

主导航:mainNav

子导航:subnav

页脚:footer

整个页面:content

页眉:header

商标:label

标题:title

主导航:

mainNav(globalNav)

顶导航:topnav

边导航:sidebar

左导航:leftsideBar

右导航:rightsideBar

旗志:logo

标语:banner

菜单内容1:

menu1Content

菜单容量:

menuContainer

子菜单:submenu

边导航图标:

sidebarIcon

注释:note

面包屑:breadcrumb

(即页面所处位置导航提示)

容器:container

内容:content

搜索:search

登陆:login

功能区:shop

(如购物车,收银台)

当前的current

样式文件命名

主要的:master.css

布局版面:layout.css

专栏:columns.css

文字:font.css

打印样式:print.css

主题:themes.css

相关推荐

aSuncat / 0评论 2020-08-18