如何根据屏幕大小响应地更改 HTML5 数据属性值
How to change HTML5 data-attribute value responsively based on screen size
我正在使用 an Instagram widget 在网站上显示图片。
它使用 jquery 并且工作正常,但我认为我遇到了限制。
我得到它显示 2 列并总共显示 12 张图像。它通过在 "div" 标签内使用 "data-attributes" 来实现。这是一个例子...
<div class="instawidget" data-amount="12" data-grid="2"></div>
这适用于平板电脑和桌面屏幕,但不适用于移动设备(考虑到我的特定布局)。
因此,对于较小的屏幕,我正在尝试将 "data-amount" 值从 12 更改为 6。
我了解到,不幸的是,CSS 无法改变这种 HTML。所以我想我可以复制 div,一个用于 12,一个用于 6,然后使用 CSS 媒体查询 show/hide 适当的 div 基于 min/max-width,像这样...
CSS...
@media screen and (min-width: 736px) {
div.instawidget[data-amount="12"] {
display: block;
}
div.instawidget[data-amount="6"] {
display: none;
}
}
@media screen and (max-width: 736px) {
div.instawidget[data-amount="6"] {
display: block;
}
div.instawidget[data-amount="12"] {
display: none;
}
}
HTML...
<div class="instawidget" data-amount="12" data-grid="2"></div>
<div class="instawidget" data-amount="6" data-grid="2"></div>
现在,每个 div 的实际显示都有效 - 但没关系,因为不起作用的是,div 的 "data-amount" 值打开top 是粘住的那个。
换句话说,如果像我上面那样,那么大屏幕和小屏幕都会显示12张图片。如果我切换它并颠倒顺序,那么两种屏幕尺寸都会显示 6 张图片。
我已经搜索了很多,但找不到这必然是 html5 数据属性的行为,但我不确定。
如果不是,那我的 css 做错了什么?
如果是,那么有没有合理的跨浏览器解决方案?
我在其他堆栈中找到了一些 Jquery 和 Javascript 产品,但我对如何编程使它们在这种情况下工作还不够了解。我通常可以捏造它足以让他们工作,但所有的例子都太多样化或太笼统,我看不到足够的模式来复制。
注意:无论您能帮我解决什么问题,我都希望页面不必 refresh/reload 当浏览器 window 跨断点调整大小时。理想情况下,数据量会发生变化,页面上的图像数量也会发生变化。
感谢您的帮助。
我不是 100% 确定我理解你的问题,但我相信你只是想在移动设备上只显示 6 张图片而不是 12 张。如果是这种情况,你可以使用 CSS 无需复制小部件:
@media only screen and (max-width: 768px) {
.instawidget li:nth-child(n+7) {
display:none;
}
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="instawidget" data-user-name="kevin" data-amount="12" data-grid="2"></div><script type="text/javascript" src="//www.stadget.com/cdn/widget-init.min.js"></script>
我正在使用 an Instagram widget 在网站上显示图片。
它使用 jquery 并且工作正常,但我认为我遇到了限制。
我得到它显示 2 列并总共显示 12 张图像。它通过在 "div" 标签内使用 "data-attributes" 来实现。这是一个例子...
<div class="instawidget" data-amount="12" data-grid="2"></div>
这适用于平板电脑和桌面屏幕,但不适用于移动设备(考虑到我的特定布局)。
因此,对于较小的屏幕,我正在尝试将 "data-amount" 值从 12 更改为 6。
我了解到,不幸的是,CSS 无法改变这种 HTML。所以我想我可以复制 div,一个用于 12,一个用于 6,然后使用 CSS 媒体查询 show/hide 适当的 div 基于 min/max-width,像这样...
CSS...
@media screen and (min-width: 736px) {
div.instawidget[data-amount="12"] {
display: block;
}
div.instawidget[data-amount="6"] {
display: none;
}
}
@media screen and (max-width: 736px) {
div.instawidget[data-amount="6"] {
display: block;
}
div.instawidget[data-amount="12"] {
display: none;
}
}
HTML...
<div class="instawidget" data-amount="12" data-grid="2"></div>
<div class="instawidget" data-amount="6" data-grid="2"></div>
现在,每个 div 的实际显示都有效 - 但没关系,因为不起作用的是,div 的 "data-amount" 值打开top 是粘住的那个。
换句话说,如果像我上面那样,那么大屏幕和小屏幕都会显示12张图片。如果我切换它并颠倒顺序,那么两种屏幕尺寸都会显示 6 张图片。
我已经搜索了很多,但找不到这必然是 html5 数据属性的行为,但我不确定。
如果不是,那我的 css 做错了什么?
如果是,那么有没有合理的跨浏览器解决方案?
我在其他堆栈中找到了一些 Jquery 和 Javascript 产品,但我对如何编程使它们在这种情况下工作还不够了解。我通常可以捏造它足以让他们工作,但所有的例子都太多样化或太笼统,我看不到足够的模式来复制。
注意:无论您能帮我解决什么问题,我都希望页面不必 refresh/reload 当浏览器 window 跨断点调整大小时。理想情况下,数据量会发生变化,页面上的图像数量也会发生变化。
感谢您的帮助。
我不是 100% 确定我理解你的问题,但我相信你只是想在移动设备上只显示 6 张图片而不是 12 张。如果是这种情况,你可以使用 CSS 无需复制小部件:
@media only screen and (max-width: 768px) {
.instawidget li:nth-child(n+7) {
display:none;
}
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="instawidget" data-user-name="kevin" data-amount="12" data-grid="2"></div><script type="text/javascript" src="//www.stadget.com/cdn/widget-init.min.js"></script>