`
cloverprince
  • 浏览: 129825 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

行垂直对齐问题

    博客分类:
  • WWW
阅读更多
这是一个画廊页面,一行一行地显示图片和描述。

HTML如是写:

<!DOCTYPE html>
<html>
    <head>
        <title>Gallery</title>
        <meta charset="UTF-8" />
        <link rel="stylesheet" type="text/css" href="gallery.css" />
    </head>
    <body>
        <h1>Gallery</h1>
        <ul class="gal">
            <li>
            <div class="pic">
                <a href="#a">
                    <img src="test.png" />
                </a>
            </div>
            <div class="label">
                <a href="#a">简单标签</a>
            </div>
            </li>
            <li>
            <div class="pic">
                <a href="#a">
                    <img src="test.png" />
                </a>
            </div>
            <div class="label">
                <a href="#a">复杂标签</a>
                <a href="#a">复杂标签</a>
                <a href="#a">复杂标签</a>
                <a href="#a">复杂标签</a>
                <a href="#a">复杂标签</a>
            </div>
            </li>
            <li>
            <div class="pic">
                <a href="#a">
                    <img src="test.png" />
                </a>
            </div>
            <div class="label">
                <a href="#a">有时候你会遇到很复杂的标签,<br />可能会有很多行,<br />就像这样。</a>
            </div>
            </li>
            <li>
            <div class="pic">
                <a href="#a">
                    <img src="test.png" />
                </a>
            </div>
            <div class="label">
                <a href="#a">简单标签</a>
            </div>
            </li>
            <li>
            <div class="pic">
                <a href="#a">
                    <img src="test.png" />
                </a>
            </div>
            <div class="label">
                <a href="#a">简单标签</a>
            </div>
            </li>
            <li>
            <div class="pic">
                <a href="#a">
                    <img src="test.png" />
                </a>
            </div>
            <div class="label">
                <a href="#a">简单标签</a>
            </div>
            </li>
            <li>
            <div class="pic">
                <a href="#a">
                    <img src="test.png" />
                </a>
            </div>
            <div class="label">
                <a href="#a">简单标签</a>
            </div>
            </li>
            <li>
            <div class="pic">
                <a href="#a">
                    <img src="test.png" />
                </a>
            </div>
            <div class="label">
                <a href="#a">简单标签</a>
            </div>
            </li>
            <li>
            <div class="pic">
                <a href="#a">
                    <img src="test.png" />
                </a>
            </div>
            <div class="label">
                <a href="#a">简单标签</a>
            </div>
            </li>
            <li>
            <div class="pic">
                <a href="#a">
                    <img src="test.png" />
                </a>
            </div>
            <div class="label">
                <a href="#a">简单标签</a>
            </div>
            </li>
        </ul>
    </body>
</html>


CSS如是写:
.gal {
    width: 900px;
    background: #ffccff;
}

.gal li {
    display: inline-block;
    width: 200px;
    border: 1px solid #f00;
    background: #ccffcc;
}


得到如下效果:


配色虽丑陋,但可以看见每个盒子占据的空间。

于是发现问题:理想的结果是,图片按上边沿对齐。

解决的方法自然是使用css的vertical-align属性。但是如何使用呢?

W3C的CSS2.1 Recommendation如是说:
引用

10.8 Line height calculations: the 'line-height' and 'vertical-align' properties

As described in the section on inline formatting contexts, user agents flow inline-level boxes into a vertical stack of line boxes. The height of a line box is determined as follows:

   1. The height of each inline-level box in the line box is calculated. For replaced elements, inline-block elements, and inline-table elements, this is the height of their margin box; for inline boxes, this is their 'line-height'. (See "Calculating heights and margins" and the height of inline boxes in "Leading and half-leading".)
   2. The inline-level boxes are aligned vertically according to their 'vertical-align' property. In case they are aligned 'top' or 'bottom', they must be aligned so as to minimize the line box height. If such boxes are tall enough, there are multiple solutions and CSS 2.1 does not define the position of the line box's baseline (i.e., the position of the strut, see below).
   3. The line box height is the distance between the uppermost box top and the lowermost box bottom. (This includes the strut, as explained under 'line-height' below.)

来自: http://www.w3.org/TR/CSS21/visudet.html#line-height

大意是说,以inline方式处理的一堆元素,包括display:inline或者inline-block或者inline-table的,会被排列成一行一行,每行是line-box,每个line-box以某种方式计算其行高。

注意第2条第一句(斜体),尤其是“their”这个单词(粗体)。line-box中,每个元素的垂直对齐方式,由该元素自己的vertical-align属性决定,而不是容器的。

所以,要让上例中,画廊中每幅画以上端对齐,就要设定每个<li>的vertical-align属性。于是,css要改成这样:

.gal {
    width: 900px;
    background: #ffccff;
}

.gal li {
    vertical-align: top;
    display: inline-block;
    width: 200px;
    border: 1px solid #f00;
    background: #ccffcc;
}


现在的效果是这样:


是我们期待的效果。

总结:

  • li的display属性设定为inline-block,使之如inline元素一样横向排列、自动折行,又如block元素一样,可以包含很多东东。
  • li的vertical-align属性设定为top,顶端对齐。
  • vertical-align属性不应设置在ul元素上。这是通常的错误。

  • 大小: 30.1 KB
  • 大小: 28.6 KB
分享到:
评论

相关推荐

    radio和文字垂直对齐

    radio和文字垂直对齐,单选框和文字垂直对齐,兼容各大主流浏览器,附带样例代码,一看就会,一用网不了!呵呵

    使文本按符号 垂直对齐 的小软件

    1 这个软件可以自动、批量地转换文本文件。 2 使得文件的每一行内容按中间一个字符串(例如 =)垂直对齐。 3 将文件中的\t全部转换为4个空格。

    网站设计Div垂直对齐方法

    Div垂直对齐 CSS+Div 底端对齐 垂直对齐

    drawableleft的图片与第一行文字对齐

    但是,如果文字内容过多,导致`TextView`的高度增加,那么默认情况下,`drawableLeft`的图标会相对文字垂直居中,而不是与第一行文字顶部对齐。 为了解决这个问题,我们可以采用以下几种方法: 1. **设置`android:...

    总结垂直居中对齐的解决方案

    Flexbox(弹性盒布局)是现代浏览器支持的一种强大的布局模式,可以轻松实现元素的水平或垂直对齐。要实现垂直居中,只需设置容器的`display`属性为`flex`,然后添加`align-items: center;`: ```css .container { ...

    DBGERIEH文本垂直中对齐

    通常情况下,文本的垂直对齐在编程中可以通过设置控件的属性来实现。在描述中提到,当行高较大时,文本无法垂直居中,这可能是因为默认的对齐设置只考虑了基本的顶部或底部对齐,而没有适应更高的行间距。为了解决这...

    未知高度的非表格垂直对齐

    标题“未知高度的非表格垂直对齐”涉及的是在编程或网页设计中如何实现元素的垂直居中,尤其是在高度不确定的情况下。这个问题在不使用表格布局时尤为常见,因为表格有内置的对齐机制。以下是对这个主题的详细讨论:...

    HTML表格标记教程(33):单元格的垂直对齐属性VALIGN

    设定单元格的垂直对齐方式。01 &lt;!– —————————— –&gt;02 &lt;!– 文件范例:10-31.htm –&gt;03 &lt;!– 文件说明:设定单元格垂直对齐 –&gt;04 &lt;!– —————————— –&gt;05 &lt;HTML&gt;06 &lt;HEAD&...

    JS实现控制表格行内容垂直对齐的方法

    有时,为了提高数据的可读性和美观性,我们需要对表格中的行内容进行垂直对齐处理。传统上,HTML表格通过使用“vAlign”属性来控制内容的垂直对齐方式,但CSS提供了一种更为现代和灵活的方式。本篇文章将探讨如何...

    懒人原生纯css实现多行文字均保持垂直居中效果

    在实际网页中,如何实现如何实现父容器高度固定,文字可能一行,两行或更多行的垂直居中对齐呢? 实现的关键是把文字当图片处理。 用一个span标签将所有的文字封装起来,设置文字与图片相同的display属性...

    css 垂直对齐 css中vertical-align属性(垂直对齐)的使用说明

    在CSS布局中,垂直对齐是一项重要的任务,用于调整元素在垂直方向上的位置。`vertical-align`属性就是用来实现这一目的的关键。它主要用于控制行内元素(如`&lt;span&gt;`、`&lt;img&gt;`等)和表格单元格(`&lt;td&gt;`)内部内容的...

    CEdit框字体垂直居中

    2. **重写OnPaint()函数**:CEdit控件的绘制工作由系统自动处理,但为了改变文本的垂直对齐方式,我们需要覆盖OnPaint()函数,并在这里进行自定义绘图。 ```cpp void CVerticalAlignEdit::OnPaint() { CPaintDC dc...

    CSS让图片垂直居中和底端对齐的代码

    本CSS教程提供了两种对齐方式即垂直居中对齐和底端对齐!更多内容请参考本站的CSS视频教程。 CSS使图片垂直居中的代码: &lt;!DOCTYPE ...

    表单元素和文字垂直居中对齐问题解决整理

    然而,在IE6和IE7中,可能还需要进行特定的浏览器hack,比如在这里,可能需要将单选框的垂直对齐调整为`*vertical-align: -1px`,复选框调整为`*vertical-align: -2px`,以确保在这些浏览器中的效果与标准浏览器一致...

    jQuery实现上下左右垂直居中.zip

    总的来说,`jQuery.valign` 插件提供了一个简单且灵活的方法来处理元素在div容器内的垂直对齐问题,对于快速开发和调试具有很高的实用价值。结合其他前端技术,我们可以创建出更加美观和响应式的网页。

    设置RichTextBox的文本对齐方式

    在实际应用中,我们经常需要根据设计需求调整文本的对齐方式,使其左对齐、居中、右对齐或者两端对齐。本案例将详细介绍如何在C#中设置`RichTextBox`控件的文本对齐方式。 首先,让我们了解`RichTextBox`控件的基本...

    易语言编辑框对齐

    水平对齐通常包括左对齐、居中对齐和右对齐,垂直对齐则有顶部对齐、中间对齐和底部对齐。在易语言中,可以通过设置编辑框的属性或者编写特定的代码来调整这些对齐方式。 1. **水平对齐**: - 左对齐:默认情况下...

    datagrid 4种解决table对齐

    在`Datagrid`的容器上设置`display: flex`,然后使用`align-items`和`justify-content`属性,可以轻松实现表头和列的水平和垂直对齐。例如,`align-items: center`使内容垂直居中,`justify-content: space-between`...

Global site tag (gtag.js) - Google Analytics