【问题标题】:CSS layout for box with two text labels?带有两个文本标签的框的CSS布局?
【发布时间】:2011-03-03 11:05:47
【问题描述】:

我有一个无序列表的项目,我想将每个项目显示为一个带有两行文本的框,每行具有不同的属性(字体、大小、文本对齐...)。我为每个项目使用的标记如下所示:

<li id="1">
    <p class="first"><!-- First line of text --></p>
    <p class="last"><!-- Second line of text --></p>
</li>

使用 CSS 我希望它显示如下:

我的问题是:

  1. 我知道这可以通过 CSS 以多种方式实现,但是 什么是正确的方法或最佳实践来实现最佳跨浏览器支持?你能指点我一个类似的 CSS 例子吗?第一个文本标签应距顶部边框 2 px,第二个文本标签距底部边框 2 px。
  2. 这是文本标签的正确标记吗?或者我应该使用其他标签而不是&lt;p&gt;?也许&lt;div&gt;

我使用display: block 作为&lt;li&gt; 标签,固定widthheight

提前致谢。

【问题讨论】:

  • 你关心哪些浏览器? IE6(请不要)? IE7?
  • 可惜我也要支持IE6
  • 幸运的是,我的解决方案适用于 IE6。

标签: html css layout


【解决方案1】:

如果我理解正确,这应该很好:

Live Demo

在 IE7/IE8 和最新版本中测试:Firefox、Chrome、Safari、Opera。
我也在 IE6 中测试过,在那里工作。

我只是在做所有这些测试,因为你特别要求“最好的跨浏览器支持”:)

我可能很想将&lt;p&gt; 标记更改为&lt;span&gt; 标记,因为这些似乎并不是文本段落。

CSS:

ul {
    list-style: none;
    font-size: 200%;
    line-height: 0.8
}
li {
    display: block;
    width: 140px;
    height: 100px;

    background: #ccc;
    padding: 2px;
    border: 1px solid #000;
    position: relative;
    margin: 8px 0
}
li .last {
    position: absolute;
    bottom: 2px;
    right: 2px
}

HTML:

<ul>
    <li id="l1">
        <p class="first">Text 1</p>
        <p class="last">Text 2</p>
    </li>
    <li id="l2">
        <p class="first">Text 1</p>
        <p class="last">Text 2</p>
    </li> 
</ul>

【讨论】:

  • 这几乎可以工作,但是我需要文本内容区域距离边框正好 2 px,我想也许这可以用 line-height 处理,但我最终给它任意值,直到我得到2 px的空间,但我不是很明白,希望有更直接的方法来实现它。
  • 另外因为 是内联显示的,我认为

    更好,但也许我可以修改 以显示为块,或者只使用

  • 这是我将p 更改为span 的版本。它的工作原理是一样的:jsfiddle.net/thirtydot/KbhHS/22 - 关于 line-height 的事情 - 我不知道你怎么能更优雅地处理它。
  • 如果用户调整文本大小,此解决方案可能会出现问题。
  • @Bryan Downing:大多数浏览器缩放是(或默认)放大所有内容,而不仅仅是文本。另外,我不确定我可以用固定宽度和高度&lt;li&gt; 的 OP 限制来解决这个问题。有任何想法吗? :D
【解决方案2】:

您也许可以使用这样的选择器:

#1 p + p { padding-right: ..px }

如果我对 CSS 有任何了解,应该得到 #1 中 p 元素的相邻兄弟

【讨论】:

    【解决方案3】:

    我会这样做:

    li
    {
      display: block;
      padding: 2px;
      height: xxpx; /* The height that you gave the li */
      width: xxpx; /* The width that you gave the li */
    }
    
    li p
    {
      height: xxpx;
    }
    
    li p.first
    {
      float: left;
    }
    
    li p.second
    { 
      float: right;
      /*
      To place the 2nd text at the bottom right corner you need to give it a 
      margin top
      The value of this margin should be the total height of the li tag minus the 
      height of text (p tag) and minus the total vertical padding that is 4px.
      */
      margin-top: xxpx;
    }
    

    我想这样就可以了。希望对您有所帮助。

    【讨论】:

    猜你喜欢
    相关资源
    最近更新 更多
    热门标签