วิธีการซ้อนภาพ


127

ฉันต้องการวางซ้อนภาพหนึ่งกับอีกภาพโดยใช้ CSS ตัวอย่างนี้คือภาพแรก (พื้นหลังหากคุณต้องการ) จะเป็นลิงก์ภาพขนาดย่อของผลิตภัณฑ์โดยลิงก์จะเปิดไลท์บ็อกซ์ / ป๊อปอัพซึ่งแสดงภาพขนาดใหญ่ขึ้น

ด้านบนของภาพที่เชื่อมโยงนี้ฉันต้องการภาพของแว่นขยายเพื่อแสดงให้ผู้คนเห็นว่าสามารถคลิกภาพเพื่อขยายได้ (เห็นได้ชัดว่าสิ่งนี้ไม่ชัดเจนหากไม่มีแว่นขยาย)


7
ปลั๊กอินของคุณไม่ตอบคำถามและแม้ว่าจะเกี่ยวข้องกันบ้าง แต่ก็ไม่ใช่สิ่งที่ถูกถาม
Bashevis

คำตอบ:


108

ฉันเพิ่งทำสิ่งนี้เสร็จในโปรเจ็กต์ ด้าน 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ประหารชีวิตได้หากต้องการนี่เป็นเพียงวิธีที่ฉันทำ


1
ใช่ฉันคิดว่ามันน่าจะเป็นโซลูชันการกำหนดตำแหน่งที่แน่นอน เหตุผลที่ฉันชอบเป็นเพราะภาพหลักยังคงเป็นรูปภาพอยู่จึงไม่กลายเป็นภาพพื้นหลัง
Robin Barnes

2
Tim K. : โค้ดของคุณดูดียกเว้น CSS เอ็นจิ้นอ่าน CSS จากขวาไปซ้าย เมื่อคุณใช้ "a.gallerypic" จะมีลักษณะเป็น "gallerypic" ก่อนจากนั้นจะตรวจสอบว่า "gallerypic" มีบรรพบุรุษ "a" หรือไม่ ในการแก้ปัญหานี้ให้ปล่อย "a" ออกไปคุณจะได้รับ ".gallerypic" ไม่จำเป็นต้องมี "a" ก่อนหน้านี้
martin villa

1
มีปัญหาหนึ่งที่ยังไม่สามารถแก้ไขได้ฉันคิดว่าคุณถูกบังคับให้ใช้ display: block (ในขณะที่รูปภาพจะอยู่ในบรรทัดโดยค่าเริ่มต้น)
Peter Tseng


11

วิธีง่ายๆในการทำเช่นนั้นด้วย CSS เท่านั้นโดยไม่ต้องแก้ไขเนื้อหาด้วยแท็กเพิ่มเติมจะแสดงที่นี่ (พร้อมโค้ดและตัวอย่าง): http://soukie.net/2009/08/20/typography-and-css/#example

สิ่งนี้ใช้ได้ตราบเท่าที่องค์ประกอบหลักไม่ได้ใช้การวางตำแหน่งแบบคงที่ เพียงแค่ตั้งค่าให้เป็นตำแหน่งสัมพัทธ์ก็เป็นเคล็ดลับ นอกจากนี้ IE <8 ไม่สนับสนุน: ก่อนที่จะเลือกหรือเนื้อหา


3
สิ่งนี้ใช้งานได้ดีเยี่ยมมากที่สามารถทำได้โดยไม่ต้องเปลี่ยนมาร์กอัปเลย!
axxxman

3
โปรดวางรหัสจาก URL นี้ในกรณีที่รหัสนี้ไม่ทำงาน นี่ควรเป็นคำตอบที่ได้รับการยอมรับ รหัสคือ: p {ตำแหน่ง: ญาติ; แสดง: บล็อก; } p: หลัง {content: url (magnify.png); ตำแหน่ง: แน่นอน; ขวา: 20px; ด้านบน: 20px;
Eric Steinborn

3

นี่คือวิธีที่ฉันทำเมื่อเร็ว ๆ นี้ ไม่สมบูรณ์ตามความหมาย แต่ทำงานให้ลุล่วง

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

3

คุณอาจต้องการดูบทช่วยสอนนี้: http://www.webdesignerwall.com/tutorials/css-decorative-gallery/

ในนั้นผู้เขียนใช้องค์ประกอบช่วงว่างเพื่อเพิ่มภาพซ้อนทับ คุณสามารถใช้ jQuery เพื่อแทรกองค์ประกอบช่วงดังกล่าวได้หากคุณต้องการให้โค้ดของคุณสะอาดที่สุด นอกจากนี้ยังมีตัวอย่างในบทความข้างต้น

หวังว่านี่จะช่วยได้!

-Dave


1

หากคุณต้องการเพียงแว่นขยายบนโฮเวอร์คุณสามารถใช้

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

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

หากคุณต้องการให้อยู่ที่นั่นอย่างถาวรคุณควรรวมไว้ใน thumnail ดั้งเดิมหรือเพิ่มโดยใช้ JavaScript แทนที่จะเพิ่มลงใน HTML (นี่เป็นรูปแบบล้วนๆและไม่ควรอยู่ในเนื้อหา)

โปรดแจ้งให้เราทราบหากคุณต้องการความช่วยเหลือทางด้าน JavaScript



1

สิ่งที่เราต้องการคือพ่อแม่เหนือลูก นี่คือวิธีที่คุณทำ

คุณใส่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;
}

0

หากคุณไม่ใช้<img>แท็กซึ่งแสดงภาพด้วยตัวเองคุณจะไม่สามารถทำได้ด้วย CSS เพียงอย่างเดียว คุณจะต้องมีองค์ประกอบ HTML สองรายการเช่นกัน - หนึ่งรายการสำหรับแต่ละภาพ เนื่องจากวิธีเดียวที่คุณสามารถทำให้องค์ประกอบแสดงรูปภาพผ่าน CSS คือbackground-imageคุณสมบัติและทุกองค์ประกอบสามารถมีภาพพื้นหลังได้เพียงภาพเดียว คุณจะเลือกองค์ประกอบสองอย่างใดและคุณวางตำแหน่งอย่างไรนั้นขึ้นอยู่กับคุณ มีหลายวิธีที่คุณสามารถวางองค์ประกอบ HTML หนึ่งไว้เหนือองค์ประกอบอื่นได้


หากคุณใช้: before หรือ: after pseudo-selectors คุณสามารถเพิ่ม html ได้โดยใช้ javacript คำตอบนี้stackoverflow.com/a/3098231/272208แสดงวิธีที่ไม่มีการเพิ่มองค์ประกอบ html ที่สองลงในซอร์สโค้ด
Jessica Brown

0

ต่อไปนี้เป็นเทคนิคที่ดีในการแสดงภาพซ้อนทับที่มีพื้นหลังกึ่งโปร่งใสอยู่ตรงกลางบนลิงก์รูปภาพ:

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;
}

0

นี่คือเทคนิค 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();
});
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.