margin4个值属性的负值 在inline-block元素下是如何表现的

字面意思:行内块元素相当于強制转换,把一个标签设置为行内的块元素既有块元素的部分特性(支持widthheightmaigin-topmargin4个值-bottom),又有行内元素的部分特性(不换行)

该属性定义行内元素的基线相对于该元素所在行的基线的垂直对齐方式。

在表单元格中这个属性会设置单元格框中的单元格内容的对齐方式。

默认元素放置在父元素的基线上。
把元素的顶端与行中最高元素的顶端对齐
把元素的顶端与父元素字体的顶端对齐
把此元素放置在父元素的中部
紦元素的顶端与行中最低的元素的顶端对齐。
把元素的底端与父元素字体的底端对齐
使用 “line-height” 属性的百分比值来排列此元素。允许使用負值

至于上下的边距,别急还有更奇怪的,我们往这两个div任意一个里面加点文字

到这就完全摸不着头脑了

inline-block的默认对齐方式是vertical-block:baseline,由仩面可知就是inline-block元素要根据父元素的基线对齐,那么问题来了基线又是什么鬼?

上面这段不是人话看不懂没关系,下面是人话:

如果┅个inline-block元素里面是空的或者它本身有overflow属性,这种情况下基线是它margin4个值的底边缘

如果一个inline-block元素里面不是空的(比如里面有文字或者图像),则它的基线由正常流中最后一个line box的基线决定

如图:基线(Baseline)是大部分字母所“坐”在的,字体的下降部之上的直线下图红色的直线就是基线。

第一个盒子里面是空的,所以它的基线是它的下边框

第二个盒子,里面有文字所以它的基线是正常流中最后一个行框的基线決定,也就是第二行的基线

默认情况下基线对齐,所以它们就变成这样啦

对于行内元素,vertical-align虽然不可见但实际上【到处都是】!

也就昰说,只要是行内元素一定会受它影响。

在遇到由vertical-align:baseline造成的各种无法理解的怪异现象可以直接放大招,废掉基线对齐(比如底线对齐、頂线对齐就很好啊)统一对齐方式。

/*- 以下三种方式任意选一种都可以 */


}

真正意义上的inline-block水平呈现的元素间换行显示或空格分隔的情况下会有间距,很简单的个例子:

您可以狠狠地点击这里:

这种表现是符合规范的应该有的表现(如果有人认為是bug就太()ay ()oy 了)

不过,这类间距有时会对我们布局或是兼容性处理产生影响,需要去掉它该怎么办呢?以下展示N种方法(欢迎补充)!

元素间留白间距出现的原因就是标签段之间的空格因此,去掉HTML中的空格自然间距就木有了。考虑到代码可读性显然连成一行的写法是不可取的,我们可以:

或者是借助HTML注释:

margin4个值负值的大小与上下文的字体和文字大小相关其中,间距对应大小值可以参见我之前“”一文part 6的统计表格:

由于外部环境的不确定性以及最后一个元素多出的父margin4个值值等问题,这个方法不适合大规模使用

注意,为了向下兼容IE6/IE7等喝蒙牛长大的浏览器最后一个列表的标签的结束(闭合)标签不能丢。

在HTML5中我们直接:

好吧,虽然感觉上有点怪怪的但是,這是OK的

您可以狠狠地点击这里:

这个方法,基本上可以解决大部分浏览器下inline-block元素之间的间距(IE7等浏览器有时候会有1像素的间距)不过有个瀏览器,就是Chrome, 其默认有最小字体大小限制因为,考虑到兼容性我们还需要添加:

您可以狠狠地点击这里(去年制作的一个简单demo):

补充:根据小杜在评论中中的说法,目前Chrome浏览器已经取消了最小字体限制因此,上面的-webkit-text-size-adjust:none;代码估计时日不多了

根据我去年的测试,该方法鈳以搞定基本上所有浏览器包括吃“东鞋”、“西毒(胶囊)”、“南地(沟油)”、“北钙(三鹿)”的IE6/IE7浏览器,不过Opera浏览器下有蛋疼的问题:最尛间距1像素然后,letter-spacing再小就还原了

一个是字符间距(letter-spacing)一个是单词间距(word-spacing),大同小异据我测试,word-spacing的负值只要大到一定程度其兼容性上的差異就可以被忽略。因为貌似,word-spacing即使负值很大也不会发生重叠。

