Как я могу динамически добавлять текст на изображение с помощью HTML / Javascript / CSS?

#javascript #jquery #html #css

#javascript #jquery #HTML #css

Вопрос:

Я хочу добавить текст на изображение, придав тексту прозрачный черный фон. По сути, я хочу добиться эффекта, описанного в следующей ссылке:

http://www.google.com/url?sa=tamp;source=webamp;cd=4amp;ved=0CD8QFjADamp;url=http://css-tricks.com/3118-text-blocks-over-image/amp;rct=jamp;q=text on imageamp;ei=IsmITsK4DYWc0AWj-4H9Dwamp;usg=AFQjCNHD2pL0MiEQObwT53pWzFq2gJoH6gamp;cad=rja

Проблема в том, что я динамически генерирую эти изображения и случайным образом размещаю их на экране. Поэтому я не могу полностью расположить текст (по крайней мере, не зная общей высоты текста). Есть ли другой способ сделать это?

Спасибо!

Комментарии:

1. Конечно, вы можете расположить текст, видя, что он находится внутри того же контейнера, что и изображение, если вы используете код из этого руководства. Я не вижу, в чем проблема, но ваш вопрос довольно расплывчатый. Нам нужно увидеть разметку, демонстрацию или какие-то скриншоты.

Ответ №1:

вы можете позиционировать текст абсолютно. как только изображения будут загружены, даже если случайным образом, метод position() jQuery предоставит вам всю необходимую информацию.

очевидно, вы хотели бы инкапсулировать изображения в контейнеры, например, или использовать и устанавливать изображение, используя фоновое изображение div. тогда у вас есть полная свобода помещать в контейнер любой текст / эффекты, которые вы хотите.

Комментарии:

1. я пытаюсь избежать использования img в качестве фона, т.Е. по соображениям совместимости.

2. итак, тогда просто используйте <div><img></div> и используйте append() и z-index jQuery для размещения текста / других виджетов над изображением. помните, что эффекты должны располагаться только относительно div контейнера.

3. Я хочу расположить текст вдоль нижней части фотографии, откуда мне знать, как далеко идти?

4. Создайте класс для текста и установите фиксированную высоту, независимо от длины по ширине, высота будет одинаковой, и вы можете производить вычисления таким образом.

5. если вы хотите добавить текст вдоль нижней части фотографии, используйте относительное позиционирование И используйте right: 0px; bottom: 0px; это поможет.

Ответ №2:

Я динамически генерирую эти изображения и случайным образом размещаю их на экране.

Не видя часть кода, который у вас есть до сих пор, немного сложно помочь. Если вы динамически генерируете изображения, не могли бы вы также динамически генерировать текст вместе с ним?

Т.е. вместо генерации:

 <img style="position: absolute; top: RANDOMVALUE; left: RANDOMVALUE;">
  

Не могли бы вы создать:

 <div class="image-with-text-over-it" style="position: absolute; top: RANDOMVALUE; left: RANDOMVALUE;">
    <img>
    <p>Text to be overlaid on image</p>
</div>
  

А затем в вашей таблице стилей напишите некоторый CSS, который позиционирует текст в каждом экземпляре этого поверх изображения в этом экземпляре:

 .image-with-text-over-it p {
    position: absolute;
    bottom: 2em;
    left: 0;
    color: #fff;
    background: rba(0, 0, 0, 0.8);
}
  

Комментарии:

1. да, но это поместило бы текст под изображением, а не сверху

2. и под этим я подразумеваю вниз, а не снизу

3. @chacham15: ну да, но тогда вы могли бы использовать CSS для позиционирования текста относительно окружающего <div> , чтобы он был поверх изображения.

4. если по какой-либо причине вам не нравится описанный выше подход, альтернативой может быть установка изображения в качестве фона элемента, содержащего текст, например <p style="background: url(dyanmicImage.png); height: height-of-image; width: width-of-image">some text</p> , и использование отступов для размещения текста. требуется меньше элементов, но я думаю, что приведенный выше подход в целом проще!