2009-07-02 20 views
36

Ich habe auf ein interessantes Problem in der folgenden Codezeile kommen:Wie entferne ich den grauen Rahmen, der Hintergrundbilder umgibt?

<img style="background-image:url(Resources/bar.png); width: 300px; height: 50px;"/> 

In Safari (zumindest), den 300x50px Bereich ein grauer Rand umgibt. Hinzufügen von style = "border: none;" entfernt es nicht. Irgendwelche Ideen?

Danke. Mike

+0

Try "border: 0;" –

+1

Funktioniert nicht. Der Rahmen erscheint nicht, wenn ich das img-Tag durch ein div-Tag ersetze ... Soll das so gemacht werden? –

+0

Ändern Sie das CSS der Seite dynamisch mit Javascript? –

Antwort

59

Sie haben also ein img-Element, das kein src-Attribut hat, aber es wird ein Hintergrundbildstil angewendet.

Ich würde sagen, dass der graue Rahmen der "Platzhalter" für das Bild wäre, wenn Sie ein src-Attribut angegeben hätten.

Wenn Sie kein "Vordergrund" -Bild möchten, dann verwenden Sie kein IMG-Tag - Sie haben bereits festgestellt, dass die Änderung zu einem Div das Problem löst, warum nicht mit dieser Lösung gehen?

+2

Richtig. Ich denke, das ist es genau. Ich habe es mit div behoben. Ich wusste nicht img-Tag war nur für Vordergrundbilder. Aber ja, das ist die Antwort, soweit ich das beurteilen kann. –

+0

Froh, ich könnte helfen - jede Chance, dass du meine Antwort als akzeptiert markieren könntest? – belugabob

+1

Es ist traurig, dass CSS3 den Benutzer dazu zwingt, diesen hässlichen Standardrahmen zu haben. Deshalb versuche ich, schreckliche vorgefertigte Tags wie 'img' zu vermeiden. –

1

Versucht, den Rahmen auf 0px zu setzen?

EDIT: Ja, Sie sollen Hintergrundbilder in der CSS einer anderen Klasse haben. Doing in div oder im body-Tag (abhängig davon, was Sie tun wollen) wird funktionieren. Es stoppt auch das Hintergrundbild, das ein Element an sich ist, das den Fluss der Elemente auf der Seite schraubt und Ihre Positionierung durcheinander bringt.

<div class="myDivClass">content to go on TOP of the background image</div> 

CSS:

.myDiVClass 
{ 
background: url(Resources/bar.png) no-repeat; 
width: 300px; 
height: 50px; 
} 

oder

<div class="myDivClass" style="background: url(Resources/bar.png) no-repeat; width: 300px; height: 50px;">content to go on TOP of the background image</div> 

Es ist am besten CSS seperate zu halten, da es sonst obwohl ein Teil des Punktes besiegt.

+1

Ja. Funktioniert nicht. Es sieht wie eine Grenze aus, aber es scheint sich wie etwas anderes zu verhalten. –

0

Versuchen Sie, diese anstelle von Hintergrund-Bildeinstellung:

background: url(Resources/bar.png) no-repeat; 
+0

Funktioniert nicht. Erscheint, dass Sie kein Bild-Tag verwenden können. –

3

versuchen <img border="0" />

, die den Trick tun sollten.

EDIT

Sorry, ich sehe, dass Sie etwas zu tun, sehr falsch .. Sie auf einem img-Tag ein Hintergrundbild setzen .., die nicht wirklich Sinn macht ...

anstelle eines ImageTag verwenden, um eine

<div style="background-image: url(Resources/bar.png);"></div>

oder wenn es sich um ein Bild, das Sie in diesem Bereich wollen, ist verwenden, um eine

<img src="Resources/bar.png" border="0" Width="500px" Height="300" /> 
0

wenn nur in Safari und nicht in anderen Browsern geschieht versuchen, den Browser CSS mit so etwas wie YUI CSS RESET

Der richtige Weg wäre es, zu trennen die CSS von Code neu einzugeben und eine CSS-Klasse für das Bild zu haben.

<img src='whatever.png' alt='whatever' class='className' /> 

und in der CSS zu definieren, wie className aussieht. , className {border: 0;}

+0

Habe andere Browser nicht überprüft, aber ich denke, ich muss nur das div-Tag verwenden. Das ist behoben, aber ich dachte, ein IMG-Tag wäre, wie es gemacht werden sollte ... –

2

Img-Tags benötigen ein src-Attribut.

z.B.

<img src="Resources/bar.png" alt="bar" width="300" height="50" /> 

Aber img ist nur für Inline (Vordergrund) Bilder. Wenn Sie tatsächlich das Bild wollen ein Hintergrund von etwas zu sein, müssen Sie den Stil auf das eigentliche Element anwenden Sie es der Hintergrund sein wollen:

