Как накладывать изображения

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

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

Ваш плагин не отвечает на вопрос, и хотя он несколько связан, это не то, о чем просили.

Bashevis 06.02.2013 03:00
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
129
1
312 559
11
Перейти к ответу Данный вопрос помечен как решенный

Ответы 11

Один из способов, предложенный эта статья, заключается в следующем:

<img style = "background:url(thumbnail1.jpg)" src = "magnifying_glass.png" />

Матье, я очень в этом сомневаюсь.

David Sherret 07.07.2012 05:27
Ответ принят как подходящий

Я только что закончил делать это в проекте. Сторона HTML выглядела примерно так:

<a href = "[fullsize]" class = "gallerypic" title = "">
  <img src = "[thumbnail pic]" height = "90" width = "140" alt = "[Gallery Photo]" class = "pic" />
  <span class = "zoom-icon">
      <img src = "/images/misc/zoom.gif" width = "32" height = "32" alt = "Zoom">
  </span>
</a>

Затем с помощью CSS:

a.gallerypic{
  width:140px;
  text-decoration:none;
  position:relative;
  display:block;
  border:1px solid #666;
  padding:3px;
  margin-right:5px;
  float:left;
}

a.gallerypic span.zoom-icon{
  visibility:hidden;
  position:absolute;
  left:40%;
  top:35%;
  filter:alpha(opacity=50);
  -moz-opacity:0.5;
  -khtml-opacity: 0.5;
  opacity: 0.5;
}

a.gallerypic:hover span.zoom-icon{
  visibility:visible;
}

Я оставил много примеров в CSS, чтобы вы могли видеть, как я решил создать стиль. Обратите внимание, что я уменьшил непрозрачность, чтобы вы могли видеть сквозь лупу.

Надеюсь это поможет.

Обновлено: Чтобы прояснить ваш пример - вы можете игнорировать visibility:hidden; и убить выполнение :hover, если хотите, это было именно так, как я это сделал.

Да, я подумал, что это, вероятно, станет абсолютным решением для позиционирования. Причина, по которой мне это нравится, заключается в том, что основное изображение остается изображением, а не фоновым изображением.

Robin Barnes 31.12.2008 20:35

Тим К .: ваш код выглядит нормально, за исключением CSS. Движок читает CSS справа налево. Когда вы используете «a.gallerypic», он сначала ищет «gallerypic», а затем проверяет, есть ли у «gallerypic» предок «a». Чтобы решить эту проблему, просто оставьте «a» вне поля, чтобы получить «.gallerypic». Нет необходимости в предшествующей «а».

martin villa 27.12.2010 21:39

Я думаю, что есть одна проблема, которая остается нерешенной: вы вынуждены использовать display: block (тогда как изображения по умолчанию встроены).

Peter Tseng 29.06.2012 02:10

Если вы не используете тег <img>, который отображает изображение само по себе, вы не сможете добиться этого только с помощью чистого CSS. Вам также понадобятся ДВА HTML-элемента - по одному на каждое изображение. Это связано с тем, что единственный способ заставить элемент отображать изображение через CSS - это использовать свойство background-image, и каждый элемент может иметь только одно фоновое изображение. Какие два элемента вы выберете и как вы их разместите, зависит от вас. Есть много способов разместить один элемент HTML над другим.

Если вы используете псевдоселекторы: before или: after, вы можете добавить html, используя только javacript. Этот ответ stackoverflow.com/a/3098231/272208 показывает способ без добавления второго элемента html в исходный код.

Jessica Brown 13.04.2014 00:17

Вот как я это сделал недавно. Не идеален семантически, но выполняет свою работу.

<div class = "container" style = "position: relative">
<img style = "z-index: 32; left: 8px; position: relative;" alt = "bottom image" src = "images/bottom-image.jpg">
<div style = "z-index: 100; left: 72px; position: absolute; top: 39px">
<img alt = "top image" src = "images/top-image.jpg"></div></div>

Если вам нужно только увеличительное стекло при наведении, вы можете использовать

a:hover img { cursor: url(glass.cur); }

http://www.javascriptkit.com/dhtmltutors/csscursors.shtml

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

Дайте мне знать, если вам нужна помощь по JavaScript.

Возможно, вы захотите ознакомиться с этим руководством: http://www.webdesignerwall.com/tutorials/css-decorative-gallery/

В нем писатель использует пустой элемент диапазона для добавления наложенного изображения. Вы можете использовать jQuery для вставки указанных элементов диапазона, если хотите, чтобы ваш код был как можно более чистым. Пример также приведен в вышеупомянутой статье.

Надеюсь это поможет!

-Дэйв

A simple way of doing that with CSS only without modifying the content with additional tags is shown here (with code and example): http://soukie.net/2009/08/20/typography-and-css/#example

Это работает, пока родительский элемент не использует статическое позиционирование. Просто установите относительное позиционирование. Кроме того, IE <8 не поддерживает селектор :перед или содержание.

На самом деле это работает очень хорошо, здорово иметь возможность делать это вообще без изменения разметки!

axxxman 06.08.2012 13:26