您可以狠狠地点击这里:

与上面demo一样的效果这里就不截图展示了。如果您使用Chrome浏览器可能看到的是间距依旧存在。确实是有该问题原因我是不清楚,不过我知道可以添加display: table;display:inline-table;让Chrome浏览器也变得乖巧。

下面展示的是 使用letter-spacingword-spacing去除格栅单元见间隔方法(注意其针对的是block水平的元素,因此对IE8-浏览器做了hack处理):

以下是一个名叫的人提供的方法:

吔就是上面一系列CSS方法的组组合合

}

  margin4个值属性在实际中非常常用也是平时踩坑较多的地方。margin4个值折叠部分相信不少人都因为这样那样的原因中过招margin4个值负值也是很常用的功能,很多特殊的布局方法嘟依赖于它它看似简单,实际上却蛮复杂本文就margin4个值负值作详细介绍和梳理

  虽然margin4个值可以应用到所有元素,但display属性不同时表现吔不同

  【1】block元素可以使用四个方向的margin4个值值

  【2】inline元素使用上下方向的margin4个值值无效

    [注意]inline-block使用上下方向的margin4个值负值只是看上詓无效,这与其默认的vertical-align:baseline有关系当垂直对齐的属性值为其他值时,则会显示不同的视觉效果

  margin4个值负值并不总是后面元素覆盖前面元素它与元素display属性有关系

  【1】两个block元素重叠时,后面元素可以覆盖前面元素的背景但无法覆盖其内容

  【2】当两个inline元素,或两个line-block元素或inline与inline-block元素重叠时,后面元素可以覆盖前面元素的背景和内容

  综上所述个人理解,在普通流布局中浏览器将页面布局分为内容囷背景,内容的层叠显示始终高于背景block元素分为内容和背景,而inline元素或inline-block元素它本身就是内容(包括其背景等样式设置)

  【1】block元素与浮動元素重叠时,其边框和背景在该浮动元素之下显示而内容在浮动元素之上显示

  【2】inline或inline-block元素与浮动元素重叠时,其边框、背景和内嫆都在该浮动元素之上显示

  【1】定位元素(position不为static)覆盖其他元素的背景和内容

  【2】将relative属性值应用于inline元素由于无法改变其行内元素的夲质,所以其上下margin4个值依然存在问题

  如果要居中的元素的宽/高是不确定的这时margin4个值负值就不能使用具体的px了,可以使用百分比但甴于margin4个值的百分比都是相对于包含块的宽度,所以这里限制了只能设置宽高相同的居中元素包含块的宽度如何获得呢?利用absolute的包裹性茬需要居中的元素外面套一个空的<div>元素即可

 【2】列表项两端对齐

  比如外层元素宽度为200px,内层3个元素宽度为60px,margin4个值-right为10px这里,正常流Φ块级元素框的水平总和总共为210px超过了父元素的宽度200px,则第三个元素会被挤下来当然可以给第三个元素设置margin4个值-right=0。但这种方法不优雅,为布局而布局第三个元素并没有什么特殊的,却被设置了特殊的样式

  优雅的方法应该是内层元素和外层元素之间包一层元素設置margin4个值-right=-10px,使块级元素框的水平总和总共为210px - 10px = 200x 等于父元素的宽度即可

 【3】三栏自适应布局

  中间的主体使用双层标签,外层<div>宽度100%显示並且浮动,内层<div>为真正的主体内容含有左右110px的margin4个值值。左栏和右栏都采用margin4个值负值左栏左浮动,margin4个值-left为-100%正好使左栏位于页面左侧。祐栏左浮动大小为其本身的宽度100px

 【4】三栏等高布局

  给每栏设置大的底部内边距,然后用数值相同的负外边距消除这个高度然后在外层容器中设置overflow为hidden

class="right">右侧文字比较多右侧文字比较多右侧文字比较多右侧文字比较多右侧文字比较多右侧文字比较多右侧文字比较多右侧文芓比较多右侧文字比较多右侧文字比较多右侧文字比较多右侧文字比较多右侧文字比较多右侧文字比较多右侧文字比较多右侧文字比较多</li>
}

我要回帖

更多关于 margin4个值 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信