【问题标题】:CSS to wrap contents in stylized container?CSS将内容包装在风格化的容器中?
【发布时间】:2016-11-03 03:19:15
【问题描述】:

我有一个为<LABEL> 指定样式的样式表。

但有些<LABEL>s 很特别:目前我将它们内联样式如下:

<LABEL style="text-align:right; line-height:15pt">
    <div style="padding-right:20px">My Label Text</div>
</LABEL>

我怀疑有一种方法可以指定一个 CSS 类,可能称为 rightlabel,以使用如下简单的方式呈现前面的内容:

<LABEL class="rightlabel">My Label Text</LABEL>

这样做的正确方法是什么?即,有没有办法在 CSS 中定义 rightlabel 以生成覆盖的 &lt;LABEL&gt; 同时自动将其子项包装在填充的子容器中(因为除非这样做,否则样式无法正常工作,并且依靠编码器实现两个元素来获得正确的样式似乎不合适)?

修正:我可以使用子选择器实现大部分目标——如this fiddle 所示,使用此 CSS:

.rightLabel {text-align: right}
.rightLabel > * {padding-right: 20px}

但是如果不将内容显式包装在某个容器中,我找不到将填充应用于标签内容的方法。即,上面的 CSS 可以正常工作

<LABEL class="rightLabel">
  <div>This is what we wanted!</div>
</LABEL>

但不上

<LABEL class="rightLabel">Why am I not padded?</LABEL>

是否可以将样式应用于&lt;LABEL&gt; 内容而不在另一个 HTML 元素(子元素)中显式编码?

【问题讨论】:

    标签: css css-selectors pseudo-element


    【解决方案1】:

    像这样定义你的样式:

    <style> 
    .rightLabel
    {
        text-align:right;
    }
    
    .rightLabel div 
    {
        padding-right:20px;
    }
    </style>
    

    更新更新的问题:您不能使用 CSS 添加 div,您需要 JavaScript。您可以使用 :before 和 :after 添加伪元素。

    这是一个小提琴https://jsfiddle.net/c3h9a2b9/1/

    .rightLabel:before {
      display:block;
      content:' ';
      width:20px;
      float:right;
    }
    

    这会通过在标签上使用 :before:after 伪元素来伪造填充。它需要显示块(inline-block 也可以)和一些尺寸,这里的宽度为 20px(您需要的“填充”)并在您想要填充的方向上浮动....

    【讨论】:

    • 是否可以自动将 LABEL 内容包装在具有该样式的 DIV 中,这样编码人员就不必记住了?即,如果不记得将孩子包装在 div 中并应用相同的类,则使用此解决方案样式“失败”。
    • 这是如何根据您的问题定义样式的示例。如果您在这个早期阶段不确定,也许您需要重新考虑您的 HTML 构建结构..?
    • 也许吧。我刚刚更新了这个问题,试图弄清楚为什么我认为这是一个问题。如果解决方案是通过各种方式以不同的方式处理 HTML,请解释!
    • 它不一定是 DIV。只是标签内容必须与标签右边缘保持 20px 的距离。它似乎像伪选择器或子选择器或其他东西应该能够做到这一点,不是吗?
    • 我有一个更新的小提琴,jsfiddle.net/c3h9a2b9/1 您可以使用这种技术伪造填充,并且它不涉及标记中的额外 div,根据您的要求。这个想法是给伪元素块显示和一些尺寸,在这种情况下为 20px 宽,并将其浮动到您想要“填充”的方向......
    【解决方案2】:

    如果我理解正确你的问题,答案就是这个 CSS:

    label{
        //Your general label style
    }
    label.rightlabel{
        text-align: right;
        line-height: 15pt;
    }
    label.rightlabel div{
        padding-right: 20px;
    }
    

    有了这个 HTML 就可以如你所愿

    <label>a normal label</label>
    </label class="right label"><div>the special label</div></label>
    

    这是因为默认情况下更具体的 CSS 会覆盖不太具体的 CSS :)

    【讨论】:

    • 这是一半。但是标签文本不会被正确填充,除非它包含在具有指定填充的子元素中。可以通过 CSS 自动应用吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-07
    • 2013-12-26
    • 2015-09-07
    • 2011-11-10
    • 1970-01-01
    • 2012-12-24
    • 1970-01-01
    相关资源
    最近更新 更多