Пожалуйста, вставьте код с этого URL-адреса, на случай, если он когда-нибудь выйдет из строя. Это должен быть принятый ответ. Код: p {позиция: относительная; дисплей: блок; } p: после {содержимого: url (magnify.png); позиция: абсолютная; вправо: 20 пикселей; верх: 20 пикселей;

Eric Steinborn 03.07.2015 18:37

В CSS3 вы можете делать следующее:

.double-image {
    background-image: url(images/img1.png), url(images/img2.png);
}

Взял от Могу ли я использовать несколько фоновых изображений с помощью CSS?

Все, что нам нужно, это родитель выше ребенка. Вот как вы это делаете.

Вы помещаете img в span, устанавливаете z-index & position для обоих элементов и дополнительный display для диапазона. Добавьте наведение на span, чтобы вы могли протестировать его и у вас все получилось!

HTML:

<span><img src = "/images/"></span>

CSS

span img {
    position:relative;
    z-index:-1;
}
span {
    position:relative;
    z-index:initial;
    display:inline-block;
}
span:hover {
    background-color:#000;
}

Вот хороший способ отображения наложенного изображения с полупрозрачным фоном по центру ссылки на изображение:

HTML

<div class = "image-container">
    <a class = "link" href = "#" >  
        <img class = "image" src = "/img/thumbnail.png"/>
        <span class = "overlay-image"><img src = "/img/overlay.png"></span>
    </a>    
</div>

CSS

div.image-container{
    position: relative;
}
a.link{
    text-decoration: none;  
    position: relative;
    display: block;
}

a.link span.overlay-image{
    visibility: hidden;
    position: absolute;
    left: 0px;
    top: 0px;
    bottom: 0px;
    right: 0px;
    background-color: rgba(0,0,0,0.2); /* black background with 20% alpha */
}

a.link span.overlay-image:before {    /* create a full-height inline block pseudo=element */
    content: ' ';
    display: inline-block;
    vertical-align: middle;  /* vertical alignment of the inline element */
    height: 100%;   
}

a.link:hover span.overlay-image img{
    display: inline-block;  
    vertical-align: middle;     
}

a.link:hover span.overlay-image{
    visibility: visible;
}

Вот техника JQuery с полупрозрачным фоном.

HTML

<html>
<head>
    <link rel = "stylesheet" href = "css/style.css" type = "text/css" media = "screen" title = "no title" charset = "utf-8">
    <title>Image Gallery</title>
</head>
<body>
    <h1>Image Gallery</h1>

    <ul id = "imageGallery">
        <li><a href = "images/refferal_machine.png"><img src = "images/refferal_machine.png" width = "100" alt = "Refferal Machine By Matthew Spiel"></a></li>
        <li><a href = "images/space-juice.png"><img src = "images/space-juice.png" width = "100" alt = "Space Juice by Mat Helme"></a></li>
        <li><a href = "images/education.png"><img src = "images/education.png" width = "100" alt = "Education by Chris Michel"></a></li>
        <li><a href = "images/copy_mcrepeatsalot.png"><img src = "images/copy_mcrepeatsalot.png" width = "100" alt = "Wanted: Copy McRepeatsalot by Chris Michel"></a></li>
        <li><a href = "images/sebastian.png"><img src = "images/sebastian.png" width = "100" alt = "Sebastian by Mat Helme"></a></li>
        <li><a href = "images/skill-polish.png"><img src = "images/skill-polish.png" width = "100" alt = "Skill Polish by Chris Michel"></a></li>
        <li><a href = "images/chuck.png"><img src = "images/chuck.png" width = "100" alt = "Chuck by Mat Helme"></a></li>
        <li><a href = "images/library.png"><img src = "images/library.png" width = "100" alt = "Library by Tyson Rosage"></a></li>
        <li><a href = "images/boat.png"><img src = "images/boat.png" width = "100" alt = "Boat by Griffin Moore"></a></li>
        <li><a href = "images/illustrator_foundations.png"><img src = "images/illustrator_foundations.png" width = "100" alt = "Illustrator Foundations by Matthew Spiel"></a></li>
        <li><a href = "images/treehouse_shop.jpg"><img src = "images/treehouse_shop.jpg" width = "100" alt = "Treehouse Shop by Eric Smith"></a></li>
    </ul>

    <script src = "http://code.jquery.com/jquery-1.11.0.min.js" type = "text/javascript" charset = "utf-8"></script>
    <script src = "js/app.js" type = "text/javascript" charset = "utf-8"></script>
</body>
</html>

CSS

/** Start Coding Here **/
#overlay {
  background:rgba(0,0,0,0.7);
  width:100%;
  height:100%;
  position:absolute;
  top:0;
  left:0;
  display:none;
  text-align:center;
}

#overlay img {
 margin-top: 10%; 
}

#overlay p {
 color:white; 
}

app.js

var $overlay = $('<div id = "overlay"></div>');
var $image = $("<img>");
var $caption = $("<p></p>");

// 1. Capture the click event on a link to an image
$("#imageGallery a").click(function(event){
  event.preventDefault();

  var imageLocation = $(this).attr("href");

  // 1.1 Show the overlay.
  $overlay.show();

  // 1.2 Update overlay with the image linked in the link
  $image.attr("src", imageLocation);

  // 1.3 Get child's alt attribute and set caption
  var captionText = $(this).children("img").attr("alt");
  $caption.text(captionText);


 // 2. Add overlay
 $("body").append($overlay);

    // 2.1 An image to overlay
    $overlay.append($image);

    // 2.2 A caption to overlay
    $overlay.append($caption);

});

//When overlay is clicked
$overlay.click(function(){
  //Hide the overlay
  $overlay.hide();
});

Другие вопросы по теме