【问题标题】:text on the top of an image图片顶部的文字
【发布时间】:2016-11-22 20:30:08
【问题描述】:

我想在图像的两个角居中放置一些文本,一个在左上角,另一个在右上角。 像这样的东西:

.left,
.right {
  width: 300px;
  height: 200px;
  float: left;
}
.left-div,
.right-div {
  position: relative;
}
.left-text,
.right-text {
  position: absolute;
  top: 0;
  left: 0;
  z-index: 999;
  background-color: black;
  color: white;
  padding: 5px;
}
.left {
  float: left;
}
.right {
  float: right;
}
.rotate-left {
  -moz-transform: translateX(-50%) translateY(-50%) rotate(-90deg);
  -webkit-transform: translateX(-50%) translateY(-50%) rotate(-90deg);
  transform: translateX(-50%) translateY(-50%) rotate(-90deg);
}
.rotate-right {
  -moz-transform: translateX(50%) translateY(50%) rotate(90deg);
  -webkit-transform: translateX(50%) translateY(50%) rotate(90deg);
  transform: translateX(50%) translateY(50%) rotate(90deg);
}
<div id="row">
  <div class="left-div">
    <img class="left" src="http://keenthemes.com/preview/metronic/theme/assets/global/plugins/jcrop/demos/demo_files/image1.jpg" />
    <p class="left-text rotate-left">
      text 1
    </p>
  </div>

  <div class="right-div">
    <img class="right" src="http://www.keenthemes.com/preview/metronic/theme/assets/global/plugins/jcrop/demos/demo_files/image2.jpg" />
  </div>
  <p class="right-text rotate-right">
    text 2
  </p>
</div>

由于某些原因,带有文本的段落没有居中,我不知道为什么?

这里是My JS FIDDLE

【问题讨论】:

  • 您能否让我知道给出的答案有什么问题,这样我就可以调整并且您接受?

标签: html css styles


【解决方案1】:

您可以使用 flex 和 writing-mode

示例:

  #row,
  #row>div {
    display: flex;
  }
  
  .left-div {
    margin: 0 0 0 auto;
  }
  
  .right-div {
    margin: 0 auto 0 0;
  }
  
  .rotate-left,
  .rotate-right {
    order: -1;/* puts element at front in visual flow */
    writing-mode: vertical-lr;/* link for explanation  provided earlier */
    /* makeup*/
    width: 1.2em;
    background: black;
    color: white;
    padding: 0.5em;
    /* puts it a top against sibling tag */
    flex-shrink:0;
    margin: 0;
    align-self:flex-start
  }
  
  .rotate-right {/* reset values */
    writing-mode: vertical-rl;
    order: 1;
  }
  
  img {
    width: calc(100% - 2em);/* whatever is needed , if needed */
    flex: 1 0 auto;/* preserve ratio */
  }
<div id="row">
  <div class="left-div">
    <img class="left" src="http://keenthemes.com/preview/metronic/theme/assets/global/plugins/jcrop/demos/demo_files/image1.jpg" />
    <p class="left-text rotate-left">
      text 1
    </p>
  </div>

  <div class="right-div">
    <img class="right" src="http://www.keenthemes.com/preview/metronic/theme/assets/global/plugins/jcrop/demos/demo_files/image2.jpg" />
  <p class="right-text rotate-right">
    text 2
  </p>
</div>

Pen to fork and play with

还是我误解了你想要这些 to stand 的位置?

【讨论】:

    【解决方案2】:

    当使用rotate 时,您需要从使用transform-origin 的位置进行调整,以控制其旋转后的位置。

    .left,
    .right {
      width: 300px;
      height: 200px;
      float: left;
    }
    .left-div,
    .right-div {
      position: relative;
    }
    .left-text,
    .right-text {
      position: absolute;
      top: 0;
      background-color: gray;
      color: white;
      padding: 5px;
    }
    .right {
      float: right;
    }
    .rotate-left {
      left: 0;
      transform-origin: bottom left;
      transform: translateY(-100%) rotate(90deg);
    }
    .rotate-right {
      right: 0;
      transform-origin: bottom right;
      transform: translateY(-100%) rotate(-90deg);
    }
    <div id="row">
      <div class="left-div">
        <img class="left" src="http://keenthemes.com/preview/metronic/theme/assets/global/plugins/jcrop/demos/demo_files/image1.jpg" />
        <div class="left-text rotate-left">
          text 1
        </div>
      </div>
    
      <div class="right-div">
        <img class="right" src="http://www.keenthemes.com/preview/metronic/theme/assets/global/plugins/jcrop/demos/demo_files/image2.jpg" />
        <div class="right-text rotate-right">
          text 2
        </div>
      </div>
    </div>

    示例 2,位于图像外部

    .left,
    .right {
      width: 270px;
      height: 200px;
      float: left;
    }
    .left-div,
    .right-div {
      position: relative;
      margin: 0 30px;
    }
    .left-text,
    .right-text {
      position: absolute;
      top: 0;
      background-color: gray;
      color: white;
      padding: 5px;
    }
    .right {
      float: right;
    }
    .rotate-left {
      left: 0;
      transform-origin: top left;
      transform: rotate(90deg);
    }
    .rotate-right {
      right: 0;
      transform-origin: top right;
      transform: rotate(-90deg);
    }
    <div id="row">
      <div class="left-div">
        <img class="left" src="http://keenthemes.com/preview/metronic/theme/assets/global/plugins/jcrop/demos/demo_files/image1.jpg" />
        <div class="left-text rotate-left">
          text 1
        </div>
      </div>
    
      <div class="right-div">
        <img class="right" src="http://www.keenthemes.com/preview/metronic/theme/assets/global/plugins/jcrop/demos/demo_files/image2.jpg" />
        <div class="right-text rotate-right">
          text 2
        </div>
      </div>
    </div>

    【讨论】:

    • 看起来我可能误解了文本应该站在哪里:)
    • @GCyrillus 或者我做了 :) ... 仍然可以调整以使用 writing-moderotate
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-27
    相关资源
    最近更新 更多