【问题标题】:Aligning Image Caption对齐图像标题
【发布时间】:2018-05-18 15:27:03
【问题描述】:

目前,我有一个图像幻灯片标题没有相对于父容器定位自身的问题。这可能是 DIV 浮动的简单修复,但对于我的生活,我无法弄清楚。问题是文本不在包含图像的容器的约束范围内;因此,在调整网页大小时会发生不同的转换(基本上会移出页面的可见区域)。我希望将容纳文本的容器的高度设置为父容器(容纳图像的容器)的高度,然后再将其格式化为位于页面中心图像的顶部 1/3。文本基于 UL,并在列表中的项目之间转换为图像上的叠加层。

This is the code on Codepen.当 CSS 转换时看到的文本(例如使用的白色背景)都在 .container DIV 的边界之外(我希望将文本限制到的带有阴影的 UL。

任何帮助将不胜感激。

这是 HTML

<div class="container" >
<ul class="imageBanner">
<li>
<span>Image 01</span>
<div>
<h2>Ahoy.</h2>
</div>
</li>
<li><span>Image 02</span>
<div>
<h2>Welcome.</h2>
</div></li>
<li><span>Image 03</span>
<div>
<h2>Bonjour.</h2>
</div></li>
</ul>
</div>

这是CSS

    .container {
  /* Full height*/
    height: 100%;
    box-shadow: 0px 8px 5px #888888;
    background:#ccc;
}


/* Image Slideshow Banner */


.imageBanner li span {
   width: 100%;
   height: 100%;
   position: absolute;
   top: 0px;
   color: transparent;
   background-size: cover;
   background-position: 30%;
   background-repeat: none;
   opacity: 0;
   z-index: 0;
   animation: imageAnimation 18s linear infinite 0s;
 }
 .imageBanner li div {
     z-index: 1;
     position: absolute;
     top:0px;
     width: 100%;
     text-align: center;
     opacity: 0;
     animation: titleAnimation 18s linear infinite 0s;
 }
 .imageBanner li div h2 {

     font-family:Calibri, Arial, sans-serif;
     background: #fff;
     font-size: 7em;
     color: rgb(46,105,163);

     line-height: 6em;
 }
.imageBanner li:nth-child(1) span {
 background-image: url('./images/iron_giant.jpg');
}
.imageBanner li:nth-child(2) span {
   background-image: url("./images/lonely_island.jpg");
   animation-delay: 6s;
}
.imageBanner li:nth-child(3) span {
   background-image: url("./images/mountain_range.jpg");
   animation-delay: 12s;
}

.imageBanner li:nth-child(2) div {
   animation-delay: 6s;
}
.imageBanner li:nth-child(3) div {
   animation-delay: 12s;
}
   @keyframes imageAnimation {
     0% { opacity: 0; animation-timing-function: ease-in; }
     8% { opacity: 1; animation-timing-function: ease-out; }
     17% { opacity: 1 }
     35% { opacity: 0 }
     100% { opacity: 0 }
 }
 @keyframes titleAnimation {
     0% { opacity: 0 }
     8% { opacity: 1 }
     17% { opacity: 1 }
     35% { opacity: 0 }
     100% { opacity: 0 }
 }

【问题讨论】:

    标签: html image css text


    【解决方案1】:

    HTML5 标记将帮助您了解中心标题对齐方式。

    这是一个基本示例:

    .container {
      /* Full height*/
      height: 100%;
      box-shadow: 0px 8px 5px #888888;
      background: #ccc;
    }
    
    ul {
      margin: 0;
      padding: 0;
      display: block;
    }
    
    li {
      list-style: none;
      height: 100% display: block;
    }
    
    
    /* Image Slideshow Banner */
    
    .imageBanner li span {
      width: 100%;
      height: 100%;
      position: absolute;
      top: 0px;
      background-size: cover;
      background-repeat: none;
      z-index: 0;
      animation: imageAnimation 18s linear infinite 0s;
    }
    
    .imageBanner li div {
      z-index: 1;
      position: absolute;
      top: 0px;
      width: 100%;
      text-align: center;
      opacity: 0;
      animation: titleAnimation 18s linear infinite 0s;
    }
    
    .imageBanner li div h3 {
      font-family: Calibri, Arial, sans-serif;
      background: #fff;
      font-size: 7em;
      color: #2e69a3;
      line-height: 6em;
    }
    
    .imageBanner li:nth-child(1) span {
      background-image: url("https://unsplash.it/1200/800");
    }
    
    .imageBanner li:nth-child(2) span {
      background-image: url("https://unsplash.it/1200/800");
      animation-delay: 6s;
    }
    
    .imageBanner li:nth-child(3) span {
      background-image: url("https://unsplash.it/1200/800");
      animation-delay: 12s;
    }
    
    .imageBanner li:nth-child(2) div {
      animation-delay: 6s;
    }
    
    .imageBanner li:nth-child(3) div {
      animation-delay: 12s;
    }
    
    @keyframes imageAnimation {
      0% {
        opacity: 0;
        animation-timing-function: ease-in;
      }
      8% {
        opacity: 1;
        animation-timing-function: ease-out;
      }
      17% {
        opacity: 1;
      }
      35% {
        opacity: 0;
      }
      100% {
        opacity: 0;
      }
    }
    
    @keyframes titleAnimation {
      0% {
        opacity: 0;
      }
      8% {
        opacity: 1;
      }
      17% {
        opacity: 1;
      }
      35% {
        opacity: 0;
      }
      100% {
        opacity: 0;
      }
    }
    <div class="container">
      <ul class="imageBanner">
        <li>
          <span></span>
          <div>
            <h3>Ahoy.</h3>
          </div>
        </li>
        <li><span></span>
          <div>
            <h3>Welcome.</h3>
          </div>
        </li>
        <li><span></span>
          <div>
            <h3>Bonjour.</h3>
          </div>
        </li>
      </ul>
    </div>

    【讨论】:

    • 一旦我将图像而不是 SPAN 标签内容放在列表中,我不知道如何让元素的转换工作。我还尝试专门将文本对齐添加到 H2 标记并将容器显示为块,但似乎标题仍在父容器的范围之外。
    • Here's 我目前在 codepen 上的项目;虽然它不像我的 apache 服务器上的图像那样工作;基本上,文本的边界在顶部的表格元素(灰色框)的边界之外,它应该被约束并且文本应该循环。调整窗口大小时,文本会移出屏幕。
    • 那么你想在图片的什么地方添加文字呢?图片底部像标题?
    • 我希望将文本用作标题,是的。我希望将它定位在中心图像的顶部 1/3。问题是文本溢出了我尝试为图像定义的容器,因此不会以与图像相同的方式调整窗口大小。
    【解决方案2】:

    如果没有一个活生生的例子,很难找出你寻求的最终结果,但每次你的子元素放置在一个不受欢迎的位置时,这意味着他们没有跟随他们的父母。在这种情况下,您必须先与父母合作,然后再修改孩子。

    我检查了您的 css 文件,甚至没有一个相对定位的父级。所以我建议你将你的 css 文件编辑到这个版本并阅读我在下面放置的链接。

    P.S 如果你没有得到你想要的东西,请制作屏幕截图/jsfiddle 你的情况。

    <div class="container" >
        <ul class="imageBanner">
          <li>
            <span>Image 01</span>
            <div>
              <h3>Ahoy.</h3>
            </div>
          </li>
          <li><span>Image 02</span>
            <div>
              <h3>Welcome.</h3>
            </div>
          </li>
          <li><span>Image 03</span>
            <div>
              <h3>Bonjour.</h3>
            </div>
          </li>
        </ul>
    </div>
    

    CSS:(这只是更改/修改的 CSS 的一部分)

    .container {height: 100vh;box-shadow: 0px 8px 5px #888888;background:#CCC;display:block;position: relative;width: 100%;}
    .imageBanner {position: relative;display: block;width: 100%;height: 100%;padding: 0 0 0;margin: 0 0 0;}
    .imageBanner li {position: absolute;display: block;width: 100%;height: 100%;top:0;left:0;}
    .imageBanner li span {font-family:Calibri, Arial, sans-serif;text-align: center;width: 100%;height: 100%;position: absolute;top: 15%;color: #000000;background-size: cover;background-repeat: none;opacity: 0;z-index: 50;font-size: 2em;animation: imageAnimation 18s linear infinite 0s;}
    .imageBanner li div {z-index: 1;position: absolute;top:0px;width: 100%;height: 100%;text-align: center;opacity: 0;animation: titleAnimation 18s linear infinite 0s;}
    .imageBanner li div h3 {font-family:Calibri, Arial, sans-serif;background: #fff;font-size: 7em;color: rgb(46,105,163);padding: 0 0 0;margin: 0 0 0;line-height: 6em;}
    

    CSS Pos Tutorials
    CSS Positions

    编辑
    CodePen

    【讨论】:

    • 不幸添加了 position:relative;导致图像无法正常运行(或无法加载,但我假设这只是格式问题)。在寻找托管服务之前,我很抱歉我目前正在使用 Apache 服务器的实时示例;希望将此块作为过渡图像/标题幻灯片放在我主页的前面。
    • @ThomasFiala 如果您能够在 codepen 中进行演示或其他东西会很棒。但似乎还有更多问题,因为当您的子元素中有position: absolute 时,重要的是他们有一个具有相对位置的父母或祖父母。因此,如果图像不可见意味着结构不标准。问候
    • Here's 我目前在 codepen 上的项目;虽然它不像我的 apache 服务器上的图像那样工作;基本上,文本的边界在顶部的表格元素(灰色框)的边界之外,它应该被约束并且文本应该循环。调整窗口大小时,文本会移出屏幕。 (或已经离开屏幕,具体取决于屏幕尺寸)
    • @ThomasFiala 已编辑。检查我的代码笔。如果这是您所要求的,请接受此帖子作为答案。问候
    • 不幸的是,这不是我想要的;文本仍然溢出包含图像列表的 .container DIV(如在文本溢出 .container DIV 的阴影的过渡中所见。我希望将文本容器的空间定义为大小和形状.container DIV 的文本(以及我供参考的白色背景)保持在阴影的范围内。(或 .container DIV 的范围)
    猜你喜欢
    • 2017-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-18
    • 1970-01-01
    • 2015-07-18
    • 2014-02-05
    • 1970-01-01
    相关资源
    最近更新 更多