2016-11-16 3 views
0

У меня есть 5 ящиков, содержащих текст, который изменяется при наведении.Вертикально выровнять содержимое и 2 строки текста

Однако, если «содержимое» коробки имеет более одной строки, оно слегка сдвигает другие блоки.

Также, как я могу сосредоточить содержимое по вертикали? Строка-высота выполняет задание, но часть текста содержит более одной строки. Кроме вертикальное выравнивание, кажется, относится ко всему 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/

+0

Я не полностью убедитесь, что вы пытаетесь выполнить, кроме выравнивания по вертикали. Вы можете это поиграть? jsfiddle.net – Gacci

+0

@ Gacci Да, вот скрипка: https://jsfiddle.net/su8bytdc/7/. Как вы можете видеть, если вы наведите указатель мыши на один, остальные идут вниз –

+0

попытайтесь определить 'line-height: 204px;' для '.image' – Banzay

ответ

0

Просто добавьте display: flex и align-items: center к вашему: после выбора и position: relative вашего DIV .image.

Для выравнивания содержимого по горизонтали просто добавить text-align: center к .image и justify-content: center к: после элемента

Таким образом, ваш обновленный код будет выглядеть примерно как этот

.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>

+0

Это работает! Kinda..Первый текст (до наведения) не выравнивается по горизонтали, также только для трех ящиков, текст наведения не выравнивается по горизонтали: p, но для других двух –

+0

Sry, моя плохая мысль, что вы хотите, чтобы содержимое выравниваться по вертикали. Обновлен фрагмент. – SvenL

+0

Да, это работает, я никогда не слышал о дисплее: flex; прежде чем я должен буду изучить это –

0

Итак, попробуйте добавить vertical-align: top к классу изображений

.image{ 
    vertical-align: top; 
} 
+0

Не работает, к сожалению, выравнивание по вертикали - это то, что я пытался, так как предыдущие SO-вопросы говорили –

+0

Я пробовал, он работает! – hulkinBrain

+0

@hulkinBrain Не работает для меня во всех браузерах? : S Nor в скрипке, если я не застрял в неправильном месте? Я положил его в нижнюю часть .image класса –

0

Попробуйте это: -

.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; 
 
}
<section class="text"> <h2>Text</h2> <p>I'm vertically aligned! Hi ho Silver, away!</p></section><section class="image"> <h2>Images</h2> <img src="https://placeholdit.imgix.net/~text?txtsize=33&txt=120%C3%9770&w=120&h=70">

0

Чтобы исправить проблему переноса строки, просто поместите overflow: hidden на элемент контейнера. Остерегайтесь, однако, что это предотвратит переполнение текста из текста, если позже вы захотите иметь много текста внутри коробки, он будет скрыт.

Чтобы центрировать текст внутри поля, удалите ширину и высоту из псевдоэлементов и используйте взлом для преобразования. Используйте это на элементы, которые вы хотите, чтобы центр (не забудьте сделать его контейнера относительно):

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

Наконец, все эти вопросы больше не проблем при использовании Flexbox, поэтому я хотел бы предложить, узнав, что, так как это является удивительным.

0

https://jsfiddle.net/4tmx5f46/

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

Декларация шрифта причинял выпадающий список из коробки. Вам понадобится «vertical-align: middle;» на самих коробках, чтобы предотвратить это.

Выравнивание содержимого в середине с выравниванием по вертикали, вероятно, является плохими. Вертикальное выравнивание может быть настоящим отморозком.

Источник:http://christopheraue.net/2014/03/05/vertical-align/

Тем не менее, Вы должны проверить это руководство. https://css-tricks.com/centering-css-complete-guide/


, если вы настаиваете на центрирование это так, то я хотел бы предложить вам изменить содержание размещаемых с помощью конъюнкции :: до и после :: -> Использование :: до того, чтобы сбить все вниз на 50%, а затем начиная с :: после с реальным содержанием.

(или просто абсолютно позиции, преобразования и сделать с ней)

Если вы хотите пример того, что я описываю, комментарий, и я провернуть кое-что для вас.


Извинения за перепутывание ранее. Захваченный URL вкладки неверном в

+0

Да, извините, что это не мой код, я попробовал «очистить» вещь на JSFiddle (впервые использовал его), и это изменило это, смутило меня lol. Сценарий, с которым вы меня связали, имеет проблему с линейной высотой, находится под коробками: L –

+0

2 secs. Кажется, я связал чужой скрип. – MassDebates

+0

По какой-то причине это была комбинация вашей скрипки + решение SvenL, которое заработало. Действительно действительно странно это –

Смежные вопросы