前端学习(3): 负Margin的一个用途

准备深入学习一下前端并计划每周至少写一篇关于前端的文章。这是第三篇啦。


手机微信的布局如下图:

前端学习(3): 负Margin的一个用途
图1:微信布局

如果用 HTML 来模仿这个布局,可以认为整个屏幕是一个盒子,盒子最上面是带有灰色背景的标题行,下面则是聊天入口。

故可以假设 HTML 结构如下:

<div class="container">
  <header>微信</header>
  <p>聊天1</p>
  <p>聊天2</p>
  <p>聊天3</p>
</div>

该结构在浏览器中默认渲染的效果是这样的:

前端学习(3): 负Margin的一个用途
图2:默认渲染样式

不好看!我们加一些样式,以便于观察:

* {
  padding0;
  margin0;
}

:root {
  font-size14px;
}

.container {
  width12rem;
  height18rem;
  border1px solid blue;
  border-radius4px;
  margin2rem auto;
}

现在,它的渲染效果是这样:

前端学习(3): 负Margin的一个用途
图3:加点样式

嗯,这样多少贴近手机屏的外观了。

我们再观察图1微信首屏的样式,整个容器内部其实是有内边距的,我们也加一个:

.container {
  padding1em;
}

此时效果如下:

前端学习(3): 负Margin的一个用途
图4:给窗口

微信的标题行有灰色背景,我们也加一下:

.container > header {
  background#ccc;
}

效果如下:

前端学习(3): 负Margin的一个用途
图5:标题行加灰色背景

不对,这不是我们想要的。我们要的效果是 标题行背景占据容器的整个头部(标题行的左右和上面都不留白) 。但现在的问题是,容器自身的内边距限制了标题行。

怎么办呢?

这个时候,负Marigin 就大有用处了。

我们知道,容器的内边距(padding)是为了给容器内元素的周围以留白,如果容器内某个元素不想要这些留白,可以给自身设置 负Marigin 以抵销留白效果。

因此,我们可以这么做:

.container > header {
  background#ccc;
  margin: -1rem -1rem 1rem -1rem;
}

此时,它渲染效果是这样:

前端学习(3): 负Margin的一个用途
图6:利用负Marigin消除内边距影响

我们做到了背景色填充整个容器!但因为容器的内边距被抵销掉了,所有标题行就太靠左了,没关系,我们给标题行加个和容器一样的左边距:

.container > header {
  padding-left1rem;
}
前端学习(3): 负Margin的一个用途
图7:给标题行添加内边距

不错,标题和下面的文本也对齐了。但标题显得太【窄】了,可以把 padding-left 改为 padding,变相地将标题拉高:

.container > header {
  padding1rem;
}
前端学习(3): 负Margin的一个用途
图8:一个完整的微信布局

不错。再微调一下,给几个聊天入口也加些边距:

.container > p {
  padding4px 0;
}
前端学习(3): 负Margin的一个用途
图9:微信布局最终版

好啦,一个简单的微信布局,我们主要是学到了 负Margin 的一个用途:抵销父容器内边距的影响

CodePen Demo 在这里(也可点击【阅读原文】查看):https://codepen.io/Youmoo/pen/PoGPPeg[1]

另外,我还写了一个微信电脑版的布局样式,如果你也感兴趣,点这里:https://codepen.io/Youmoo/pen/Vwjojre[2]

前端学习(3): 负Margin的一个用途

欢迎阅读!

参考资料

[1]

负margin解决容器padding问题: https://codepen.io/Youmoo/pen/PoGPPeg

[2]

CSS实现微信电脑版布局: https://codepen.io/Youmoo/pen/Vwjojre

– END –


原文始发于微信公众号(背井):前端学习(3): 负Margin的一个用途

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/246782.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!