使小工具的样式覆盖主题样式样式

时间:2014-04-03 作者:Hommer Smith

我创建了一个创建表单的小部件。我正在使用Twitter引导框架来设计这些表单。我有两个WP实例:

一个是使用Alterna主题,它也使用引导。表单在这个主题上看起来很棒。

另一个使用OptimizerPress,它不使用引导。问题来了。该主题不使用Bootstrap,它们的CSS覆盖了Bootstrap中的定义。

所以我的问题是:

如何使我的小部件CSS比主题CSS具有更高的优先级以下是我如何将CSS添加到我的小部件中:

class LeadCapture_Form_Widget extends WP_Widget {
    /**
     * Register widget with WordPress.
     */
    function __construct() {
        parent::__construct(
            \'lc-form-widget\', // Base ID
            \'LeadCapture_Form_Widget\', // Name
            array( \'description\' => __( \'Widget that outputs a basic form with that will capture the user\\\'s information and submits it to the CRM.\', \'text_domain\' ), ) // Args
        );
        add_action( \'wp_enqueue_scripts\', array( $this, \'register_plugin_styles\' ) );
    }

    /**
     * Register and enqueue style sheet.
     */
    public function register_plugin_styles() {
        wp_register_style( \'lc-form-widget\', plugins_url( \'LeadCapture_Form_Widget/css/form.css\' ) );
        wp_enqueue_style( \'lc-form-widget\' );
    }

2 个回复
最合适的回答,由SO网友:gmazzap 整理而成

可以在选择器内使引导css“上下文化”,即引导样式在该选择器内工作,这要归功于css specificity rules, 在那里,他们凌驾于其他规则之上。

如何操作:

首先,无需下载引导程序。假设这些文件位于\'bootstrap/less\' 文件夹

现在创建一个新的less文件,假设my-bootstrap.less.

在此文件中放置

#my-widget-container .my-widget {
    @import \'bootstrap/less/bootstrap.less\';
}
编译这个较少的文件,假设您获得了一个文件my-bootstrap.css. 如果打开此文件,您将看到它是完整的引导环境,但每个规则的前缀都是\'#my-widget-container .my-widget\'.

此时,您可以完全删除引导较少的文件,也可以删除较少的文件,并且只保留此文件my_bootstrap.css 文件(如果最小化,效果更好),然后您可以将该文件排队,而不是将原始引导程序排队,这样您就不会遇到不使用引导程序的主题的问题。

但是,如果主题是基于引导的,则css文件是多余的,因此只有在不存在引导的情况下,才应将其排队:

function __construct() {
    // your stuff here
    add_action(
      \'wp_enqueue_scripts\',
      array( $this, \'register_plugin_styles\' ),
      PHP_INT_MAX // highest priority
    );
}

public function register_plugin_styles() {

  global $wp_styles;

  $s = array_map( \'basename\', wp_list_pluck($wp_styles->registered, \'src\') );

  if ( ! in_array(\'bootstrap.css\', $s ) && ! in_array( \'bootstrap.min.css\', $s )  ) {
    // no one has registered bootstrap, let\'s register your \'my-bootstrap\'
    wp_enqueue_style(
      \'my-bootstrap\', get_template_directory_uri() . \'/my-bootstrap.css\'
    );
  }  

}
现在你要做的就是用

<div id="my-widget-container">
  <div class="my-widget">

   YOUR WIDGET CONTENT GOES HERE

  </div>
</div>
如何将较少的文件编译成css文件超出了本回答和本网站的范围,如果您需要,简单的谷歌搜索将为您提供任何指导

SO网友:Howdy_McGee

可能有几种方法可以做到这一点:

Method 1) 将样式排在主题样式之后-View Codex

Method 2) 使用!important 这将具有100%的优先权-View Stack Overflow

Method 3) 如果要创建自己的小部件,可以插入自己的小部件<style> 优先于任何外部文件的标记-View Stack Overflow

我会按顺序尝试上述方法,如果可能的话,尽量避免使用方法3,尽管它确实存在。

结束

相关推荐

无法将自定义CSS应用于主题中的IE

对于2013年、2014年或Wordpress制作的任何主题,编辑ie.css 哪个在themefolder\\css\\ie.css 不会导致Internet Explorer中的任何更改。我实际上使用的是IE11,但无论我将文档模式或用户代理更改为什么,都不会导致任何更改。我还注意到Wordpress注入ie 类到<html> 从IE浏览时使用标签。因此,我应用了以下CSS代码:.ie body { display: none !important; padding: 100px; },