`
caiceclb
  • 浏览: 242624 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

div内部块级元素设置外间距(margin)对其的影响

阅读更多

div内部块级元素,比如p,div,设置外间距(margin)的话会怎样(IE6正常,此处建立在标准浏览器基础之上,测试环境:FF,Opera)。本来还纳闷div莫名奇妙的怎么多出了一些外边距,甚至设置margin为0,都不能解决问题。到底是怎么回事呢。看示例:

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
  <title> new document </title>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  <style type="text/css">
	div {margin:0;padding:0;} 
	#top,#bottom {background:red;}
	#bottom{background:green;}
	p{margin:20px;margin:0;}
	#div {margin:30px;margin:0;}
  </style>
 </head>

 <body>
  <div id="top">
	<p>p-tag margin<p>
  </div>
  <div id="bottom">
	<div id="div">div margin</div>
  </div>
 </body>
</html>

 

此代码产生的是一个可以预料到的结果,看截图:

 

预想中的效果,没问题

 

针对css修改一下,看这两句:

 

/* 此时margin为0,效果OK */
p{margin:20px;margin:0;}
#div {margin:30px;margin:0;}

/* 接下来先去掉p标签的margin:0;让前面的定义生效 */

p{margin:20px;}
#div {margin:30px;margin:0;}

 

结果呢,效果截图:

 

???

 

 

有点奇怪,预料中,p-tag为id=top的div的子元素,应该是把top div 撑大才对,top div并没有限制高度啊。

结果就是top div 多出了外边距。那么换#div 去掉margin:0的限制,p加上margin:0;结果还是这样。就是说,不仅仅是p标签会引起这样的问题,故猜测所有的块级元素都会这样的。

 

当时布局时,FF下就出现了此种现象(但Opera正常。。。),但是没找到什么原因,后来再次次碰到,总算摸到规律了。

 

既然知道这样会引起问题,那么就可以避免这种布局写法。实在不能避免呢?巧合中,我找到了一种解决方法。

 

第一次碰到这种现象时,由于不知道原因,很纳闷,firedebug也看不出什么问题,而我有个习惯就是给元素加border看范围。一加border不要紧,居然修正了bug?!但是,这个border怎么办,不是所有的元素需要border的,于是加1px border的同时设置margin:-1px;这样就可以了,另外border的颜色设置和背景一样,防患于未然。

 

下面就是解决方案(除非你避免这种情况):

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
  <title> new document </title>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  <meta name="generator" content="editplus" />
  <meta name="author" content="" />
  <meta name="keywords" content="" />
  <meta name="description" content="" />
  <script type="text/javascript">
  <!--
  //-->
  </script>
  <style type="text/css">	
    div {margin:0;padding:0;} 

/* 这里添加修正代码  border:1px solid #000;margin:-1px*/
	#top,#bottom {background:red; border:1px solid #000;margin:-1px;}
	#bottom{background:green;}
	p{margin:20px;}
	#div {margin:30px;margin:0;}

  </style>
 </head>

 <body>
  <div id="top">
	<p>p-tag margin<p>
  </div>
  <div id="bottom">
	<div id="div">div margin</div>
  </div>
 </body>
</html>

 

 

效果预览:

 

 

 问题修正了

 

虽然还有border,但是-1px的margin至少不让宽度和高度增加,加入border颜色和背景一致也看不出来了。

 

 

 

2009年7月20日11:50:01

 

恼火,终于搜到一个解决方法,奇怪,当初我也是这么加的属性貌似没生效啊,今天却生效了。。。

 

http://www.women8.cn/Skill/Info.asp?infoid=24,参考资料,不是说的,这种问题的关键词还挺难想,搜出来,偶刚发的这篇还能排的上号。。。。。。

 

写这篇文章的人还真搞笑,知道解决方法,却不会组合。。。。偶下面组合一下,就全面兼容了:

 

#top {
    overflow:hidden; /* 针对FF,Opera有效 */
    zoom:1; /* 对IE有效 */
}

 

  • 大小: 5 KB
  • 大小: 7.3 KB
  • 大小: 6.1 KB
0
0
分享到:
评论

相关推荐

    css盒模型和块级、行内元素深入理解

    块级元素,如`&lt;div&gt;`、`&lt;p&gt;`和`&lt;h1&gt;`至`&lt;h6&gt;`,在默认情况下占据整行,彼此之间自动换行。它们可以设置宽度、高度以及内边距和边框,常用于构建页面结构和作为其他元素的容器。行内元素,如`&lt;a&gt;`、`&lt;em&gt;`和`&lt;strong&gt;...

    对行内元素和块级元素的一些认识

    块级元素的特点是它们之间有明显的换行,即每个块级元素会独占一行,可以设置宽高(width和height),并且margin和padding属性对上下左右四个方向都有效,允许我们控制元素之间的间距。 相比之下,行内元素则更为...

    深入理解css盒子模型1

    行内元素和块级元素可以通过CSS的`display`属性相互转换,例如将行内元素设置为`display: block`使其变为块级元素,或者将块级元素设置为`display: inline`使其变为行内元素。 水平格式化是指元素在水平方向上的...

    div横向排列

    将`div`的`display`属性设置为`inline-block`,可以使`div`元素像内联元素一样水平排列,同时保持块级元素的特性。这种方法比浮动更灵活,但需要注意`div`间的空白字符可能造成额外的间距,可以使用`font-size: 0`...

    web开发div+css布局

    3. 块级元素与行内元素:块级元素(如Div、p)占据整行,可设置宽度和高度;行内元素(如span、a)只占据自身内容的宽度,不能设置宽高。通过display属性可以转换元素的行为。 三、CSS布局模式 1. 流动布局(Flow ...

    css中padding、margin两个重要属性的详细介绍及举例说明

    - **行内块元素(Inline-Block Element)**:具有块级元素和内联元素的特点,可以在同一行显示多个元素,同时也能设置宽度和高度。 #### 三、`margin`属性详解 `margin`属性用于控制元素周围的空白区域,它不会占用...

    CSS.DIV网页样式与布局

    1. 块级元素与行内元素:在CSS布局中,`&lt;div&gt;`作为块级元素,它默认占据整个宽度,新的一行开始。而行内元素(如`&lt;span&gt;`)则只占据其内容的宽度。通过调整元素类型,我们可以控制元素的排列方式。 2. 浮动布局:CSS...

    BFC的布局规则.docx

    这样,父元素会包含其内部所有浮动元素的高度,避免了高度丢失的现象。 理解BFC布局规则有助于我们更好地控制页面元素的布局,解决浮动元素带来的问题,以及实现自适应高度等复杂布局需求。在CSS布局设计中,掌握...

    css 简单例子 div css 简单例子 div

    `div`是“division”的缩写,它是一个块级元素,通常用来组织网页中的内容。我们可以将多个`div`元素结合在一起,通过CSS来构建复杂的网页结构。 在CSS中,我们可以使用选择器来选中我们想要应用样式的元素。对于`...

    h5day2.docx

    它们的宽度和高度由其内部的内容自动决定。例如: - `&lt;span&gt;`:常用于添加特定样式的文本。 - `&lt;img&gt;`:用于在网页中插入图像。 - `&lt;a&gt;`:用于创建链接。 这些元素通常不会改变文档流的布局,也不会占用整行的空间...

    以div代替frameset,用css实现仿框架布局

    接下来,我们可以通过CSS的`width`、`height`、`margin`、`padding`等属性控制`div`的尺寸和间距,以达到类似`frameset`的分割效果。此外,`overflow`属性可以用来处理内容溢出的情况,比如设置`overflow: auto`可以...

    DIV 实现表格布局

    1. **创建`div`元素**:为每行和每列创建`div`元素,并给它们分配唯一的ID或类名以便后续选择和样式化。 ```html &lt;div id="row1"&gt; &lt;div class="cell"&gt;内容1&lt;/div&gt; &lt;div class="cell"&gt;内容2&lt;/div&gt; &lt;/div&gt; &lt;div id=...

    div+css技术文档

    3. **尺寸控制**:`width`和`height`属性用于设置Div的大小,而`margin`和`padding`则可以调整元素周围的空间,从而实现灵活的间距控制。 4. **背景与边框**:通过CSS,我们可以设置Div的背景颜色、图像,以及边框...

    div嵌套的div溢出时换行

    当一个div的总宽度(内容宽度+左右padding+左右border+左右margin)超过其父容器的宽度时,就会发生溢出。 3. **溢出处理**: 当内容或元素的尺寸超出其容器时,就会出现溢出。有几种方法可以处理这种溢出: - `...

    div + css页面布局

    块级元素如`&lt;div&gt;`默认占据一整行,可以设置宽度、高度、内边距和外边距。行内元素如`&lt;span&gt;`则只占据自身内容的宽度,不能设置高度和宽度。通过`display`属性,可以转换元素的行为,使块级元素表现得像行内元素,...

    Webkit内核的浏览器默认CSS属性

    - **`&lt;body&gt;`**:显示为块级元素,默认具有 `margin: 8px` 的外边距。 - **`&lt;p&gt;`**:显示为块级元素,默认上下外边距为 `1.0em`。 - **`&lt;div&gt;`**:显示为块级元素。 - **`&lt;layer&gt;`**:虽然不是标准HTML5元素,但在...

    关于DIV的各种样式

    CSS允许我们对`&lt;div&gt;`进行各种视觉调整,如设置颜色、大小、位置、边框、背景等。例如,可以使用以下代码将一个`&lt;div&gt;`的背景颜色设置为蓝色,字体颜色设置为白色: ```css div { background-color: blue; color:...

    span掉落的演示代码

    4. 如果需要控制间距,可以使用`margin`或`padding`,但要注意这些会影响元素的总尺寸。 5. 使用`vertical-align:middle`或`vertical-align:bottom`来调整元素的垂直对齐。 在提供的示例代码中,可能包含对这些问题...

    span margin 设置生效

    `margin-top`和`margin-bottom`对内联元素的影响通常会被忽略,因为它们之间会有文本换行的影响,而`margin-left`和`margin-right`则可以在同一行的元素之间产生间距。 `div`元素则是一个块级元素(block element)...

    DIV+CSS属性设置参数.pdf

    - 外边距(Margin)和内边距(Padding):影响元素与周围元素的距离和内部内容与边框的距离。 13. **漂浮(Float)**:允许元素在容器中浮动,常用于创建多列布局。 14. **字体大小(Size)**和**字体样式...

Global site tag (gtag.js) - Google Analytics