热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

跨浏览器CSS编码的准则

from:smashingmagazinetitle:ThePrinciplesOfCross-BrowserCSSCoding觉得蛮好的,渣翻译一下在网页设计中,没有

from: smashing magazine
title: The Principles Of Cross-Browser CSS Coding
觉得蛮好的,渣翻译一下


在网页设计中,没有什么比让一个美丽和直观的网页在当前的所有浏览器中呈现的效果都相同更让人满意的目标了。不幸的是,这个目标通常被认为几乎不可能实现。有些观点甚至认为完美的,跨浏览器兼容性是不必要的。

虽然我同意为每个浏览器的每个用户创建一致的体验(暂时搁置移动平台)不会在每个项目中发生,我相信在很多情况下可以实现近乎完全的跨浏览器体验。 作为开发人员,我们的目标不应该是让它在每个浏览器中工作; 我们的目标应该是让它在每个浏览器中使用最少的代码运行,允许未来的网站维护平稳运行。

在本文中,我将描述我认为是最重要的一些CSS原则和技巧,可以帮助新的和有经验的前端开发人员尽可能达到一致的跨浏览器体验(experience)开发,同时尽可能少的CSS 代码。

这里写图片描述

理解CSS盒子模型

这是你应该完全熟悉的第一件事情之一,如果你希望使用非常少的hacks和变通方案实现跨浏览器布局。 幸运的是,盒子模型不是一个难以掌握的东西,并且一般在所有浏览器中工作形式相同,除了在与某些版本的Internet Explorer相关的情况下(稍后讲解)。

CSS框模型负责计算:

  • 块级元素占用了多少空间
  • 边框和/或边距是否重叠或折叠
  • 盒子的尺寸
  • 在某种程度上,盒子相对于页面上其他内容的位置

CSS框模型有以下基本规则:

  • 块级元素基本上是矩形的(就像所有元素一样)
  • 块元素的尺寸通过宽度,高度,内边距,边框和外边距计算
  • 如果没有指定高度,块元素将与其包含的内容一样高,加上内边距(除非有浮动,见下文)
  • 如果未指定宽度,则非浮动框将展开以适合其父级的宽度减去内边距(稍后详述)

处理块级元素时需要注意的一些重要事项:

  • 如果一个框的宽度设置为“100%”,它不应该有任何外边距,内边距或边界,否则会从其父辈元素溢出。
  • 垂直相邻的边距可能会导致一些复杂的折叠问题,从而导致布局问题
  • 相对或绝对定位的元素将有不同的呈现,其具体细节超出本文的范围
  • 上面的规则和原则是在假设以标准模式呈现的包含块级元素的页面情况下进行说明的

了解块和内联之间的区别

对于有经验的开发人员,这是另一件容易的事。 然而,这是另一个重要的领域,完全理解后,将会产生许多灵感,避免很多令人头痛的问题,你会对创建跨浏览器布局感到更有信心,

下面的图片说明了块和内联元素之间的区别:
这里写图片描述

图片文字翻译
块级元素:自然展开以适应
内联元素:内联元素只与内容一样宽,并且将与文本一起流动

以下是区分块元素和内联的一些基本规则:

  • 默认情况下,块元素将自然水平扩展以填充其父容器,因此不需要设置宽度为“100%”
  • 默认情况下,块元素将从父容器的最左边缘开始,位于任何之前的块元素下面(除非使用浮动或定位元素;见下文) 内联元素将忽略宽度或高度设置
  • 内联元素随文本一起流动,并且受空白,字体大小和字母间距等打印属性的制约
  • 内联元素可以使用vertical-align属性进行对齐,但块元素不能

了解浮动和清除

对于相对容易维护的多列布局,最好的方法是使用浮动。因此,实现跨浏览器体验中另一个重要因素就是透彻理解浮动是如何工作的。

元素可以向左或向右浮动,浮动的结果是元素将沿着指定的方向移动,直到到达它的父容器的边缘,或另一个浮动元素的边缘。所有出现在该浮动元素下方的非浮动,内联内容将沿着元素边缘按相反的方向浮动。

以下是浮动和清除元素时需要注意的一些重要事项:

  • 浮动元素从其他块级非浮动元素的流中移除;所以换句话说,如果你向左移动一个框,一个没有浮动的结尾段落(块级别)会出现在堆栈中的浮动元素后面,段落内部的任何文本(内联级别)将在浮动元素周围环绕
  • 要使内容在浮动元素周围流动,它必须是内联的或者在相同方向上浮动
  • 没有声明宽度的浮动元素将缩小至其内容的宽度,因此通常最好在浮动元素上设置一个宽度
  • 如果块元素包含浮动子项,它将“折叠”,需要修复
  • 被“清除”的元素将禁止文档中在它上方的浮动元素
  • 一个既被清除又被浮动的元素只会清除在其之前的元素,而不是之后的元素

