如何移除jQuery Mobile的样式?

31

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

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

因此,我很难处理由jQuery Mobile添加的额外div和类,以便用CSS覆盖它们。但这太费时间了,从头开始重写CSS会更快...

有没有一种方法可以加载最小的jQuery Mobile CSS文件?

还是我应该寻找其他移动框架?我需要处理页面转换、ajax调用、Cordova兼容性,当然还需要完全可自定义的HTML/CSS...


我曾经遇到过同样的问题,从头开始并不是一种高效的方法,但对我来说是最好的方法。然而,为了按时完成我的项目,我实现了jquerry css移动端,并删除了大部分内容... 如果有人有答案,我会点赞你的问题。 - Romain
最理想的方法是从jQuery CSS文件中删除您不需要的样式。然后创建一个全新的文件,使用相同的类名并根据您的需求进行自定义。 - Kevin Lynch
谢谢你的所有回答。实际上,我是从“没有主题的结构”CSS开始的。我将遵循你的建议并删除无用的CSS。然而,防止额外(无用)的HTML添加到标记中会很好。是否有一种方式可以配置jQuery,使其不添加额外的样式标记? - Yako
5个回答

36

标记增强防止的方法:

可以通过以下几种方式来实现,有时需要结合使用才能达到所需的效果。

  • 方法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:动态添加内容的标记增强


非常感谢您的回答。理解每种方法之间的主要区别(优缺点)并不容易。 - Yako

11

您可以选择使用官方的无主题版本CSS,该版本专门用于设计自定义主题并保持jQuery Mobile所有功能。

您不必一直进行hack和覆盖,并且可以获得更轻量的CSS。

双赢。

编辑:也可以在这里找到答案。


1
这绝对是最简单的,我不明白为什么被接受的答案那么复杂,却得到了最高的赞数! - Laurence Cope
@LaurenceCope 你有没有尝试过混合使用jQuery移动页面和jQuery页面,并在它们之间导航?jQuery移动喜欢感染整个域。 - Abandoned Cart
@Yako 这就是答案! - Ahmad Ameri

1
说实话,我相当失望jQuery Mobile没有提供一个相对样式简单的起始套件,仅仅使用你所说的:Ajax,转换,cordova...。覆盖生成的CSS类是绝对的疯狂,但我已经做了一些工作,并成功将未压缩的CSS文件大小从233kb减少到仅27kb,同时保留CSS的重要方面,如转换,单页查看等。这样,您就可以几乎像使用空CSS文件一样开始。如果有需求的话,也许我会在Github上上传该文件。我希望做更多的测试,以确保我没有漏掉任何重要内容。

如果您愿意,我可以通过电子邮件向您发送文件,您可以将其私信给我,但我必须承认,我已经转向Ionic了。在过去的一段时间里,我一直在为jQuery Mobile所需的时间感到沮丧!相比之下,Ionic具有出色和现代的CSS,当您将其与Crosswalk结合使用时,它真正感觉像本地应用程序。我建议长期使用Ionic。 ;) - Shay

0
自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中似乎无法用于selects。 - Vincent
@Vincent,这可能听起来很傻,但你尝试过不带末尾的'd',例如data-enhance="false"吗?据我所见,在https://api.jquerymobile.com/data-attribute/中仍然可以使用,但他们似乎因为某种原因删除了'd'。在初始化之前,您可能还需要配置一些标志,就像链接中所述。 - Juan Carlos Alpizar Chinchilla
1
我没有尝试过去掉d。奇怪的是他们会这样重命名,但如果true是默认值,并将其设置为false,则只有在不增强元素的情况下才更有意义。然而,他们似乎正在以相反的方式做,这对我来说毫无意义。唉。无论如何,我最终只需将data-role ='none'应用于该元素即可,即使不设置init标志也能完美运行。 - Vincent

-6

我不是专家,但我很愿意与你分享一种奇怪的方法。实际上,这是非常繁琐的任务:你需要逐行编辑jqm css,删除属性值,只留下空白,然后在分号前停止;你只需要查找CSS文件中所需的部分来调整或删除值。

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

希望这对你有用


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接