我来补充一下原因。
首先,我测试了一下,的确存在这个问题。
Scale the image, while preserving its intrinsic aspect ratio (if any), to the smallest size such that both its width and its height can completely cover the background positioning area.
这里有2个要点。1是保持图片自身的宽高比不变。2是会缩放图片,使得缩放后的图片所占据的尺寸,在宽、高两个维度上都要分别大于(或等于)容器的宽、高。
从这2个要点,其实可以得到结论,如果一个容器存在一定的宽和高(也就是都不为0),那么background-size: cover;一定可以保证背景图缩放至覆盖满整个容器。
但为什么题主发现不是这样呢?
注意到用的是body这个元素,而body在不通过css定义高的情况下,其高度是取决于内容的。那么,就可以想到,body的内容高度可能没有那么高,比如像下图这样:
这张图内可以看到body的高度只有100px(因为整个文档里只有这一行文字内容)。现在,再回头考虑那2个要点。背景图在保持比例的基础上进行缩放,且满足宽高分别超过body的宽高。显然,这张图只需要填满那个小区域就足够了。
为什么不继续扩大一点呢? 请注意W3C的那段话里的smallest。
所以,要保证覆盖满想要的整个区域,就让body填满整个区域,也就是为body和html添加height: 100%;。width: 100%;是不需要的,因为块元素默认就是满宽度。这就是 @Naraku_ 给的答案了。