注:clear 属性规定元素的哪一侧不允许其他浮动元素。

首先使用Internet Explorer(或不要)

请注意,Smashing Magazine的团队强烈建议不要首先在Internet Explorer中开发网站。 在我们看来,网站应该开发在“现代”的网络浏览器,首先标准版,然后调整为Internet Explorer的版本。

到目前为止,我讨论的大多数与CSS编码和布局原则有关。 这个原则更多地与大多数设计师的习惯和偏好相关。 虽然我们可能讨厌在日常中使用IE6和IE7,当需要从头开始构建一个客户端项目时,你可以做的最好的事情之一是在开发早期用这些浏览器中测试你的布局。 你甚至可能想打开一个独立版本的IE6或IE7,仅仅在该浏览器进行开发。

当然,你不能访问像Firebug这样的工具,但通常对于CSS(特别是在开发早期),你不需要Firebug。 首先在IE6和IE7中得到一个布局,然后为其他浏览器进行修改是更容易的一件事。 等到开发过程后期再打开IE6和/或IE7可能会导致(可能不是全部)以下问题:

  • 需要多个hack,需要为不同版本的IE制作单独的样式表,导致代码臃肿,可维护性差,使得网站运行慢
  • 某些地方的布局可能需要重做,增加开发时间
  • 测试时间将增加,有时呈指数级增长,占据其他更重要的任务的时间
  • 其他浏览器中的布局将不同于IE6和IE7中的布局

我不期望开发人员在个人项目,网络应用或其他非客户端项目中积极地使用Internet Explorer。 但对于用户群以使用IE为主的企业客户端,这个提醒可以防止很多麻烦,并且肯定会使跨浏览器体验更好。

有时将IE的问题看作“烦人的bug”可能会产生不必要的消极性,并且可能会阻碍开发时间和未来维护。 处理IE是设计师和开发人员不可避免的,so just view its problems as you would any CSS issue,并从那里构建。

了解IE最常见的问题

如果你要在开发中从IE开始,或者至少在早期用IE检查你的布局,那么你应该明白Internet Explorer(通常是版本6和7)有什么问题,或者它的限制是什么 。

对Internet Explorer中可能出现的每个可能问题进行详细讨论,以及对所有CSS兼容性问题进行列表当然超出了本文范围。 但是有一些所有CSS开发人员都应该注意的,出现在IE中的相当重大的不一致性和问题。 以下是您需要处理的最常见问题的总结:

在Internet Explorer中可能会出现其他更多的错误,问题和不一致,但是以上可能是最常见和最重要的,在试图创建跨浏览器体验时需要记住。 我鼓励所有开发人员进一步研究我上面提到的许多情况,以便更准确地了解这些情况可能导致的问题,以及如何处理它们。

永远不会效果一样的一些事物

如已经提到的那样,为每个浏览器在视觉上和功能上创建完全相同的体验is possible,but unlikely。 你可以获得精确到像素级完美的元素布局和定位,但有些事情是不受开发人员的控制。

表格常常看起来不同

讨论在不同浏览器和平台上表单元素的所有差异和变异,本身就可以成为一篇文章,所以我不在这里详细介绍。 一个简单的演示足以让我们了解。

看下面的图片,它显示了Facebook主页上的,它类似于元素)不可能在不使用Javascript插件的情况下(某些开发人员认为会破坏用户体验),以跨浏览器方式进行设计。

排版总是不同

另一项我们不能期望达到像素级别完美设计的内容是字体,特别是body copy上的字体。 有很多帮助在标题中自定义字体的不同方法,最近推出的Google Font API将有助于实现这一点。 但body copy可能总是看起来不同的不同的浏览器。

使用排版,我们不仅面临不同机器上的字体可用性问题,并且在某些情况下,甚至当字体在两个不同的机器上都可用时,看起来依然不同。 例如,Windows ClearType在IE7上可用,但在IE6上不可用,导致相同的字体在IE的两个不同版本上看起来不同。

使用CSS重置

自从我开始为我的项目使用CSS重置后,我创建跨浏览器体验的能力大大增加了。 必须承认大多数重置将添加不必要的代码到CSS中,但你可以随时删除任何选择器(例如,如果你不打算使用

标签,你可以删除对它的引用,并对其他任何未使用的标记进行此操作)。