<div style="background-image:url(Resources/bar.png);">...</div> 
21

Sie können auch hinzufügen, ein leeres Bild als Platzhalter :

img.src='data:image/png;base64,R0lGODlhFAAUAIAAAP///wAAACH5BAEAAAAALAAAAAAUABQAAAIRhI+py+0Po5y02ouz3rz7rxUAOw==' 

Dies sollte es tun!

+1

Oder ein noch kleineres Bild (GIF anstelle von PNG): '' – binnyb

+0

arbeitete für mich, danke! der Gif-Vorschlag von @binnyb hat jedoch nicht funktioniert. – marmor

0

Versuchen Sie dieses, es hat für mich funktioniert (auf Chrom und Safari). Das war nicht die Grenze, sondern der Schatten, also füge bitte diese Zeile zum Tag hinzu:

{-webkit-box-shadow:none;} 

Hoffe, es funktioniert auch für dich.

0

Ich weiß, dass dies eine alte Frage, aber ich fand diese nützlich ..

Im Fall, dass Ihre Resources/bar.png ist ein Vordergrundbild in Form eines Sprites, macht es Sinn, eher einen img-Tag zu verwenden, als ein div. Wenn Sie dies tun, kann es hilfreich sein, eine transparente 1px-Bilddatei zu haben, die Sie für das Attribut src verwenden, und dann das Hintergrundbild wie hier z.

<img src="transparent.png" style="background: url(sprite.png) x y" /> 

Hier stellen Sie x und y die Pixelposition auf dem Sprite sein, dass Sie das Bild wollen an starten. Diese Technik ist auch erklärt unter: http://www.w3schools.com/css/css_image_sprites.asp

Natürlich ist der Nachteil davon, dass es eine zusätzliche Anforderung gibt, aber es ist immer das gleiche transparente Bild für Sie Sprites es ist keine große Sache.

+0

diese Art von arbeitete für mich, transparent.png, Hintergrundbild, Höhe und Breite einstellen, so dass das Bild abgeschnitten wird (das war meine Notwendigkeit) und der Schatten ging weg –

13

Eigentlich scheint dies zumindest auf Chrome zu arbeiten:

img { 
content: ""; 
} 
+2

Dies macht den Trick (zusammen mit 'display: Inline-Block 'um die Abmessungen beizubehalten, aber es bleibt ein leeres Bild, auch wenn das Quellbild nicht unterbrochen ist ... –

+0

Ihre kombinierten Antworten sind die Lösung für Chrome. In FF gibt es jedoch nicht nur Grenze, sondern auch gebrochenes Bildsymbol. Kompatibilität .... :-( – greenoldman

+0

Mit Chome 59 zeigt die Grenze immer noch mit beiden, aber die src = 'Daten: image/png; base64, R0lGODlhFAAUAIAAAAA /// wAAACH5BAEAAAAALAAAAAUAABQAAAIRhI + py + 0Po5y02ouz3rz7rxUAOw ==' Hack noch behebt es. – rainabba

0

Ich hatte ein ähnliches Problem, bei dem meine ersten HTML ohne Quelle einen Image-Tag hatte. Mein Javascript hat festgestellt, welches Bild angezeigt werden soll. Bevor jedoch das Bild geladen wurde, sah der Benutzer die Platzhalterbox.

<img id="myImage"> 

Meine fix war der anfänglichen Bildtag CSS

#myImage { 
    display:none; 
} 

Und dann verwendet, um eine JQuery zu aktualisieren, es zu zeigen, wenn ihr Inhalt geladen wurde.

$('#myImage') 
.attr('src', "/img/" + dynamicImage + '.png') 
.fadeTo(500, 1); 
8

Im Folgenden wird CSS verwenden, um die src zu einem winzigen transparentes Bild zu setzen, die das Problem Attribut src löst, während die Steuerung von Bild beibehalten:

content:url('data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7')

Mein Gesamt Ansatz ist es, die folgenden zu definieren in meiner reset.css, dann verwenden Sie eine Klasse, um das eigentliche Bild zur Verfügung zu stellen und es zu kontrollieren. Dieses verhält sich genau wie ein IMG, ist aber komplett CSS-gesteuert.

img { 
    display: -moz-inline-box; 
    -moz-box-orient: vertical; 
    display: inline-block; 
    *display: inline; 
    vertical-align: middle; 
    * 
    vertical-align: auto; 
    font: 0/0 serif; 
    text-shadow: none; 
    color: transparent; 
    background-size: contain; 
    background-position: 50% 50%; 
    background-repeat: no-repeat; 
    box-sizing: border-box; 
} 

img:not([src]) { 
    content:    url('data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7'); 
} 

.myuniqueimage { 
    background-image: url('../images/foobar.png'); 
    height: 240px; 
} 

Dank + programming_historian und + binnyb für die Daten: Bild Spitze

Verwandte Themen