如何删除 jQuery Mobile 样式?

Posted

技术标签:

【中文标题】如何删除 jQuery Mobile 样式?【英文标题】:How to remove jQuery Mobile styling? 【发布时间】:2013-04-05 21:42:59 【问题描述】:

我选择了 jQuery Mobile 而不是其他框架,因为它的动画功能和动态页面支持。

但是,我在样式方面遇到了麻烦。我想保留基本页面样式以执行页面转换。但我还需要完全自定义标题、列表视图、按钮、搜索框的外观......仅处理颜色是不够的。我需要处理尺寸、位置、边距、填充等。

因此,我为 jQuery Mobile 添加的额外 div 和类而苦苦挣扎,以便用 CSS 覆盖它们。但是太费时间了,从头重写css会快得多……

有没有办法加载一个最小的 jQuery Mobile css 文件?

或者我应该寻找其他移动框架?我需要处理页面转换、ajax 调用、Cordova 兼容性,当然还有完全可定制的 html/css...

【问题讨论】:

我遇到了同样的问题,从头开始不是一种有效的方法,但对我来说是最好的。但是,为了按时完成我的项目,我实现了 jquery css mobile 并删除了其中的大部分...如果有人有答案,请为您的问题 +1 理想的方法是从 jquery CSS 文件中删除您不想要的样式。然后创建一个具有相同类名的新文件并根据需要自定义它们。 感谢您的所有回答。事实上,我从“没有主题的结构”css 开始。我将听从您的建议并删除无用的 css。但是,最好防止将额外的(无用的)html 添加到标记中。有没有办法配置 jQuery,使其不添加额外的样式标记? 【参考方案1】:

标记增强预防方法:

这可以通过几种方式完成,有时您需要将它们结合起来才能达到预期的效果。

方法一:

添加这个属性就可以做到:

data-enhance="false"

到页眉、内容、页脚容器。

这也需要在应用加载阶段开启:

$(document).on("mobileinit", function () 
    $.mobile.ignoreContentEnabled=true;
);

在 jquery-mobile.js 初始化之前初始化它(看下面的例子)。

更多信息可以在这里找到:

http://jquerymobile.com/test/docs/pages/page-scripting.html

示例:http://jsfiddle.net/Gajotres/UZwpj/

要重新创建页面,请使用:

$('#index').live('pagebeforeshow', function (event) 
    $.mobile.ignoreContentEnabled = false;
    $(this).attr('data-enhance','true');
    $(this).trigger("pagecreate")
);

方法二:

第二个选项是使用这一行手动完成:

data-role="none"

例如:http://jsfiddle.net/Gajotres/LqDke/

方法三:

可以防止某些 HTML 元素进行标记增强:

 $(document).bind('mobileinit',function()
      $.mobile.keepNative = "select,input"; /* jQuery Mobile 1.4 and higher */
      //$.mobile.page.prototype.options.keepNative = "select, input"; /* jQuery Mobile 1.4 and lower */
 );    

示例:http://jsfiddle.net/Gajotres/gAGtS/

在 jquery-mobile.js 初始化之前再次初始化它(看下面的例子)。

在我的其他教程中了解更多信息:jQuery Mobile: Markup Enhancement of dynamically added content

【讨论】:

非常感谢您的回答。理解每种方法之间的主要区别(优缺点)并不容易。【参考方案2】:

...或者只使用官方的theme-less version of the CSS,专门为允许设计自定义主题而设计,同时保留所有 jQuery Mobile 功能。

您不必一直与 hack 和覆盖作斗争,并且您可以获得更轻量级的 CSS。

双赢。

编辑:也回答了here

【讨论】:

这是迄今为止最简单的,我不明白为什么接受答案的过于复杂的方式获得最高票数! @LaurenceCope 您是否尝试过将 jQuery 移动页面与 jQuery 页面混合并在它们之间导航? jQuery mobile 喜欢感染整个域。 @Yako 这就是答案!【参考方案3】:

说实话,我很失望 jQuery mobile 没有为我们提供一个相对无样式的启动工具包,只能使用您所说的:Ajax、transitions、cordova...

重写生成的 css 类是绝对的疯狂,但我做了一些工作,我设法将未压缩的 css 文件大小从惊人的 233kb 减少到仅 27kb,同时保留 css 的重要方面,例如转换,一个- 页面查看等。这种方式几乎就像从一个空的 css 文件开始一样。

如果有任何需求,也许我会将文件上传到 Github。我希望做更多的测试,看看我没有留下任何重要的东西。

【讨论】:

如果您愿意,我可以通过电子邮件将文件发送给您,您可以 pm 给我,但我必须承认我已经继续使用 Ionic.. 在我的头撞到墙上多久之后jQuery Mobile 几乎可以做任何事情!相反,Ionic 有很棒的现代 css,当你将它与 Crosswalk 结合使用时,它真的感觉就像一个原生应用程序。从长远来看,我建议使用 Ionic。 ;)【参考方案4】:

从 jQuery Mobile 1.4.0 开始,大多数组件都添加了 data-enhanced 数据属性。将此属性设置为 true 将导致 jQuery mobile 忽略组件的样式增强,因此您必须自己设置元素的样式。

这里的 jQuery Mobile 1.4.0 发行说明中有关此的其他信息 http://jquerymobile.com/upgrade-guide/1.4/

【讨论】:

这听起来很有希望,但不幸的是这似乎不适用于 jQuery Mobile 1.4.5 中的选择 @Vincent 这听起来可能很傻,但是您是否尝试过在末尾不加“d”,例如data-enhance="false"?据我所知,它仍然可以在api.jquerymobile.com/data-attribute 的数据参考中找到,但无论出于何种原因,它们似乎都被删除了“d”。您可能还需要在初始化之前配置一些标志,就像链接状态一样。 我没有尝试没有 d.奇怪的是他们会以这种方式重命名它,然后再一次,没有 d 可能更有意义,但前提是 true 是默认值并将其设置为 false 可以防止 jQuery 增强元素。然而,他们似乎以相反的方式做这件事,这对我来说毫无意义。叹。无论如何,我最终只是将 data-role='none' 应用于元素,即使没有设置 init 标志,它也能像魅力一样工作。【参考方案5】:

我不是专家,但我很乐意与您分享一个奇怪的方法。实际上,这是一项非常繁重的任务:您需要通过删除属性值来逐行编辑 jqm css,只需将它们留空即可;您只需要查看 CSS 文件的所需部分即可调整或删除值

不要忘记在 HTML 页面的头部附加你自己的 CSS 的链接 rel

希望对你有用

【讨论】:

以上是关于如何删除 jQuery Mobile 样式?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 jQuery Mobile 中刷新单选按钮的样式和布局?

如何在 Ajax 请求后重新生成 jQuery Mobile 样式?

如何在 div 容器中使用 jquery mobile 并防止此 div 之外的样式效果?

如何删除tag from jQuery mobile loader?

jquermobile如何让文字与文本框并排显示

如何删除 jQuery Mobile 导航图标的圆形容器?