2012-03-08 9 views
12

वर्तमान में, मेरे सभी छवियों इस तरह दिखेगा:आईएमजी टैग का उपयोग कर छवि के केवल एक हिस्से को कैसे दिखाया जाए?

enter image description here

एचटीएमएल

<img class="photo" src="foo.png" /> 

सीएसएस

.photo { 
    padding: 3px; 
    border: 1px solid #000; 
    background: #fff; 
    width: 64px; 
    height: 64px; 
    display: block; 
} 

यह हमेशा के लिए छवि का पक्ष अनुपात की उम्मीद 1: 1 हो। अब, एक नई परियोजना आवश्यकता आई है कि छवियों को 1: 1 होना आवश्यक नहीं है। बल्कि, वे ऊँचे आयतों के हो सकते हैं:

enter image description here

यह कैसे एक साथ किया जा सकता:

enter image description here

इस मामले में, मैं केवल छवि के सर्वोच्च वर्ग प्रकट करने के लिए चाहते हैं एकल <img> टैग? मुझे पता है कि दो टैग के साथ इसे कैसे करें - img को div के साथ बस लपेटें, div पर 3px पैडिंग लागू करें और URL को के background-image के रूप में रखें। लेकिन मैं यह जानना चाहता हूं कि बिना किसी अतिरिक्त HTML टैग के क्लीनर तरीके से इसे कैसे किया जाए।

+0

मैं अगर आप मेरी समाधान पर पहले या नहीं देखा था यकीन नहीं था, लेकिन क्योंकि jsfiddle कल रात काम नहीं कर रहा था, मैं इसे परिष्कृत नहीं कर सकता है (और इस प्रकार यह तब तक नहीं कर रहा था जो मुझे उम्मीद थी) आज तक। तो अगर आपने पहले देखा और ध्यान दिया कि यह काम नहीं करता है, तो फिर से देखने का प्रयास करें। ब्राउज़र को संगत पार करने के लिए हल करने के लिए पहेली का एक छोटा टुकड़ा अभी भी है। – ScottS

उत्तर

8

अंतिम अपडेट - परीक्षण किया IE8 +: This solution सीमा प्राप्त करने के लिए रूपरेखा का उपयोग करने का असली ड्रीम्स 'विचार के एक शोधन का उपयोग करता है। यह the linear-gradient method की तुलना में एक क्रॉस ब्राउज़र सादगी की अनुमति देता है जो मैं पहले जा रहा था। यह outline (असमर्थित) को छोड़कर, आईई 7 में काम करता है।

src के साथ इसे img टैग के रूप में रखते हुए इसे अर्थपूर्ण रखता है।

margin: 1px लेआउट में outline "स्पेस" देने के लिए लागू किया गया है, क्योंकि प्रकृति outline कोई स्थान नहीं लेता है। शून्य ऊंचाई मुख्य छवि को दबा देती है, और पैडिंग का उपयोग पृष्ठभूमि छवि के लिए वांछित ऊंचाई (जिसे मुख्य छवि के समान सेट किया जाता है) दिखाने के लिए किया जाता है।

एचटीएमएल

<img class="photo" src="foo.png" style="background-image: url(foo.png)" /> 

सीएसएस

.photo { 
    padding: 64px 0 0 0; 
    border: 3px solid #fff; 
    outline: 1px solid #000; 
    margin: 1px; 
    width: 64px; 
    height: 0px; 
    display: block; 
} 
+0

मुझे इसे IE8 और 9 में काम करने की आवश्यकता है और ग्रेडियेंट उन ब्राउज़रों में काम नहीं करते हैं। – JoJo

+0

@ जोजो - किया! इसके पीछे के लिए अतियथाय सपने के विचार को परिष्कृत करने का उपयोग करते हुए, हमारे पास आईईजी + में काम करने के लिए एक आईएमजी टैग है जो आप चाहते हैं। – ScottS

+0

आपको बहुत धन्यवाद @ScottS, आपका कोड मेरा दिन बचाया! – TechGirl

7

clip संपत्ति पर नज़र डालें।

http://www.w3schools.com/cssref/pr_pos_clip.asp

यहाँ अपनी छवि के साथ एक उदाहरण: http://jsfiddle.net/2U3CE/1/

कोड:

img{ 
    position:absolute; 
    clip:rect(0,73px,73px,0); 
} 
+3

इस विधि का एकमात्र नकारात्मक पक्ष यह है ** ** केवल तभी काम करता है जब स्थिति पूर्ण या निश्चित ** पर सेट की जाती है, जो आपके पृष्ठ को व्यवस्थित करने में एक भयानक समय बनाती है। – animuson

+0

मेरे पास @aminuson पॉइंट्स के रूप में बिल्कुल/निश्चित स्थिति छवियां नहीं हो सकती हैं। – JoJo

+0

हाँ, यह संरक्षित है। आप छवियों के आस-पास 'स्थिति: रिश्तेदार' के साथ एक div डाल सकते हैं, लेकिन यह बहुत सुंदर नहीं होगा। – Alex

0

मुझे लगता है कि आप कर रहे हैं एल सीएसएस के भीतर क्लिप संपत्ति के लिए ooking: - एक div असल

.photo-clipped { 
    position: absolute; 
    clip: rect(0px,64px,64px,0px); 
} 

<img src="some_image.gif" class="photo photo-clipped" /> 
1

, आपको एक टैग के साथ ऐसा कर सकते हैं। क्या इससे कोई फर्क पड़ता है कि यह एक आईएमजी टैग नहीं है?

<div style="display: inline-block; width: 50px; height: 50px; background: url(test.jpg);"></div> 

आप एक <img> टैग कभी नहीं का उपयोग करें, तो आप सिर्फ div की स्थापना की और बस हो गया। आकार सेट करें, पैडिंग, सीमा, आदि जोड़ें, और सभी पुन: प्रयोज्य शैलियों को कक्षा में रखें और पृष्ठभूमि छवि को प्रति div आधार पर सेट करें। आप इस के साथ अंत:

<div class="hip2bsquare" style="background: url(test.jpg);"></div> 

सीएसएस:

.hip2bsquare { 
    display: inline-block; 
    width: 50px; 
    height: 50px; 
    border: 3px solid #FFF; 
    outline: 1px solid #000; 
} 

यह सफेद जोड़ें और काला जोड़ने के लिए रूपरेखा तैयार करने की सीमा का उपयोग करता है। यह शायद बॉक्स मॉडल का दुरुपयोग है, लेकिन यह आपको दृश्य देना चाहिए।

+2

एक विभाजन का उपयोग छवि के अर्थपूर्ण अर्थ को हटा देता है, हालांकि। – animuson

+0

पोस्टर को कोड के अर्थपूर्ण अर्थ को संरक्षित नहीं करते हुए, एक टैग के साथ ऐसा करने में अधिक रुचि लग रही थी। –

+0

मैं बस वहां बाहर फेंक रहा हूँ। चाहे ओपी को विचार पसंद है या नहीं, भविष्य में पेज पर जो भी ठोकर खा सकता है उसे पता होना चाहिए। – animuson

संबंधित मुद्दे