Chr*_*ois 1 html css frontend semantic-markup
我已经开始使用一种技术来处理前端设计中的垂直间距,该技术使用透明<hr>的间距元素.我知道这归咎于大多数网络社区的仇恨,但我仍然认为这是处理特殊情况的好方法.以下是好处:
<hr> 是一个自动关闭的标签,所以它在标记上很友好<hr>只占空间的不可见不会反对元素的语义.我非常清楚标记和样式之间需要分离.然而,在响应式设计中,元素之间的垂直间距有时是繁琐的,并且在我看来,它通常比语义标记具有更高的价格.
一种常见的方法是使用手动样式处理特殊情况:当基于组件的类(如.my-special-recurring-element不够精确)(假设这个特定的类太靠近它下面的元素)时,请#special-element-that-requires-spacing手动添加id 并设置样式,这样就变成了很难维护:
/* Ensure that the special element is not too close to the footer in mobile */
#special-element-that-requires-spacing {
margin-bottom: 1rem;
}
@media screen and (min-width: 640px) {
#special-element-that-requires-spacing {
margin-bottom: 0;
}
}
Run Code Online (Sandbox Code Playgroud)
这就是为什么像Tachyons和Basscss这样的CSS实用工具包近年来变得越来越流行的原因.它允许使用内联类调整垂直间距,并具有直接响应处理的附加好处.我们现在可以像这样编写我们的HTML(Tachyons中的例子):
<div class="my-special-recurring-element mb1 mb0-ns"></div>
Run Code Online (Sandbox Code Playgroud)
其中.mb1粗略意味着在我们的尺寸范围内应用1的边距底部,并且mb0-ns意味着在非小视口宽度中应用边距为零的底部.这对于前端设计来说肯定更实用,但它经常变得杂乱无章 - 在我看来 - 它比任何东西都更加蔑视标记样式分离.使用这样的工具包,我们经常会得到这样的标记:
<div class="ph2 pv3 pv2-m pv1-l mb2 mb2-ns"></div>
Run Code Online (Sandbox Code Playgroud)
所以我们在这里做的是实用和快速,但不可维护.它也无法帮助我们解决一个非常常见的用例:"我在哪里放置空间?我要添加一个padding-bottom吗?一margin-top到这一点?哦,我需要删除移动设备上的填充,但这里的边距是非小的"等等,等等.
输入<hr>空格.我们现在可以<hr class="space-1">在我们想要分离的两个元素之间放置一个单独的元素,并且在元素之间具有一致的,可读的,可维护的和语义的间隔,这既不会混淆标记也不会混淆样式表.
hr.space-1 {
background: transparent;
color: transparent;
margin: 0;
height: 1rem;
}
@media screen and (min-width: 640px) {
hr.space-1 {
height: 1.5rem;
}
}
@media screen and (min-width: 1200px) {
hr.space-1 {
height: 2rem;
}
}
Run Code Online (Sandbox Code Playgroud)
这真的是犯罪吗?你用这种方法看到了什么缺点?