html - CSS : different placements for img with caption

标签 html css

我有一些文字,我必须能够在其中放置图片。我想为我的照片设置三个不同的位置:居中、左侧和右侧。我的照片有标题。

我使用 float: right;float: left;,但我的问题是将标题保留在图像区域内,而不是在我放置时将其保留在边缘与 margin-right: auto;margin-left: auto;

居中

我必须保留 HTML,我宁愿避免使用 Js。

JSFiddle:https://jsfiddle.net/MarionLeHerisson/zbozmamh/4/

片段:

figure {
  position: relative;
  display: block;
}

.center {
  margin-left: auto;
  margin-right: auto;
  background-color: orange;
}

.left {
  float: left;
  background-color: lightblue;
}

.right {
  float: right;
  background-color: pink;
}

a {
  display: block;
  text-align: center;
}

img {
  width: 300px;
  height: 200px;
}

.caption {
  position: absolute;
  right: 0;
  bottom: 0;
}
<div contenteditable class="container">
  <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis et porta ante, eu posuere elit. Nunc suscipit augue nec dolor sagittis, in ultricies mi semper. Sed et mi eget nibh rutrum tristique at in sapien. Nunc dolor mauris, tempor vel sem ac, imperdiet
    maximus metus. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nullam sit amet elit vehicula, molestie justo id, ornare massa. Vivamus ullamcorper dapibus orci eget auctor. Nunc feugiat leo sed semper placerat.
    Maecenas ut mauris in odio fringilla semper at at dolor. Pellentesque dictum ultricies accumsan.</p>
  <figure class="center">
    <picture>
      <a>
        <img class="img">
      </a>
    </picture>
    <figcaption class="caption">
      <small>
        <em class="legend">FIG 1 - center</em>
      </small>
    </figcaption>
  </figure>
  <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis et porta ante, eu posuere elit. Nunc suscipit augue nec dolor sagittis, in ultricies mi semper. Sed et mi eget nibh rutrum tristique at in sapien. Nunc dolor mauris, tempor vel sem ac, imperdiet
    maximus metus. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nullam sit amet elit vehicula, molestie justo id, ornare massa. Vivamus ullamcorper dapibus orci eget auctor. Nunc feugiat leo sed semper placerat.
    Maecenas ut mauris in odio fringilla semper at at dolor. Pe
    <figure class="left">
      <picture>
        <a>
          <img class="img">
        </a>
      </picture>
      <figcaption class="caption">
        <small>
        <em class="legend">FIG 2 - left</em>
      </small>
      </figcaption>
    </figure>
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis et porta ante, eu posuere elit. Nunc suscipit augue nec dolor sagittis, in ultricies mi semper. Sed et mi eget nibh rutrum tristique at in sapien. Nunc dolor mauris, tempor vel sem ac,
      imperdiet maximus metus. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nullam sit amet elit vehicula, molestie justo id, ornare massa. Vivamus ullamcorper dapibus orci eget auctor. Nunc feugiat leo sed semper
      placerat. Maecenas ut mauris in odio fringilla semper at at dolor. Pellentesque dictum ultricies accumsan.</p>
    <figure class="right">
      <picture>
        <a>
          <img class="img">
        </a>
      </picture>
      <figcaption class="caption">
        <small>
        <em class="legend">FIG 3 - right</em>
      </small>
      </figcaption>
    </figure>
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis et porta ante, eu posuere elit. Nunc suscipit augue nec dolor sagittis, in ultricies mi semper. Sed et mi eget nibh rutrum tristique at in sapien. Nunc dolor mauris, tempor vel sem ac,
      imperdiet maximus metus. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nullam sit amet elit vehicula, molestie justo id, ornare massa. Vivamus ullamcorper dapibus orci eget auctor. Nunc feugiat leo sed semper
      placerat. Maecenas ut mauris in odio fringilla semper at at dolor. Pellentesque dictum ultricies accumsan.</p>
</div>

标题在黄色区域的右边,我想要它在img的右边。

感谢您的宝贵时间:)

最佳答案

有一点重新排序和 flexbox 解决方案。尽管可能值得研究 css grid而不是使用 float

