在1998年CSS2的建议中,table就渐渐淡出了舞台,逐渐被载入史册。也因为如此,CSS布局也变成了编码优雅的代名词。
在设计者用过的所有CSS概念中,负margin应当是最少被谈及的定位方法,这就像一种禁忌,每个人都使用它,但没人去讨论它。
1、为负margin“平反”
我们在CSS中都会使用margin,但将margin设置成负数,那可能就不大好处理了。在网页设计中,人们对负margin用法的态度大相径庭,有的人非常喜欢,而有的人则认为这是魔鬼的工作。
一个负margin应该是这样设置的:
#content {margin-left:-100px;}
通常人们很少使用负margin但随后你会了解到,它能做的其实有很多。以下是几条有关负margin需要注意的地方:
2、使用负margin
如果使用得当,负margin是非常强大的属性,以下是2种(负margin占主导位置)的场景。
作用于static元素上的负margin属性
Static元素是没有设定成浮动的元素,下图说明了负margin对static元素的作用
当static元素的margin-top/margin-left被赋予负值时,元素将被拉进指定的方向。例如:
/* 元素向上移10px*/ #mydiv1 {margin-top:-10px;}
但如果你设置margin-bottom/right为负数,元素并不会如你所想的那样向下/右移动,而是将后续的元素拖拉进来,覆盖本来的元素。
/* * #mydiv1后续元素向上移10px, #mydiv1 本身不移动 */ #mydiv1 {margin-bottom:-10px;}
如果没有设定width属性,设定负margin-left/right会将元素拖向对应的方向,并增加宽度,此时的margin的作用就像padding一样。
3、浮动元素上的负margin
考虑下以下这种情况
HTML
<div id="mydiv1">First</div> <div id="mydiv2">Second</div>
如果给一个浮动元素加上相反方向的负margin,则会使行间距为0且内容重叠。这对于创建1列是100%宽度而其他列是固定宽度(比如100px)的自适应布局来说是非常有用的方法。
/* 应用在与浮动相反方向的负margin */ #mydiv1 {float:left; margin-right:-100px;}
若两个元素都为浮动,且#mydiv1的元素设定margin-right为20px。这样#mydiv2会认为#mydiv1的宽度比原来宽度缩短了20px(因此会导致重叠)。但有意思的是,#mydiv1的内容不受影响,保持原有的宽度。
如果负margin等于实际宽度,则元素会被完全覆盖。这是因为元素的完全宽度等于margin,padding,border,width相加而成,所以如果负margin等于余下三者的和,那元素的实际宽度也就变成了0px。
3、实用技巧
自从知道使用负margin是符合CSS2标准的代码后,我们利用这个特性创建了一些有趣的CSS技术。
制作包含3列的单个<ul>
如果你有一列项目太长而无法垂直显示时,为什么不试试用分列的方式来代替它?负margin可以让你在不添加任何浮动元素或标签的情况下达到这种效果。如下,如此简单的操作就可以把集合分成三列,真是太令人惊叹了!
HTML
<ul> <li class="col1">Eggs</li> <li class="col1">Ham</li> <li class="col2 top">Bread</li> <li class="col2">Butter</li> <li class="col3 top">Flour</li> <li class="col3">Cream</li> </ul>
CSS
ul {list-style:none;} li {line-height:1.3em;} .col2 {margin-left:100px;} .col3 {margin-left:200px;} .top {margin-top:-2.6em;} /* the clincher */
通过在类top中设置margin-top:-2.6em(<li>标签的2倍行高),所有元素都完美的对齐了。你只需要将负margin应用到每列的第一个标签上,而不是设置每个<li>的相对位置,这样用起来会合适很多,很酷吧?
使用重叠产生强调
刻意重叠元素也是一种很好的设计比喻,这样能产生一种深度错觉,从而突出特定的元素。Phlashers.com的评论模块就是一个很好的例子,使用了重叠技术突出了评论数目。利用负margin和z-index 属性,外加一点点创意,你也可以做到。
优秀的3D文字特效
这是一种创建类似于Safari字体的巧妙方法:使用2种颜色创建两版相同,略微倾斜的文字,然后使用负margin将一版文字覆盖到另一版上,并留出1-2像素的差异。这样你就获得了具有可选性,而且对机器人爬虫友好的文字!从此再也不需要那臃肿又消耗带宽的jpeg和gif了。
简单2列布局
负margin也是一种创建简单2列自适应布局的好方法。2列自适应布局是一种拥有一个自适应宽度(liquid width)为100%的内容列和一个固定宽度侧边栏的布局。
HTML
<div id="content"> <p>Main content in here</p> </div> <div id="sidebar"> <p>I’m the Sidebar! </p> </div>
CSS
#content {width:100%; float:left; margin-right:-200px;} #sidebar {width:200px; float:left;}
这样你就拥有了一个简单的两列布局,即使在IE6下也能无错的运行。现在,为了避免#sidebar被#content中的文字覆盖,加上
/* 防止文本被重叠 */ #content p {margin-right:210px;} /* 它是 200px + 10px, 10px是他们的间距*/
如果运用得当,负margin也可以完全代替table标签,来构成灵活文档结构。这种结构是一种具有可访问性的SEO技术,可以完全按照你的意愿按几乎任何顺序来排列标记。Tom写了一篇文章,专门讨论用负margin来实现多列布局。
微调元素位置
这是负margin最常用,也是最简单的方法。如果你在9个div中插入第十个div,有时候可能因为某些原因无法对齐,使用负margin可以仅对第十个进行微调,而不用必须去修改其他9个元素。
4、Bug修复
文字和链接的问题
当浮动元素使用负margin时,在一些旧的浏览器中可能会出现问题,问题现象包括:
- 链接无法点击;
- 文字难以选中;
- 失去焦点后,tab任何链接都会消失;
解决方法:给元素添加position:relative,便能正常运行!
图片被截断
如果你不幸在办公室使用IE6的话,有时候会发现重叠和浮动的元素中内容会被突然截断。
解决方法:同样,给浮动元素加上position:relative,一切将会恢复正常。
5、总结
负margin因其自身不添加额外标记就能定位元素的能力在现代网页设计中占有一席之地。随着更多的用户升级浏览器(包括IE8), 这项技术的前途看起来会非常光明,更多的网站也会依赖于它。
如果你对负margin有任何独到的经历,欢迎留言告诉我。
6、扩展阅读
- The Positive Side of Negative Margins
- CSS Negative Margins Algebra
- Get Refreshed: Liquid Layouts With Simpler CSS and Without A Semantic Mess
- Creating Liquid Layouts with Negative Margins
- Margin Properties
- Using Negative Margins
- Swapping Column Positions in Web Page Layouts with Negative Margins
- Exceptionally Negative
- CSS Negative Margins
- Horizontal Negative Margins
- Negative CSS Margins Are Not Cool
- Centering: Negative Margin
- css margin的相关属性,问题及应用
- 你是否彻底了解margin属性?
- 由浅入深漫谈margin属性
- 不要告诉我你懂margin
- 负值之美:负margin在页面布局中的应用
- 重新认识margin和负margin的实际应用
- margin负值5种应用
- 关于负margin在微博的应用
- Web布局连载——两栏固定布局(三)
- Web布局连载——两栏固定布局(四)
- Grids Layout Demo
译者手语:整个翻译依照原文线路进行,并在翻译过程略加了个人对技术的理解。如果翻译有不对之处,还烦请同行朋友指点。谢谢!
关于陈陆扬
毕业于东北大学,从事前端开发,目前主要关注无线方面。对前端技术有强烈的兴趣,希望有机会和大家交流。新浪微博
如需转载烦请注明出处:
英文原文:http://coding.smashingmagazine.com/2009/07/27/the-definitive-guide-to-using-negative-margins
中文译文:http://www.w3cplus.com/css/the-definitive-guide-to-using-negative-margins.html
相关推荐
《CSS权威指南》是Web设计领域的一本经典之作,它为开发者提供了全面、深入的CSS(Cascading Style Sheets)知识。英文版的第二版,以其详尽的解释和丰富的实例,深受全球开发者喜爱。CHM(Compiled HTML Help)格式...
CSS权威指南可以作为这些开发者进阶学习的工具,帮助他们理解CSS的高级用法和最佳实践。 接下来,我会详细说明一些CSS的关键知识点,以便更好地理解这本指南可能包含的内容: 1. CSS基础:包括CSS的语法、如何通过...
根据提供的文件信息,我们可以看出文件内容涉及《CSS权威指南》第四版(英文版)的主要知识点。接下来,我将详细介绍这些知识点。 1. 基础视觉格式化(Basic Visual Formatting) - 基本盒模型(Basic Boxes) ...
根据提供的文件信息,这里主要涉及的是《CSS权威指南》(第三版)这本书的相关信息。由于提供的具体内容仅为百度网盘的下载链接,无法直接从中提取详细的知识点,因此本篇文章将基于书名及其可能涵盖的主题来生成...
### CSS权威指南知识点详解 #### 一、书籍概述与适用对象 **《CSS权威指南》**是一本旨在帮助读者深入理解和运用层叠样式表(Cascading Style Sheets, CSS)的专业指南。无论你是希望提高工作效率的专业Web开发...
《CSS权威指南》是网页制作与开发领域的一本经典之作,中文第三版更是结合了最新的CSS标准和技术,为读者提供了全面、深入的CSS知识体系。这本书涵盖了CSS的基础概念、选择器、盒模型、布局方式、定位机制、浏览器...
### CSS权威指南(中文全)知识点总结 #### 一、CSS基础 1. **CSS简介**: - **定义**:层叠样式表(Cascading Style Sheets, CSS)是一种用来表现HTML或XML等文件样式的计算机语言。 - **作用**:用于控制网页的...
《CSS权威指南》是一本备受推崇的Web前端开发领域的经典之作,它深入浅出地讲解了CSS(Cascading Style Sheets)的各个方面,是开发者掌握CSS技术的重要参考资料。这本书不仅适合初学者入门,也对有经验的前端工程师...
9. **参考资料**:实训可能提供了各种CSS权威指南、教程、规范文档,帮助学员深入学习并查阅官方文档,确保知识的准确性和时效性。 10. **教学演示案例**:实践是学习的最佳途径。案例分析和动手实践能够帮助学员...
《CSS完全参考手册3.0》是一本详尽解析CSS(Cascading Style Sheets)的权威指南,旨在帮助网页设计师和开发者深入理解并熟练运用这一样式表语言。CSS是用于控制网页元素呈现方式的重要工具,它能实现网页的布局、...
《深入浅出HTML》是一本面向初学者的权威指南,旨在帮助读者全面理解HTML、CSS以及XHTML的基础知识。这本书以其独特的Head First教学风格,通过直观、生动的方式讲解了网页设计的核心技术。以下是对该书内容的详细...
《CSS2[1].0手册》是Web开发者必备的一份权威指南,主要涵盖了CSS(Cascading Style Sheets)第二版的规范和应用。这个CHM(Compiled HTML Help)格式的文件,日期为2009-12-17,是当时对CSS2.0标准的详尽解释。CHM...
《CSS完全参考手册3.0》是一本针对CSS(Cascading Style Sheets)技术的权威指南,旨在帮助读者深入理解和熟练运用CSS进行网页设计。HTML是网页内容的基础,而CSS则是美化这些内容的关键工具,通过定义样式规则,...
《CSS3 缺失的手册》第三版是一本关于CSS3的权威指南,作者David Sawyer McFarland详细介绍了CSS的基础知识、语法、选择器、盒子模型、布局技术、文本排版、颜色和图形等各个方面。这本书可以作为CSS3学习者的宝贵...
《CSS2.0完全帮助手册》是一本深入探讨CSS(层叠样式表)2.0规范的权威指南,对于Web开发者来说,它是一份不可或缺的参考资料。CSS2.0是Web设计的重要里程碑,它极大地丰富了网页的外观和布局,为网页提供了更精细的...
《CSS The Definitive Guide, 4th Edition》是一本权威的CSS(Cascading Style Sheets)指南,中文机器翻译版提供了对原英文版的辅助理解。这本书详细讲解了CSS的各个方面,对于深入理解和掌握CSS技术具有极大的价值...
本书《使用HTML、CSS和JavaScript构建Android应用》由Jonathan Stark编写,是针对希望使用网页技术开发Android应用程序的开发者的一本指南。本书深入探讨了如何利用这些流行的前端开发语言来创建功能丰富且用户友好...