关于CSS一些细节问题

本文是2016年的最后一篇文章,主要是将一些CSS细节问题整理一下。

  • background-position取值为百分比的计算方式
  • margin相邻折叠问题
  • position的absolute和relative定位top、left、right、bottom问题
  • 覆盖样式问题

1、background-position取值为百分比的计算方式

background-position属性相信你用的不少,可是当取值为百分比时,你是否认为它是相对于背景图片的尺寸来计算(我之前也是这种想法,但看了大漠老师的《你真的了解background-position》后,才知大错特错)

来看看下面的代码:

.box {   
  width:400px;   
  height:400px;   
  background-color:black;   
  background-image:url(mm.jpg);   /* 图片原尺寸150 * 225 */
  background-repeat:no-repeat;   
  background-position:50% 50%;  
}

相信background-position: 50% 50%你用的不少,这是让背景图片居中,相当于center center。

效果如下:

如果50%是按照图片的尺寸(150 * 225)来计算的,那么其值转换为像素值应该是75px 112.5px,你觉得背景图片能在400 * 400的块里居中吗?答案很明显,是否定的,那是如何计算的呢?

其实官方说法是这样的:

当背景图片尺寸(background-size)不做任何的重置(也就是100% 100%)时,水平百分比的值等于容器宽度百分比值减去背景图片宽度百分比值。垂直百分比的值等于容器高度百分比值减去背景图片高度百分比值。

水平位置: (400 - 150) * 50% = 125px
垂直位置: (400 - 225) * 50% = 87.5px

2、margin相邻折叠问题

在开发中,我们偶尔会遇到明明两个div都设置了margin,可是它们之间的距离就是不等于两个div的margin之间的和,这是为什么呢?其实是因为在某些情况下,两个或多个块元素的相邻边界(其间没有任何非空内容、padding、边框)会发生合并成单一边界,也就是标题说的折叠。

先来看看兄弟块级元素的折叠,如下图所示:

dfasdfsadfwer.jpg

还要注意的是,父元素与其子元素之间也会发生折叠:

2个或多个块级相邻元素的外边距(margin)的折叠规则:

  • 外边距都为正值时,取最大值
  • 不全是正值时,则用正值减去(所有值的绝对值中)最大值
  • 全为负值时,则取最小值

不发生折叠情况:

  • 水平(左右)外边距不会折叠
  • 浮动元素的外边距不会折叠,并且浮动元素与它的子元素之间也不会发生折叠
  • 设置了overflow且值不为visible的块级元素与它的子元素之间的外边距也不会被折叠
  • 绝对定位(position:absolute;)元素的margin不与任何margin发生折叠,并且与它的子元素之间的margin也不会发生折叠

解决折叠的方法:

  • 外层元素用padding替代margin
  • 外层元素设置overflow:hidden
  • 内层元素加padding:1或者border
  • 内层元素加浮动(float)或设为(display:inline-block)
  • 内层元素使用绝对定位(position:absolute;)

3、position的absolute和relative定位top、left、right、bottom问题

绝对定位(position:absolute)的top、left、right、bottom是相对于其具有相对定位属性(position不为static)的父元素(不一定是其直接父元素,有可能是祖先元素)。

如果两者(top、bottom)同时存在时,只有top起作用;如果两者(left、right)同时存在时,只有left起作用。

相对定位(position:relative)元素会保留原来占有的位置,其后面的元素按原来文档流仍然保持原来的位置
top的值表示对象相对原位置向下偏移的距离
bottom的值表示对象相对原位置向上偏移的距离
left的值表示对象相对原位置向右偏移的距离
right的值表示对象相对原位置向左偏移的距离
如果两者(top、bottom)同时存在时,只有top起作用;如果两者(left、right)同时存在时,只有left起作用。

看一个例子:

<style>
.prev{   
  width:100px;    
  height:100px;   
  position:relative;   
  background:blue;   
  top:20px;   
}   
.next{   
  width:100px;   
  height:100px;   
  background:red;   
}   
.fl{   
  float:left;   
  margin:20px;   
}
</style>

<div class="fl">   
  <div class="prev" style="position:static"></div>   
  <div class="next"></div>   
</div>   
<div class="fl">   
  <div class="prev"></div>   
  <div class="next"></div>   
</div>

从上面的代码和效果图,你可以看出,设置了position:relative的元素设置了top:20px,虽然(相对其原位置)向下移动了20px,可是并不会影响其后面的元素。

4、覆盖样式问题

比如我们有一个公共文件,其下有一个公共样式:

.box {
  color: red;
}

有些时候,我们需要覆盖这个样式,比如将红色改为绿色。由于是公共元素,我们不能直接修改,但方法还是有多种:

/*第一种*/
.parent .box {
  color: green;
}
/*第二种*/
.box {
  color: green !important;
}

上面这些是我们常用的,但还有一个小技巧,是我们平常不太注意的,可以如下设置:

.box.box {
  color: green;
}

今天就介绍这么多,如有错误,欢迎指正!

原文链接:关于CSS一些细节问题

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,725评论 1 92
  • 各种纯css图标 CSS3可以实现很多漂亮的图形,我收集了32种图形,在下面列出。直接用CSS3画出这些图形,要比...
    剑残阅读 9,458评论 0 8
  • 学习CSS的最佳网站没有之一 http://www.w3school.com.cn/tags/index.asp ...
    Amyyy_阅读 1,023评论 0 1
  • 当margin的值为百分比形式时,为什么浏览器会根据父容器宽度得出计算值? 假如有一个父容器宽度400px,高度6...
    飘雪飞舞阅读 881评论 0 0
  • 为了你的一个回眸 我了却今生 所有温柔 惟愿来世 你能 从我身旁走过 我恣意地绽放 为你花开 却为 自己花落 ...
    今夕似何夕阅读 272评论 0 0