Hello! 又到了H5页面开发的时候了。 今天带大家来开发一个响应式的H5页面,下面是页面的演示稿
3.1 为什么选择 rem 单位?
在传统的 CSS 中,使用 px(像素)单位来定义元素的尺寸会遇到一个问题:它是一个绝对单位,无法很好地应对不同屏幕的分辨率和缩放。而 rem(root em)单位是相对单位,它的大小是基于根元素(即 <html> 标签)的字体大小计算的。因此,使用 rem 单位可以更好地实现响应式布局,使得页面在不同的屏幕和设备上表现一致。
比如使用px单位在iphone XR跟 iphone 页面布局因为他们的宽度不同会造成巨大的布局差异。
不过此时我们还发现了一点小问题,怎么中间有丢丢空格?
当你把两个元素设置为 inline-block 时,元素会表现得像行内元素(inline),但又具有块级元素的特性(例如可以设置宽度和高度)。然而,使用 inline-block 时,两个元素之间会有一个默认的空白间隙。这是因为在 HTML 中,inline-block 元素之间存在空格、换行符或者其他不可见字符,浏览器会把这些字符当作空白渲染,从而导致它们之间的间隙。我们将问题解决方案放在文章的末尾,不影响文章阅读。
通过js动态设置HTML的字体大小
<script>
//阻塞 来动态设置 html font-size
function calc(){
const w = document.documentElement.clientWidth;
document.documentElement.style.fontSize = w / 10 + 'px';//这样在设置rem时10rem既是占满屏幕。
console.log(w);
}
calc();
window.onresize = function(){//当视窗发生变化时
calc();
}
</script>
设备适应问题解决,我们继续。在之前的教学中已经讲过了,我们应该先写结构,再写样式。 可以看到整体是一个上下分栏的界面,上边是一张置顶图片,下边则是我们的物品栏。物品栏的多个东西可以看成一个列表项。至此,我们可以很轻松的写出结构。我们使用BEM命名规范来写
<body>
<div class="page">
<div class="page__hd">
<img src="" alt="">
</div>
<div class="page__bd">
<div class="good-list">
<div class="good-list__bd">
<ul>
<li class="good-item">
<div class="good-item__bd">
<img src="" alt="">
<div class="flag-tittle">
<a href="">夏季长袖女款好看</a>
</div>
</div>
</li>
</ul>
</div>
</div>
</div>
</div>
</body>
接着我们来写css样式。先来重置下页面的样式
* {
margin: 0;
padding: 0;
}
html,body{
height: 100%;
background-color: rgb(222, 255, 192);
}
ul li{
list-style: none;
}
其他样式
.page__hd img{
width: 100%;
}
.page__bd{
padding: 0.13333rem;
}
.good-item{
}
.good-item img{
display: inline-block;
width: 2.34666rem;
height: 2.34666rem;
}
.flag-tittle{
display: inline-block;
height: 100%;
color: #000;
text-decoration: none;
vertical-align: top;
}
.flag-tittle a{
color: #000;
text-decoration: none;
}
中间空白符解决方法
-
删除 HTML 中的空格或换行符
如果你在两个
inline-block元素之间存在空格或者换行符(如在<div class="box">111</div>和<div class="box">222</div>之间),浏览器会渲染这个空白。因此,删除 HTML 中的空格或换行符可以解决问题。<body> <div class="box">111</div><div class="box">222</div> </body>这种方式简单有效,但代码不太易读。
-
通过 CSS 去掉间隙
你可以通过调整
font-size或者设置font-size: 0来去掉inline-block元素之间的间隙。body { font-size: 0; /* 去除所有空格 */ } .box { font-size: 16px; /* 恢复文字大小 */ }这样,
inline-block元素之间的间隙就会消失。 -
使用负边距(margin)
你也可以使用负边距来消除间隙。通过给
inline-block元素的右边添加负边距,来去掉它们之间的间隔。.box { margin-right: -4px; /* 根据需要调整负边距 */ } -
利用
flexbox代替inline-block如果你使用的是
inline-block来布局,考虑使用flexbox来代替。这不仅可以消除间隙问题,而且还会提供更多的灵活性。body { display: flex; } .box { margin-right: 0; /* 默认没有间隙 */ }使用
flexbox布局时,元素会自然排列,不会有空白间隙问题。我们使用设置body的字体为0来解决,这时候当我们设置了一个方块的字体时,问题又出现了。
怎么两个格子不一样高??? 经过查询发现这是一个基线对齐的原因,大家发现没有对齐的方式是111和222的底部在同一条直线?这就是默认的元素对齐方式:基线对齐。
vertical-align: top;:这行代码将选中元素的垂直对齐方式设置为顶部对齐。在CSS中,vertical-align属性用于指定元素在垂直方向上的对齐方式,可以设置为top(顶部对齐)、middle(居中对齐)、bottom(底部对齐)、baseline(基线对齐)等。
在你提供的代码上下文中,这段样式可能是用于设置某个元素(如图片、文本或其他内联元素)在其父元素中的垂直对齐方式。例如,如果一个图片需要与上方的文本顶部对齐,你可以将vertical-align: top;应用于该图片的CSS样式中。