Google 个图表 HTML 个从右到左的问题
Google charts HTML right to left issue
我在 html 中为从右到左的网页使用带有 dir="rtl" 标签的 Google 图表时遇到了一个奇怪的错误。
发生的情况是页面变大 space 并且无缘无故向左滚动。发生在我的 Chrome 和 Safari 上。
<html lang="ar" dir="rtl">
这是在 jsfiddle 上重现错误的最简单方法
https://jsfiddle.net/t4ve0kkf/
google.load('visualization', '1', {packages: ['corechart', 'bar']});
google.setOnLoadCallback(drawBasic);
function drawBasic() {
var data = new google.visualization.DataTable();
data.addColumn('timeofday', 'Time of Day');
data.addColumn('number', 'Motivation Level');
data.addRows([
[{v: [8, 0, 0], f: '8 am'}, 1],
[{v: [9, 0, 0], f: '9 am'}, 2],
[{v: [10, 0, 0], f:'10 am'}, 3],
[{v: [11, 0, 0], f: '11 am'}, 4],
[{v: [12, 0, 0], f: '12 pm'}, 5],
[{v: [13, 0, 0], f: '1 pm'}, 6],
[{v: [14, 0, 0], f: '2 pm'}, 7],
[{v: [15, 0, 0], f: '3 pm'}, 8],
[{v: [16, 0, 0], f: '4 pm'}, 9],
[{v: [17, 0, 0], f: '5 pm'}, 10],
]);
var options = {
title: 'Motivation Level Throughout the Day',
hAxis: {
title: 'Time of Day',
format: 'h:mm a',
viewWindow: {
min: [7, 30, 0],
max: [17, 30, 0]
}
},
vAxis: {
title: 'Rating (scale of 1-10)'
}
};
var chart = new google.visualization.ColumnChart(
document.getElementById('chart_div'));
chart.draw(data, options);
}
<html lang="ar" dir="rtl">
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<div id="chart_div"></div>
</html>
我也尝试过将 lang 和 dir 添加到图表 div 中,同时将 rtl 标记保留在主 html 中,但没有成功
<div id="chart_div" lang="en" dir="ltr"> </div>
使用页面检查器检查呈现的 HTML 似乎 HTML 的这一部分导致了问题:
<div aria-label="Данные диаграммы в виде таблицы." style="position: absolute; left: -10000px; top: auto; width: 1px; height: 1px; overflow: hidden;">/* ... */</div>
所以基本上 "hiding" 带有 left: -10000px
的 ARIA 元素与 rtl 文档不兼容,因为很明显它会由于负左而增加这个巨大的差距。
修复它的一种方法是强制这个 aria-lable 使用 left: auto
渲染并将它移动到顶部:
html[dir="rtl"] svg + [aria-label] {
top: -1000px !important;
left: auto !important;
}
我在 html 中为从右到左的网页使用带有 dir="rtl" 标签的 Google 图表时遇到了一个奇怪的错误。
发生的情况是页面变大 space 并且无缘无故向左滚动。发生在我的 Chrome 和 Safari 上。
<html lang="ar" dir="rtl">
这是在 jsfiddle 上重现错误的最简单方法 https://jsfiddle.net/t4ve0kkf/
google.load('visualization', '1', {packages: ['corechart', 'bar']});
google.setOnLoadCallback(drawBasic);
function drawBasic() {
var data = new google.visualization.DataTable();
data.addColumn('timeofday', 'Time of Day');
data.addColumn('number', 'Motivation Level');
data.addRows([
[{v: [8, 0, 0], f: '8 am'}, 1],
[{v: [9, 0, 0], f: '9 am'}, 2],
[{v: [10, 0, 0], f:'10 am'}, 3],
[{v: [11, 0, 0], f: '11 am'}, 4],
[{v: [12, 0, 0], f: '12 pm'}, 5],
[{v: [13, 0, 0], f: '1 pm'}, 6],
[{v: [14, 0, 0], f: '2 pm'}, 7],
[{v: [15, 0, 0], f: '3 pm'}, 8],
[{v: [16, 0, 0], f: '4 pm'}, 9],
[{v: [17, 0, 0], f: '5 pm'}, 10],
]);
var options = {
title: 'Motivation Level Throughout the Day',
hAxis: {
title: 'Time of Day',
format: 'h:mm a',
viewWindow: {
min: [7, 30, 0],
max: [17, 30, 0]
}
},
vAxis: {
title: 'Rating (scale of 1-10)'
}
};
var chart = new google.visualization.ColumnChart(
document.getElementById('chart_div'));
chart.draw(data, options);
}
<html lang="ar" dir="rtl">
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<div id="chart_div"></div>
</html>
我也尝试过将 lang 和 dir 添加到图表 div 中,同时将 rtl 标记保留在主 html 中,但没有成功
<div id="chart_div" lang="en" dir="ltr"> </div>
使用页面检查器检查呈现的 HTML 似乎 HTML 的这一部分导致了问题:
<div aria-label="Данные диаграммы в виде таблицы." style="position: absolute; left: -10000px; top: auto; width: 1px; height: 1px; overflow: hidden;">/* ... */</div>
所以基本上 "hiding" 带有 left: -10000px
的 ARIA 元素与 rtl 文档不兼容,因为很明显它会由于负左而增加这个巨大的差距。
修复它的一种方法是强制这个 aria-lable 使用 left: auto
渲染并将它移动到顶部:
html[dir="rtl"] svg + [aria-label] {
top: -1000px !important;
left: auto !important;
}