【问题标题】:Vertically align content & 2 lines of text垂直对齐内容和 2 行文本
【发布时间】:2016-11-16 23:23:54
【问题描述】:

我有 5 个框,其中包含在悬停时会发生变化的文本。

但是,如果一个框的“内容”不止一行,它会将其他框略微向下推。

另外,如何使内容垂直居中? Line-height 可以胜任,但有些文本不止一行。垂直对齐似乎也适用于整个 div 而不仅仅是内容中的文本

 .image { 
    width: 204px; 
    height: 204px;
    background-image: url('imglink');
    display: inline-block;
    background-repeat: no-repeat;
    margin-left: 22px;
    margin-right: 22px;
    font-family: "Verdana", Geneva, sans-serif;
    color: white;
    font-size: 11pt;
    }

    .image:hover{
    cursor: pointer;
    
    }

    .image:after { 
    width: 204px; 
    height: 204px;
    display: inline-block;
    background-repeat: no-repeat;
    /* Content is inserted */
    content: 'This text is already there';

    }

    .image:hover:after{
    background-image: url('/imglink');
    cursor: pointer;
    content: 'This text will appear on hover';

    }
 <div class="image">
     </div>

这是 CSS,除了内容不同之外,所有 5 个框都相同。 将其排序为在 Google 上搜索“内容”时遇到巨大困难并没有真正想出 CSS“内容”

这是一个小提琴:https://jsfiddle.net/su8bytdc/7/

【问题讨论】:

  • 除了垂直对齐之外,我不完全确定您要完成什么。你能摆弄它吗? jsfiddle.net
  • @Gacci 是的,这是小提琴:jsfiddle.net/su8bytdc/7。如您所见,如果将鼠标悬停在其中一个上,其他的就会下降
  • 尝试为.image定义line-height: 204px;
  • 最大高度:204px;溢出:隐藏; for .image 也可以提供帮助。
  • @Banzay Line-height 确实很好地居中对齐,但是我有一些 2 行长的文本:/ 所以我必须找到不同的方式

标签: html css


【解决方案1】:

只需将 display: flexalign-items: center 添加到您的 :after 选择器,并将 position: relative 添加到您的 div .image

要水平对齐内容,只需将 text-align: center 添加到 .imagejustify-content: center 到 :after 元素

所以你更新的代码看起来像这样

.image {
  position: relative;
  width: 204px;
  height: 204px;
  display: inline-block;
  background-color: red;
  margin-left: 22px;
  display: inline-block;
  margin-right: 22px;
  font-size: 11pt;
  cursor: pointer;
  text-align: center;
}
.image:after {
  position: absolute;
  width: 100%;
  height: 100%;
  display: flex;
  align-items: center;
  justify-content: center;
  /* Content is inserted */
  content: 'This text is already there Even multiple lines';
}
.image:hover:after {
  text-align: center;
  content: 'This text will appear on hover';
}
<div class="image">
</div>
<div class="image">
</div>
<div class="image">
</div>
<div class="image">
</div>
<div class="image">
</div>

【讨论】:

  • 行得通!有点..第一个文本(悬停之前)没有水平对齐,也只有 3 个框,悬停文本没有水平对齐:p 但它是其他两个的
  • 抱歉,我认为您希望内容垂直对齐。更新了 sn-p。
  • 是的,这行得通,我从未听说过 display: flex;之前所以我得调查一下
  • 一定要这样做。它被称为 Flexbox,它是 CSS 中一个非常棒的新布局模块。
【解决方案2】:

好的,所以尝试将vertical-align: top 添加到您的图像类

.image{
    vertical-align: top;
}

【讨论】:

  • 不幸的是不起作用,我一直在尝试垂直对齐,因为这就是以前的 SO 问题所说的
  • @hulkinBrain 不适用于所有浏览器? :S 也不在小提琴中,除非我把它卡在错误的地方?我把它放在 .image 类的底部
【解决方案3】:

要解决换行问题,只需将overflow: hidden 放在容器元素上即可。但是请注意,如果您以后想要在一个框内有很多文本,它将被隐藏,这将防止所有文本溢出含义。

要使框内的文本居中,请从伪元素中移除宽度和高度,并使用变换技巧。在要居中的元素上使用它(记住使其容器相对):

position: absolute; (relative could also work here)
top: 50%;
left: 50%;
transform: translate(-50%, -50%);

最后,所有这些问题在使用 flexbox 时都不再是问题,所以我建议学习一下,因为它很棒。

【讨论】:

    【解决方案4】:

    试试这个:-

    .image img {
      position: relative;
      top: 50%;
      -webkit-transform: translateY(-50%);
      -ms-transform: translateY(-50%);
      transform: translateY(-50%);
    }
     ====================================
       Base styling, to make the demo more fancy
       ==================================== */
    body {
      font-family: Roboto, sans-serif;
      background: #2C3D51;
      padding: 1em;
      -webkit-font-smoothing: antialiased;
     
    }
    
    
    
    h2 p {
     text-align:center;
      margin: 0;
      font-size: 16px;
      position: absolute;
      top: 5px;
      right: 5px;
      font-weight: bold;
      color: #ECF0F1;
    }
    
    section {
      display: block;
      max-width: 500px;
      background: #E74C3C;
      margin: 0 auto 15px;
      height: 150px;
      border-radius: .2em;
      position: relative;
      color: white;
      text-align:center;
      -webkit-transform-style: preserve-3d;
      -moz-transform-style: preserve-3d;
      transform-style: preserve-3d;
    }
    &lt;section class="text"&gt; &lt;h2&gt;Text&lt;/h2&gt;  &lt;p&gt;I'm vertically aligned! Hi ho Silver, away!&lt;/p&gt;&lt;/section&gt;&lt;section class="image"&gt;  &lt;h2&gt;Images&lt;/h2&gt;  &lt;img src="https://placeholdit.imgix.net/~text?txtsize=33&amp;txt=120%C3%9770&amp;w=120&amp;h=70"&gt;

    【讨论】:

      【解决方案5】:

      https://jsfiddle.net/4tmx5f46/

        font-family: "Verdana", Geneva, sans-serif;
        vertical-align:middle;
      

      字体声明导致框的下拉。你需要'vertical-align:middle;'在盒子本身上以防止这种情况发生。

      使用vertical-align 对齐中间的内容在这里可能是个坏主意。 Vertical Align可以是一个真正的渣男。

      来源: http://christopheraue.net/2014/03/05/vertical-align/

      也就是说,您应该查看本指南。 https://css-tricks.com/centering-css-complete-guide/


      如果您坚持以这种方式居中,那么我建议您使用 ::before 和 ::after 的连词来修改放置的内容 -> 使用 ::before 将所有内容降低 50%,然后以真实内容开始 ::after。

      (或只是绝对定位、转换并完成)

      如果您想要我所描述的示例,请发表评论,我会为您制作一些东西。


      为之前的混淆道歉。抓取了错误的标签页网址

      【讨论】:

      • 是的,对不起,这不是我的代码,我在 JSFiddle 上尝试了“清理”的东西(第一次使用它),它改变了这一点,让我感到困惑,哈哈你链接我的小提琴有这条线-高度问题,请注意“悬停”在框下方:L
      • 2 秒。我想我链接了别人的小提琴。
      • 出于某种原因,它是您的小提琴 + SvenL 的解决方案的组合,使其工作。这个真的很奇怪
      猜你喜欢
      • 2011-04-28
      • 1970-01-01
      • 2016-10-19
      • 2011-07-10
      • 1970-01-01
      • 2015-03-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多