p:blockUI组件生成两个元素导致CSS样式不生效问题求助
PrimeFaces p:blockUI样式仅作用于遮罩层,内容容器不生效的解决办法
问题还原
我用PrimeFaces的p:blockUI做加载遮罩,代码如下:
<p:blockUI block="basis/mad/manuell-queue-parameter.xhtml" styleClass="testAli" id="idAli" widgetVar="blockUi2" > <img style="height:8em;background-color:transparent !important;" src="#{facesContext.externalContext.requestContextPath}/themes/default/pics/loading.gif"/> </p:blockUI>
想让加载容器透明、去掉边框和阴影,但渲染后发现生成了两个DOM元素:
- 遮罩层(全屏灰色矩形):
<div id="data:idAli_blocker" class="ui-blockui ui-widget-overlay ui-helper-hidden testAli" style="z-index: 1007; display: none;"></div>
- 带GIF的内容容器:
<div id="data:idAli" class="ui-blockui-content ui-widget ui-widget-content ui-corner-all ui-helper-hidden ui-shadow" style="left: 572px; top: 1338px; z-index: 1008; display: none;"> <img style="height:8em;background-color:transparent !important;" src="/acs/themes/default/pics/loading.gif"> </div>
写的CSS只对遮罩层生效,内容容器的边框、阴影都还在,试了内部CSS、cssOverlay和css属性都没用:
.testAli{ border:none !important; background-color: transparent !important; box-shadow:none !important; }
解决办法
PrimeFaces的p:blockUI有两个独立的样式属性:
styleClass:仅作用于遮罩层(ui-blockui元素)contentStyleClass:专门作用于带内容的容器(ui-blockui-content元素)
方法1:用contentStyleClass指定内容容器样式类
修改组件代码,给内容容器单独加样式类:
<p:blockUI block="basis/mad/manuell-queue-parameter.xhtml" styleClass="testAli-overlay" <!-- 遮罩层样式 --> contentStyleClass="testAli-content" <!-- 内容容器样式 --> id="idAli" widgetVar="blockUi2" > <img style="height:8em;background-color:transparent !important;" src="#{facesContext.externalContext.requestContextPath}/themes/default/pics/loading.gif"/> </p:blockUI>
对应的CSS:
/* 处理遮罩层:如果不需要半透明背景,设为透明 */ .testAli-overlay{ background-color: transparent !important; } /* 处理内容容器:去掉边框、背景、阴影 */ .testAli-content{ border: none !important; background-color: transparent !important; box-shadow: none !important; }
方法2:直接用默认类名写选择器
如果不想新增样式类,直接通过PrimeFaces自带的类名组合选择器定位内容容器,提升样式优先级:
/* 遮罩层样式 */ .testAli{ background-color: transparent !important; } /* 定位内容容器,覆盖默认样式 */ .ui-blockui-content.ui-widget-content { border: none !important; background-color: transparent !important; box-shadow: none !important; }
内容的提问来源于stack exchange,提问作者alisummer2000000
相关产品推荐
相关产品推荐

