在不改变 HTML 的情况下重新排列元素的视觉顺序

Re-arrange the visual order of elements without changing the HTML

我有以下 html 代码:

<p>some text</p>
<img src="#" alt="image" width="200" height="250" />

我想把文字拉到图片的右边。

我在任何地方都找不到如何在不更改 html 代码顺序的情况下使用常规 CSS 执行此操作。

我尝试在图像上使用 float:left,但这只会影响图像后的 html 个元素。

什么是正确的方法?

为了更清楚,现在我得到这个:

some text
_____________
|           |
|   image   |
|           |
|___________|

我要的是这个:

_____________
|           | some text
|   image   |
|           |
|___________|

调高顺序

<img src="#" alt="image" width="200" height="250" />
<p>some text</p>

然后将 img 和 p 都向左浮动

img, p {
    float: left;
}

保持顺序并向右浮动:

img, p {
    float: right;
}

您可能需要调整包含这 2 个元素的元素的宽度,因为它会将其浮动到最右侧。

有一种简单的方法可以使用 CSS Flexbox.

重新排列元素的视觉顺序

HTML没有变化。

flex order 属性 旨在重新排列 flex 容器中的元素。

#container {
  display: flex;
  border: 2px solid black;
  background-color: lightgray;
}
p {
  order: 1;
}
img {
  margin: 10px;
}
<div id="container">
  <p>some text</p>
  <img src="http://i.imgur.com/60PVLis.png" alt="image" width="75" height="75">
</div>

在上面的例子中,flex容器的子元素(#container)排成一行,这是默认设置(flex-direction: row)。

order 属性 的默认值为 0,这意味着元素将按照它们在源中出现的顺序排列。

通过给 p 一个 order: 1,它会跳到带有 order: 0 的元素之前。

或者,我们可以给图像一个 order: -1,将其放在文本之前。

详细了解 order 属性 here