我有一个带有一些按钮的jQuery Mobile网站。我希望在视口为640像素或更宽的情况下在按钮右侧显示一些文本,否则隐藏文本。
我知道用于此目的的iconpos
option/data-attribute,并且可以将其设置为left
以便在我需要时显示文字,notext
当我不需要时。我可能会想出一些Javascript来更改属性并刷新页面加载,方向更改和窗口大小调整事件上的按钮,但这可能会变得很麻烦,我不确定是否忘记了一些可能导致视口的事件宽度要改变。
编辑2:我在多个浏览器和设备上测试了我的网站,似乎更改了方向,调整窗口大小,显示和隐藏屏幕键盘(在这些情况下总是导致在resize
对象上触发window
事件。当然,我不确定这种情况总会在所有浏览器中发生。
我考虑使用某种媒体查询将文本上的display
CSS属性设置为inline
或none
,具体取决于视口宽度,但在我查看代码之后jQuery Mobile,似乎iconpos
选项不仅影响文本的可见性:它影响尺寸,标题属性,图标位置和其他一些东西,因此仅使用CSS可能无法实现。< / p>
编辑:我忘了提到按钮位于标题中,因此它是内联按钮之一。简单地通过CSS隐藏文本会让它看起来很有趣。
有没有人知道基于视口宽度显示或隐藏文本的简单实用方法?或者作为一个更一般的问题,这里的任何人都知道如何根据视口宽度更改数据属性并使jQuery Mobile在视口宽度发生变化时确认更改吗?我找到了{{3}关于更改数据属性,它没有任何合理的答案。
答案 0 :(得分:6)
这是一个纯粹的CSS解决方案,它需要一个HTML5浏览器,但是jQuery Mobile也需要一个:
/* Less then 620 px -------------------*/
@media all and (max-width: 620px){
#custom-button span span { visibility:hidden;}
}
/* More then 640 px -------------------*/
@media only screen and (min-width: 640px) {
#custom-button span span { visibility:visible;}
}
可见性是一个更好的解决方案,然后显示,因为按钮高度将保持不变。
这是一个有效的jsFiddle示例:http://jsfiddle.net/Gajotres/adGTK/,只需拉伸一个Result区域即可看到差异。
编辑:
这应该这样做,例子是相同的:http://jsfiddle.net/Gajotres/adGTK/
/* Less then 639 px -------------------*/
@media all and (max-width: 639px){
#custom-button span span.ui-btn-text
{
left: -9999px !important;
position: absolute !important;
}
#custom-button span span.ui-icon
{
float: left !important;
margin: 2px 1px 2px 3px !important;
display: block !important;
z-index: 0 !important;
position: relative;
left: 0 !important;
}
#custom-button span.ui-btn-inner
{
padding: 0 !important;
}
#custom-button
{
height: 24px !important;
width: 24px !important;
margin-top: 5px;
}
}
此示例仅适用于使用&lt; a&gt;创建的按钮。标签
答案 1 :(得分:3)
这是我迄今为止提出的最好的事情:
$(window).resize(function() {
$(".ui-btn-left, .ui-btn-right, .ui-btn-inline").filter("[data-icon]")
.buttonMarkup({iconpos: window.innerWidth >= 640 ? "left" : "notext"})
.buttonMarkup("refresh");
});
$(document).delegate("[data-role=page]", "pageinit", function() {
$(window).resize();
});
答案 2 :(得分:1)
在转到仅限类的按钮声明之后,这对jQuery Mobile 1.4 beta 1非常有用。
$(window).on("throttledresize", function() {
var smallButtons = $(window).width() <= 480;
$('#article_nav a').toggleClass('ui-btn-icon-notext', smallButtons);
$('#article_nav a').toggleClass('ui-btn-icon-left', !smallButtons);
});
答案 3 :(得分:0)
使用类型为data-icon的按钮标签,默认情况下在html中设置data-iconpos="notext"
,然后绑定pagebeforecreate orientationchange
事件以根据屏幕宽度添加或删除属性:
$(document).on('pagebeforecreate orientationchange', updateIcons);
function updateIcons () {
if ($(window).width() > 480) {
$('a[data-icon], button[data-icon]').removeAttr('data-iconpos');
} else {
$('a[data-icon], button[data-icon]').attr('data-iconpos', 'notext');
}
}
编辑:看起来它只适用于页面创建,而不适用于方向更改。
答案 4 :(得分:0)
这是一个纯css解决方案,适用于IE8 +和所有其他浏览器。请注意,代码来自Twitter-Bootstrap,只是修改了一点。
<button type="submit" class="btn btn-primary" value="Submit">
<i id="versturen" class="fa fa-check"></i>
<span class="sr-only-xs"> Versturen</span>
</button>
@media (max-width: 767px) {
.sr-only-xs {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0,0,0,0);
border: 0;
}
}