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
分享到:
相关推荐
块级元素,如`<div>`、`<p>`和`<h1>`至`<h6>`,在默认情况下占据整行,彼此之间自动换行。它们可以设置宽度、高度以及内边距和边框,常用于构建页面结构和作为其他元素的容器。行内元素,如`<a>`、`<em>`和`<strong>...
块级元素的特点是它们之间有明显的换行,即每个块级元素会独占一行,可以设置宽高(width和height),并且margin和padding属性对上下左右四个方向都有效,允许我们控制元素之间的间距。 相比之下,行内元素则更为...
行内元素和块级元素可以通过CSS的`display`属性相互转换,例如将行内元素设置为`display: block`使其变为块级元素,或者将块级元素设置为`display: inline`使其变为行内元素。 水平格式化是指元素在水平方向上的...
将`div`的`display`属性设置为`inline-block`,可以使`div`元素像内联元素一样水平排列,同时保持块级元素的特性。这种方法比浮动更灵活,但需要注意`div`间的空白字符可能造成额外的间距,可以使用`font-size: 0`...
3. 块级元素与行内元素:块级元素(如Div、p)占据整行,可设置宽度和高度;行内元素(如span、a)只占据自身内容的宽度,不能设置宽高。通过display属性可以转换元素的行为。 三、CSS布局模式 1. 流动布局(Flow ...
- **行内块元素(Inline-Block Element)**:具有块级元素和内联元素的特点,可以在同一行显示多个元素,同时也能设置宽度和高度。 #### 三、`margin`属性详解 `margin`属性用于控制元素周围的空白区域,它不会占用...
1. 块级元素与行内元素:在CSS布局中,`<div>`作为块级元素,它默认占据整个宽度,新的一行开始。而行内元素(如`<span>`)则只占据其内容的宽度。通过调整元素类型,我们可以控制元素的排列方式。 2. 浮动布局:CSS...
这样,父元素会包含其内部所有浮动元素的高度,避免了高度丢失的现象。 理解BFC布局规则有助于我们更好地控制页面元素的布局,解决浮动元素带来的问题,以及实现自适应高度等复杂布局需求。在CSS布局设计中,掌握...
`div`是“division”的缩写,它是一个块级元素,通常用来组织网页中的内容。我们可以将多个`div`元素结合在一起,通过CSS来构建复杂的网页结构。 在CSS中,我们可以使用选择器来选中我们想要应用样式的元素。对于`...
它们的宽度和高度由其内部的内容自动决定。例如: - `<span>`:常用于添加特定样式的文本。 - `<img>`:用于在网页中插入图像。 - `<a>`:用于创建链接。 这些元素通常不会改变文档流的布局,也不会占用整行的空间...
接下来,我们可以通过CSS的`width`、`height`、`margin`、`padding`等属性控制`div`的尺寸和间距,以达到类似`frameset`的分割效果。此外,`overflow`属性可以用来处理内容溢出的情况,比如设置`overflow: auto`可以...
1. **创建`div`元素**:为每行和每列创建`div`元素,并给它们分配唯一的ID或类名以便后续选择和样式化。 ```html <div id="row1"> <div class="cell">内容1</div> <div class="cell">内容2</div> </div> <div id=...
3. **尺寸控制**:`width`和`height`属性用于设置Div的大小,而`margin`和`padding`则可以调整元素周围的空间,从而实现灵活的间距控制。 4. **背景与边框**:通过CSS,我们可以设置Div的背景颜色、图像,以及边框...
当一个div的总宽度(内容宽度+左右padding+左右border+左右margin)超过其父容器的宽度时,就会发生溢出。 3. **溢出处理**: 当内容或元素的尺寸超出其容器时,就会出现溢出。有几种方法可以处理这种溢出: - `...
块级元素如`<div>`默认占据一整行,可以设置宽度、高度、内边距和外边距。行内元素如`<span>`则只占据自身内容的宽度,不能设置高度和宽度。通过`display`属性,可以转换元素的行为,使块级元素表现得像行内元素,...
- **`<body>`**:显示为块级元素,默认具有 `margin: 8px` 的外边距。 - **`<p>`**:显示为块级元素,默认上下外边距为 `1.0em`。 - **`<div>`**:显示为块级元素。 - **`<layer>`**:虽然不是标准HTML5元素,但在...
CSS允许我们对`<div>`进行各种视觉调整,如设置颜色、大小、位置、边框、背景等。例如,可以使用以下代码将一个`<div>`的背景颜色设置为蓝色,字体颜色设置为白色: ```css div { background-color: blue; color:...
4. 如果需要控制间距,可以使用`margin`或`padding`,但要注意这些会影响元素的总尺寸。 5. 使用`vertical-align:middle`或`vertical-align:bottom`来调整元素的垂直对齐。 在提供的示例代码中,可能包含对这些问题...
`margin-top`和`margin-bottom`对内联元素的影响通常会被忽略,因为它们之间会有文本换行的影响,而`margin-left`和`margin-right`则可以在同一行的元素之间产生间距。 `div`元素则是一个块级元素(block element)...
- 外边距(Margin)和内边距(Padding):影响元素与周围元素的距离和内部内容与边框的距离。 13. **漂浮(Float)**:允许元素在容器中浮动,常用于创建多列布局。 14. **字体大小(Size)**和**字体样式...