当实现CSS重置时,在不同浏览器中发生的和内边距及外边距相关的差异变得更加规范化(即使在麻烦的HTML表单中)。 因为重置会导致所有元素从零开始,所以你可以更好地控制元素的间距和对齐方式,因为所有浏览器都将从相同的基本设置开始。

除了产生跨浏览器体验的好处之外,重置也是有益的,因为你不需要使用很多的hacks,你的代码将不那么臃肿,你将更有可能创建可维护的代码。 我推荐Eric Meyer’s CSS reset,我已经使用很长一段时间了。

使用SitePoint的CSS参考

如果你遇到了以下问题:某个特定的CSS属性无法在所有浏览器中正确显示。请查找SitePoint CSS Reference,看看这个属性是否有任何兼容性限制。 SitePoint’s reference 包括一个有用的兼容性图表,显示每个标准CSS属性的浏览器支持情况。

每个兼容性图表都伴有对不同浏览器中出现的错误的相当详细的描述,用户可以添加注释来记录新的错误,并提供对复杂CSS问题的进一步解释。

使用这个指南,你可以缩小范围,并且通常可以确定出现的CSS问题是由于浏览器错误,还是由于自己的不正确应用或对所该CSS属性的误解。

总结

对于跨浏览器CSS这一主题,虽然有很多可以讨论的内容,我在这里介绍的原则和指南提供一个基础,以帮助CSS开发人员创建接近一致的跨浏览器体验。 跨浏览器CSS在合理的限制内是可达到的目标。

但是,作为本文的结尾,我同意那些促进CSS3使用渐进增强的人,并鼓励开发人员推出新的CSS技术直到极限,甚至可能的话,在客户端项目下。

我在这里介绍的原则应该可以帮助开发人员在IE中创建一个美丽和直观的体验(experience),同时在最新的浏览器提供一个更漂亮和更直观的体验(experience)。 这是一个跨浏览器的目标,是绝对值得努力的。


原文链接有些问题,一些图片没有了,后续再补充~
很多词语不知道怎么翻译,渣QAQ


推荐阅读
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 高仿CSDN社区树形图 .
    一直感觉CSDN社区的树形结构特别的人性化,直观化。最近做系统的时候需要用到这个树形结构,于是模仿CSDN的树形结构做了一个自己的树形结构, ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • Java实战之电影在线观看系统的实现
    本文介绍了Java实战之电影在线观看系统的实现过程。首先对项目进行了简述,然后展示了系统的效果图。接着介绍了系统的核心代码,包括后台用户管理控制器、电影管理控制器和前台电影控制器。最后对项目的环境配置和使用的技术进行了说明,包括JSP、Spring、SpringMVC、MyBatis、html、css、JavaScript、JQuery、Ajax、layui和maven等。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 本文详细介绍了在ASP.NET中获取插入记录的ID的几种方法,包括使用SCOPE_IDENTITY()和IDENT_CURRENT()函数,以及通过ExecuteReader方法执行SQL语句获取ID的步骤。同时,还提供了使用这些方法的示例代码和注意事项。对于需要获取表中最后一个插入操作所产生的ID或马上使用刚插入的新记录ID的开发者来说,本文提供了一些有用的技巧和建议。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 本文详细介绍了MySQL表分区的创建、增加和删除方法,包括查看分区数据量和全库数据量的方法。欢迎大家阅读并给予点评。 ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
  • 本文介绍了一些Java开发项目管理工具及其配置教程,包括团队协同工具worktil,版本管理工具GitLab,自动化构建工具Jenkins,项目管理工具Maven和Maven私服Nexus,以及Mybatis的安装和代码自动生成工具。提供了相关链接供读者参考。 ... [详细]
  • Oracle seg,V$TEMPSEG_USAGE与Oracle排序的关系及使用方法
    本文介绍了Oracle seg,V$TEMPSEG_USAGE与Oracle排序之间的关系,V$TEMPSEG_USAGE是V_$SORT_USAGE的同义词,通过查询dba_objects和dba_synonyms视图可以了解到它们的详细信息。同时,还探讨了V$TEMPSEG_USAGE的使用方法。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • 凡客诚品官方网站的前端改进建议
    打开http:www.vancl.com发现采用的Asp.net,这点我感到很欣慰,毕竟国内采用.net技术体系的优秀网站少之又少。好奇之余右键-查看源 ... [详细]
  • 一、选择器性能优化建议1.总是从#id选择器来继承这是jQuery选择器的一条黄金法则。jQuery选择一个元素最快的方法就是用ID来选择了。1$(#content).hide() ... [详细]
author-avatar
wojijola;
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有