Görüntüler nasıl bindirilir


127

CSS kullanarak bir görüntüyü diğeriyle kaplamak istiyorum. Bunun bir örneği, ilk resim (isterseniz arka plan), bir ürünün küçük resim bağlantısı olacaktır ve bağlantı, görüntünün daha büyük bir sürümünü gösteren bir ışık kutusu / açılır pencere açar.

Bu bağlantılı görüntünün üstünde, insanlara görüntünün tıklanarak büyütülebileceğini göstermek için bir büyüteç görüntüsü istiyorum (görünüşe göre bu büyüteç olmadan açık değil).


7
Eklentiniz soruyu yanıtlamıyor ve bir şekilde ilgili olsa da istenen şey bu değil.
Bashevis

Yanıtlar:


108

Bir projede tam olarak bu şeyi yaptım. HTML tarafı biraz şuna benziyordu:

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

Ardından CSS kullanarak:

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

Stili nasıl yapmaya karar verdiğimi görebilmeniz için CSS'de çok sayıda örnek bıraktım. Not Büyüteçten görebilmeniz için opaklığı düşürdüm.

Bu yardımcı olur umarım.

DÜZENLEME: Örneğinizi açıklığa kavuşturmak için - isterseniz infazı görmezden gelebilir visibility:hidden;ve öldürebilirsiniz, :hoverben de öyle yaptım.


1
Evet, muhtemelen mutlak bir konumlandırma çözümü olacağını düşündüm. Bundan hoşlanmamın nedeni ana görüntünün bir görüntü olarak kalması, bir arka plan görüntüsü olmaması.
Robin Barnes

2
Tim K .: CSS dışında kodunuz iyi görünüyor. Motor, CSS'yi sağdan sola okur. 'A.gallerypic' kullandığınızda, önce 'gallerypic'i arar ve ardından' gallerypic'in 'a' atası olup olmadığını kontrol eder. Bunu çözmek için, basitçe "a" harfini dışarıda bırakın, böylece ".gallerypic" olursunuz. Önceki 'a'ya gerek yok.
martin villa

1
Bence çözülmemiş kalan bir sorun var, bu da display: block'u kullanmak zorunda olmanızdır (oysa görüntüler varsayılan olarak satır içindedir).
Peter Tseng


11

İçeriği ek etiketlerle değiştirmeden yalnızca CSS ile yapmanın basit bir yolu burada gösterilmektedir (kod ve örnekle): http://soukie.net/2009/08/20/typography-and-css/#example

Bu, ana öğe statik konumlandırmayı kullanmadığı sürece çalışır. Basitçe göreceli konumlandırmaya ayarlamak hile yapar. Ayrıca IE <8, seçici veya içerik öncesi: öğesini desteklemez .


3
Bu aslında çok iyi çalışıyor, işaretlemeyi değiştirmeden bunu yapabilmek harika!
axxxman

3
Lütfen arıza ihtimaline karşı bu URL'deki kodu yapıştırın. Kabul edilen cevap bu olmalıdır. Kod: p {konum: göreceli; Ekran bloğu; } p: {içerik: url'den (magnify.png) sonra; konum: mutlak; sağ: 20px; üst: 20px;
Eric Steinborn

3

İşte son zamanlarda nasıl yaptım. Anlamsal olarak mükemmel değil, ama işi hallediyor.

<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

Bu eğiticiye göz atmak isteyebilirsiniz: http://www.webdesignerwall.com/tutorials/css-decorative-gallery/

Yazar, bindirme görüntüsü eklemek için boş bir yayılma öğesi kullanır. Kodunuzu olabildiğince temiz tutmak istiyorsanız, jQuery'yi söz konusu span öğelerini enjekte etmek için kullanabilirsiniz. Bahsi geçen makalede bir örnek de verilmiştir.

Bu yardımcı olur umarım!

-Dave


1

Sadece büyütme camının üzerine gelmesini istiyorsanız, o zaman kullanabilirsiniz

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

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

Kalıcı olarak orada olmasını istiyorsanız, muhtemelen orijinal küçük resme dahil etmelisiniz veya HTML'ye eklemek yerine JavaScript kullanarak eklemelisiniz (bu tamamen stildir ve içerikte olmamalıdır).

JavaScript tarafında yardım istiyorsanız bana bildirin.



1

Tek istediğimiz, çocuğun üstünde ebeveyn. Bunu nasıl yapıyorsun.

Sen koymak imgiçine spanayarlamak, z-index & positioniki kademe için ve ekstra displayyayılma için. Fareyle üzerine gelme eklespan böylece test edebilirsiniz ve anladınız!

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

Tek <img>başına bir görüntüyü gösteren etiketi kullanmadığınız sürece , bunu yalnızca saf CSS ile elde edemezsiniz. Ayrıca her resim için bir tane olmak üzere İKİ HTML öğesine de ihtiyacınız olacak. Bunun nedeni, bir elemanın bir resmi CSS aracılığıyla görüntülemesini sağlamanın tek yolunun background-imageözelliğe sahip olmasıdır ve her elemanın yalnızca bir arka plan görüntüsü olabilir. Hangi iki öğeyi seçeceğiniz ve bunları nasıl konumlandıracağınız size kalmış. Bir HTML öğesini diğerinin üzerine yerleştirmenin birçok yolu vardır.


Eğer: önce veya: sonra sözde seçiciler kullanırsanız, sadece javacript kullanarak html ekleyebilirsiniz. Bu yanıt stackoverflow.com/a/3098231/272208 , kaynak koda ikinci bir html öğesi eklenmeden bir yol gösterir
Jessica Brown

0

Yarı saydam bir arka planla ortalanmış bir bindirme görüntüsünü bir görüntü bağlantısının üzerinde görüntülemek için iyi bir teknik:

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

İşte yarı saydam arka plana sahip bir JQuery Tekniği.

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();
});
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.