figure {
  display: flex;
  justify-content: center
}

.center {
  margin: 0 auto;
  background-color: tomato
}

.left {
  margin: 0 auto;
  float: left;
  background-color: #add8e6
}

.right {
  margin: 0 auto;
  float: right;
  background-color: pink
}

figure a {
  display: inline-block;
  position: relative
}

img {
  display: block;
  width: 300px;
  height: 200px
}

.caption {
  position: absolute;
  right: 0;
  bottom: 0
}
<div contenteditable class="container">
  <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis et porta ante, eu posuere elit. Nunc suscipit augue nec dolor sagittis, in ultricies mi semper. Sed et mi eget nibh rutrum tristique at in sapien. Nunc dolor mauris, tempor vel sem ac, imperdiet maximus metus. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nullam sit amet elit vehicula, molestie justo id, ornare massa. Vivamus ullamcorper dapibus orci eget auctor. Nunc feugiat leo sed semper placerat. Maecenas ut mauris in odio fringilla semper at at dolor. Pellentesque dictum ultricies accumsan.</p>
  <figure class="center">
    <a>
      <img class="img" />
      <figcaption class="caption">
        <small><em class="legend">FIG 1 - center</em></small>
      </figcaption>
    </a>
  </figure>
  <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis et porta ante, eu posuere elit. Nunc suscipit augue nec dolor sagittis, in ultricies mi semper. Sed et mi eget nibh rutrum tristique at in sapien. Nunc dolor mauris, tempor vel sem ac, imperdiet maximus metus. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nullam sit amet elit vehicula, molestie justo id, ornare massa. Vivamus ullamcorper dapibus orci eget auctor. Nunc feugiat leo sed semper placerat. Maecenas ut mauris in odio fringilla semper at at dolor. Pe
    <figure class="left">
      <picture>
        <a>
          <img class="img">
          <figcaption class="caption">
            <small><em class="legend">FIG 2 - left</em></small>
          </figcaption>
        </a>
      </picture>
    </figure>
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis et porta ante, eu posuere elit. Nunc suscipit augue nec dolor sagittis, in ultricies mi semper. Sed et mi eget nibh rutrum tristique at in sapien. Nunc dolor mauris, tempor vel sem ac, imperdiet maximus metus. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nullam sit amet elit vehicula, molestie justo id, ornare massa. Vivamus ullamcorper dapibus orci eget auctor. Nunc feugiat leo sed semper placerat. Maecenas ut mauris in odio fringilla semper at at dolor. Pellentesque dictum ultricies accumsan.</p>
    <figure class="right">
      <picture>
        <a>
          <img class="img">
          <figcaption class="caption">
            <small><em class="legend">FIG 3 - right</em></small>
          </figcaption>
        </a>
      </picture>
    </figure>
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis et porta ante, eu posuere elit. Nunc suscipit augue nec dolor sagittis, in ultricies mi semper. Sed et mi eget nibh rutrum tristique at in sapien. Nunc dolor mauris, tempor vel sem ac, imperdiet maximus metus. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nullam sit amet elit vehicula, molestie justo id, ornare massa. Vivamus ullamcorper dapibus orci eget auctor. Nunc feugiat leo sed semper placerat. Maecenas ut mauris in odio fringilla semper at at dolor. Pellentesque dictum ultricies accumsan.</p>
</div>

关于html - CSS : different placements for img with caption,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44779684/

相关文章:

html - 如何使边框适合 Canvas 而不适合父 div 的宽度?

javascript - 首先显示选择最多的项目

html - 向 ID 链接添加填充但不显示填充

html - 更改 Bootstrap 导航栏的颜色并降低导航栏的高度

javascript - 为什么我的 <div> 内容 </div> 会闪烁?

javascript - jQuery ui Accordion - 不同的折叠面板?

javascript - 如何实现div block 高度的动态计算?

html - 无法使用 CSS 将文本居中

html - 如何根据窗口大小优雅地缩放 div/背景图像以显示更多内容

jquery - 如何在 slideToggle() 上更改/交替图像的背景位置?