"Bad value for attribute src on element img: Must be non-empty",用于动态生成img src
"Bad value for attribute src on element img: Must be non-empty", for dynamically generated img src
我有一个带有图像滑块的网站。当幻灯片进入视图以加快页面加载速度时,我将一些图像标签留空,因为图像会加载。图片标签定义如下:
<img data-src="img/portfolio-desktop1-small.png" src="" alt=""/>
我正在做的是在幻灯片功能上,我将 src
更改为 data-src
并使用 jQuery 动画。滑块效果很好。我的问题是当我尝试在 w3c validation tool 中验证它时出现以下错误:
Line 131, Column 179: Bad value for attribute src
on element img
: Must be non-empty.
...data-src="img/portfolio-desktop1-small.jpg" src="" alt=""/>
Syntax of URL:
Any URL. For example: /hello
, #canvas
, or http://example.org/
. > Characters should be represented in NFC and spaces should be escaped as %20
.
有没有办法在不改变 JavaScript 或 CSS 的情况下解决这个问题?如果我就这样放任不管,这件事可能造成的有害后果是什么?
如果您只是删除 src 属性,然后在需要时即时添加它,会发生什么情况。不需要 src 属性。在我看来,无论如何我都不会担心 w3c 验证工具所说的内容。只要你在必要的浏览器中测试它就可以了。
将图像 src
属性设置为 #
:
<img data-src="img/portfolio-desktop1-small.png" src="#" alt="Thumbnail">
HTML 很好地通过了 W3C 验证器,现代浏览器知道不要尝试加载 non-existent 图像。*
相比之下,使用引用 non-existent 文件的 src
值会导致不必要的 HTTP 请求和错误:
<img data-src="img/portfolio-desktop1-small.png" src="bogus.png" alt="Thumbnail">
Failed to load resource: The requested URL was not found on this server.
*注意:我读过有关浏览器如何处理 #
的相互矛盾的信息。如果有人有确切的信息,请添加评论。
另请参阅 sideshowbarker 关于 action
属性的相关回答:
更新:2019 年 12 月
似乎 src="#"
技巧曾经是一个不错的解决方法,但现在不是了。我现在要做的是为 post-process src="#"
创建一个 Gulp 构建任务,以使用一个微小的不可见的单像素 SVG 的内联 data URL。
基本的 gulpfile.js 位看起来像:
const onePixelSvg = '<svg xmlns="http://www.w3.org/2000/svg" width="1" height="1"></svg>';
const placeholderSvg = `"data:image/svg+xml;base64,${Buffer.from(onePixelSvg).toString('base64')}"`;
const task = {
buildHtml() {
return gulp.src('src/html/**/*.html')
.pipe(replace('src="#"', 'src=' + placeholderSvg))
.pipe(gulp.dest('build'));
}
};
gulp.task('build-html', task.buildHtml);
使用构建任务的优点是 1) 源保持整洁,2) HTML 始终验证,以及 3) 内联数据 URL 防止浏览器进行不必要的和无效的网络请求。
2021 年 1 月更新。 src="#" 技巧现在可以在 https://www.w3.org/TR/html-media-capture/
的验证器上使用
我有一个带有图像滑块的网站。当幻灯片进入视图以加快页面加载速度时,我将一些图像标签留空,因为图像会加载。图片标签定义如下:
<img data-src="img/portfolio-desktop1-small.png" src="" alt=""/>
我正在做的是在幻灯片功能上,我将 src
更改为 data-src
并使用 jQuery 动画。滑块效果很好。我的问题是当我尝试在 w3c validation tool 中验证它时出现以下错误:
Line 131, Column 179: Bad value for attribute
src
on elementimg
: Must be non-empty....data-src="img/portfolio-desktop1-small.jpg" src="" alt=""/>
Syntax of URL:
Any URL. For example:/hello
,#canvas
, orhttp://example.org/
. > Characters should be represented in NFC and spaces should be escaped as%20
.
有没有办法在不改变 JavaScript 或 CSS 的情况下解决这个问题?如果我就这样放任不管,这件事可能造成的有害后果是什么?
如果您只是删除 src 属性,然后在需要时即时添加它,会发生什么情况。不需要 src 属性。在我看来,无论如何我都不会担心 w3c 验证工具所说的内容。只要你在必要的浏览器中测试它就可以了。
将图像 src
属性设置为 #
:
<img data-src="img/portfolio-desktop1-small.png" src="#" alt="Thumbnail">
HTML 很好地通过了 W3C 验证器,现代浏览器知道不要尝试加载 non-existent 图像。*
相比之下,使用引用 non-existent 文件的 src
值会导致不必要的 HTTP 请求和错误:
<img data-src="img/portfolio-desktop1-small.png" src="bogus.png" alt="Thumbnail">
Failed to load resource: The requested URL was not found on this server.
*注意:我读过有关浏览器如何处理 #
的相互矛盾的信息。如果有人有确切的信息,请添加评论。
另请参阅 sideshowbarker 关于 action
属性的相关回答:
更新:2019 年 12 月
似乎 src="#"
技巧曾经是一个不错的解决方法,但现在不是了。我现在要做的是为 post-process src="#"
创建一个 Gulp 构建任务,以使用一个微小的不可见的单像素 SVG 的内联 data URL。
基本的 gulpfile.js 位看起来像:
const onePixelSvg = '<svg xmlns="http://www.w3.org/2000/svg" width="1" height="1"></svg>';
const placeholderSvg = `"data:image/svg+xml;base64,${Buffer.from(onePixelSvg).toString('base64')}"`;
const task = {
buildHtml() {
return gulp.src('src/html/**/*.html')
.pipe(replace('src="#"', 'src=' + placeholderSvg))
.pipe(gulp.dest('build'));
}
};
gulp.task('build-html', task.buildHtml);
使用构建任务的优点是 1) 源保持整洁,2) HTML 始终验证,以及 3) 内联数据 URL 防止浏览器进行不必要的和无效的网络请求。
2021 年 1 月更新。 src="#" 技巧现在可以在 https://www.w3.org/TR/html-media-capture/
的验证器上使用