Toon posts:

[CSS] Border met dubbel "shaduw" effect

Pagina: 1
Acties:

  • posttoast
  • Registratie: april 2000
  • Laatst online: 22:57
Ik zit hier fijn een beetje te CSSen en loop tegen een probleempje aan. Direct even een plaatje om te laten zien wat ik wil:



Heel simpel dus: een image met 2 "shaduwrandjes" eromheen. Nou ja, simpel; ik zou eigenlijk niet weten hoe ik dit op een nette manier (dus zonder allerhande overbodige HTML elementen en eventueel zelfs vieze JS trucs) op kan lossen. Om het plaatje heen staat een <a>, dus die kan op zich prima ge- of misbruikt worden.

Ik heb al van alles geprobeerd met borders, outlines en backgrounds, en ik kom op zich een heel eind op deze manier:

Cascading Stylesheet:
1
2
3
4
5
6
7
img{
  padding-right: 4px;
  padding-bottom: 4px;
  background: #97928c;
  border-right: 4px solid #595552;
  border-bottom: 4px solid #595552;
}

Maar de oplettende lezer ziet natuurlijk direct dat dit niet gaat werken, omdat de borders een stukje in moeten springen.

Belangrijk detail in deze puzzel is dat de formaten van de afbeelding variabel zijn (ja, anders was het makkelijk geweest natuurlijk he ;) ).

Wie kan mij een stukje verder helpen?

omniscale.nl


  • mithras
  • Registratie: maart 2003
  • Niet online
Met css3: gebruik dropshadow en met pseudo-element :after voeg je nogmaals een dropshadow toe :)

Maar dat staat of valt met support van browsers ;)

  • posttoast
  • Registratie: april 2000
  • Laatst online: 22:57
Hmmm, helemaal geen gek idee eigenlijk. Voor de minder intelligente browsers maak ik wel een alternatief dat er minder mooi uit ziet. Ik kom er alleen niet uit met het psuedo-element. Want dit zou moeten werken toch?
Cascading Stylesheet:
1
2
3
4
5
6
7
img{
  -moz-box-shadow: 4px 4px 0 #97928c;
}

img:after{
  -moz-box-shadow: 8px 8px 0 #595552;
}

(ik pak hier alleen even de Mozilla-CSS-codes, ik realiseer me dat dit niet in andere browsers gaat werken).
Hij toont nu alleen maar de eerste dropshadow, namelijk degene die ik definieer bij img. Die van img:after wordt niet gepakt!

omniscale.nl


  • RedStar85
  • Registratie: juni 2009
  • Laatst online: 27-03 12:12
Je zou ook met <DIV> elementen kunnen werken...

html:
<DIV ID="DIV1"></DIV>
<DIV ID="DIV2"></DIV>
css:
#DIV1{
background: #595552;
width: 20px;
height: 20px;
position: absolute;
margin-top: 0px;
margin-left: 0px;
z-index: 1;
}

#DIV2{
background: #97928c;
width: 20px;
height: 20px;
position: absolute;
margin-top: 4px;
margin-left: 4px;
z-index: 0;
}

Je hebt dan alleen de vlakken en dan zul je zelf een oplossing moeten vinden voor het plaatje (en de daarbij behorende variabele groottes)

  • posttoast
  • Registratie: april 2000
  • Laatst online: 22:57
Ja, maar dan doe ik dus iets wat ik niet wil: extra elementen toevoegen zonder semantische waarde. En bovendien moet ik dan op de een of andere manier de maten van die <div>'s aanpassen, waarschijnlijk met een javascript. Dat vind ik allemaal een beetje vies :)

omniscale.nl


  • mithras
  • Registratie: maart 2003
  • Niet online
posttoast schreef op vrijdag 15 oktober 2010 @ 20:56:
Hmmm, helemaal geen gek idee eigenlijk. Voor de minder intelligente browsers maak ik wel een alternatief dat er minder mooi uit ziet. Ik kom er alleen niet uit met het psuedo-element. Want dit zou moeten werken toch?
Cascading Stylesheet:
1
2
3
4
5
6
7
img{
  -moz-box-shadow: 4px 4px 0 #97928c;
}

img:after{
  -moz-box-shadow: 8px 8px 0 #595552;
}

(ik pak hier alleen even de Mozilla-CSS-codes, ik realiseer me dat dit niet in andere browsers gaat werken).
Hij toont nu alleen maar de eerste dropshadow, namelijk degene die ik definieer bij img. Die van img:after wordt niet gepakt!
Lege elementen (ook gecreëerd door pseudo elementen) worden afaik niet gerendered wanneer ze leeg zijn. Een aanvulling met:
Cascading Stylesheet:
1
2
3
4
5
6
7
img:after {
  content: ".";
  display: block;
  height: 0;
  font-size: 0;
  visibility: hidden;
}

Zou het op moet lossen.

  • RedStar85
  • Registratie: juni 2009
  • Laatst online: 27-03 12:12
Helemaal juist maar ik dacht ik gooi even een balletje op.

Good luck!

  • posttoast
  • Registratie: april 2000
  • Laatst online: 22:57
RedStar85 schreef op vrijdag 15 oktober 2010 @ 21:02:
Helemaal juist maar ik dacht ik gooi even een balletje op.

Good luck!
Dank je wel :)
mithras schreef op vrijdag 15 oktober 2010 @ 21:02:
[...]
Lege elementen (ook gecreëerd door pseudo elementen) worden afaik niet gerendered wanneer ze leeg zijn. Een aanvulling met:
Cascading Stylesheet:
1
2
3
4
5
6
7
img:after {
  content: ".";
  display: block;
  height: 0;
  font-size: 0;
  visibility: hidden;
}

Zou het op moet lossen.
Heel vreemd, maar ook dat werkt niet. Zelfs niet als ik de visibility: hidden en de font-size weg haal.

Het lijkt wel alsof de :after pseudo-class sowieso niet werkt op <img>'s.

[Voor 22% gewijzigd door posttoast op 15-10-2010 21:10]

omniscale.nl


  • X-Lars
  • Registratie: januari 2004
  • Niet online

X-Lars

Just GoT it.

De img:after selector blijkt inderdaad niet altijd goed geimplementeerd door browsers: [google=img after]

Maar je had juist nog een container element beschikbaar, dus het kan zonder psuedo selectors trickery:

HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<!DOCTYPE html>
<html>
    <head>
        <title>Anchored image with double-border</title>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <style type="text/css">
            a {
                -moz-box-shadow: 8px 8px 0 green;
                display:inline-block;
                font-size:0;
            }
            img {
                border:none;
                -moz-box-shadow: 4px 4px 0 blue;
                background-color:red;
            }
        </style>
    </head>
    <body>
        <a href="#">
            <img src="dummy.gif"/>
        </a>
    </body>
</html>

  • posttoast
  • Registratie: april 2000
  • Laatst online: 22:57
Yes, dat is hem hoor! Ik had zelf ook al wat geklooid met die a, maar kwam er niet uit. De inline-block bleek de magische oplossing. Heel veel dank :)

Nu nog even zorgen dat het er in de fossielere browsers ook nog een beetje uit ziet, maar dat komt wel goed.

omniscale.nl


  • Bosmonster
  • Registratie: juni 2001
  • Laatst online: 10-09 22:52

Bosmonster

*zucht*

posttoast schreef op zaterdag 16 oktober 2010 @ 11:22:

Nu nog even zorgen dat het er in de fossielere browsers ook nog een beetje uit ziet, maar dat komt wel goed.
Dat strookt niet helemaal met CSS3 middels progressive enhancement.

De afbeelding is functioneel, de schaduwen een extra. De afbeelding alleen lijkt me genoeg voor oudere browsers.

  • posttoast
  • Registratie: april 2000
  • Laatst online: 22:57
Bosmonster schreef op zaterdag 16 oktober 2010 @ 13:48:
[...]


Dat strookt niet helemaal met CSS3 middels progressive enhancement.

De afbeelding is functioneel, de schaduwen een extra. De afbeelding alleen lijkt me genoeg voor oudere browsers.
Ja, in een ideale wereld heb je gelijk. Maar helaas kan ik een opdrachtgever daar niet altijd van overtuigen. Dus is het zo dat ik, middels conditional comments, een aparte IE6 en IE7 stylesheet heb. Maar die kan ik dus prima gebruiken om middels een filter (ongeveer) hetzelfde effect te bereiken.

Allemaal niet fantastisch, maar ik houd mijn basis CSS schoon van allerhande IE-hacks en kan toch zorgen dat ook zij die niet upgraden (vaak ongewenst, denk aan medewerkers van grote bedrijven) nog een enigszins fatsoenlijke websitebeleving hebben.

omniscale.nl


  • X-Lars
  • Registratie: januari 2004
  • Niet online

X-Lars

Just GoT it.

posttoast schreef op zaterdag 16 oktober 2010 @ 18:02:
[...] een enigszins fatsoenlijke websitebeleving hebben.
Het is natuurlijk wat off-topic, maar het is wat mij betreft altijd vrij lastig om dat ideale punt te bepalen. Vergeet niet dat je van een toch al tragere browser ook nog extra downloads en processing gaat verlangen voor wat optische verfraaiingen. En ik denk dat juist de mensen waar jij het over hebt over het algemeen al blij zijn dat de website goed functioneert, dus dat dan het liefst zo soepel mogelijk.

  • posttoast
  • Registratie: april 2000
  • Laatst online: 22:57
X-Lars schreef op zaterdag 16 oktober 2010 @ 18:16:
[...]


Het is natuurlijk wat off-topic, maar het is wat mij betreft altijd vrij lastig om dat ideale punt te bepalen. Vergeet niet dat je van een toch al tragere browser ook nog extra downloads en processing gaat verlangen voor wat optische verfraaiingen. En ik denk dat juist de mensen waar jij het over hebt over het algemeen al blij zijn dat de website goed functioneert, dus dat dan het liefst zo soepel mogelijk.
Mee eens. Ik leg in mijn offertes de grens altijd bij IE7. In IE6 moet het functioneel zijn, maar "mooi" is niet zo relevant. Tenzij de klant expliciet aangeeft dat het er ook in IE6 "redelijk" uit moet zien. En dan zijn dit soort oplossingen natuurlijk redelijk simpel te realiseren.

omniscale.nl


  • Bosmonster
  • Registratie: juni 2001
  • Laatst online: 10-09 22:52

Bosmonster

*zucht*

Zoals Dan Rubin zei over dit onderwerp, leg het je opdrachtgever uit hoe internet anno 2010 werkt (CSS3 en progressive enhancement dus) en dat het nooit ten koste gaat van functionaliteit.

Het scheelt de klant ook tijd en geld in ontwikkeling.

  • posttoast
  • Registratie: april 2000
  • Laatst online: 22:57
Bosmonster schreef op zaterdag 16 oktober 2010 @ 18:46:
Zoals Dan Rubin zei over dit onderwerp, leg het je opdrachtgever uit hoe internet anno 2010 werkt (CSS3 en progressive enhancement dus) en dat het nooit ten koste gaat van functionaliteit.

Het scheelt de klant ook tijd en geld in ontwikkeling.
Geloof me, dat doe ik ook echt wel. Maar soms houdt iemand voet bij stuk en dan is het voor mij gewoon: wie betaald, bepaald. Voorbeeldje: ik heb hiervoor bij het buro gewerkt dat de website voor Albert Heijn maakt. Heel Ahold zit nog met IE6 te werken. Dan kun je met nog zulke goede argumenten komen, als de directie van zo'n bedrijf de eigen site bekijkt moet het er gewoon uitzien zoals in het ontwerp.

In dit concrete voorbeeld: box-shadow wordt zelfs nog niet door IE8 ondersteunt. Dat zou dus betekenen dat geen enkele IE gebruiker (op de enkeling met IE9 beta na) de site ziet zoals in het ontwerp. Dat kan ik gewoon niet verkopen, en al helemaal niet als het met een relatief eenvoudige handeling te verhelpen is.

Natuurlijk is progressive enhancement heel erg mooi, en natuurlijk wil je vooruitstrevend te werk gaan. Maar soms moet je gewoon even pragmatisch zijn.

Nog een ander voorbeeld (helemaal offtopic, maar ik vind het wel een interessante discussie, dus ik hoop dat het OK is): het gebruik van target="_blank" in hyperlinks. Ik heb er een bloedhekel aan, ben absoluut tegen het gebruik ervan. Maar bijna iedere klant zeurt er over als er een link naar een externe pagina op de site staat die niet in een nieuw venster opent. Dan probeer ik de klant er van te overtuigen dat dit toch echt de betere manier is (hier wordt het allemaal duidelijk en helder uiteen gezet), maar er zitten altijd klanten bij die stug vol blijven houden. Tja, wat moet je in zo'n geval doen? Mijn motto is in dat geval: "pick your battles" en ik laat het maar varen. Uiteindelijk wil ik toch dat de klant aan het eind van het project gewoon mijn factuur betaalt.

Edit: Oh, de ironie. GoT opent blijkbaar links naar externe pagina's ook in een nieuw venster...

[Voor 27% gewijzigd door posttoast op 16-10-2010 19:07]

omniscale.nl


  • Bosmonster
  • Registratie: juni 2001
  • Laatst online: 10-09 22:52

Bosmonster

*zucht*

Ik heb het ook niet over IE6, dat is een verhaal apart. Ik heb het over het gebruik van CSS3.

Je moet je werkwijze en communciatie daar ook op aanpassen. Persoonlijk heb ik nog geen enkele keer meegemaakt dat een klant het niet snapt, MITS je het goed uitlegt. Of wat ook gebeurt bij sommige klanten, waarvan we toch weten dat ze het verschil niet zien, het gewoon doen.

Daarnaast moet je dus iets meer oppassen met het presenteren van kant-en-klare designs.

Ik denk dat als een klant "stug vol blijft houden" en je het al hebt over "battles", dat er iets schort aan je manier van communiceren. Bovendien is het alternatief heel makkelijk. Dan krijgt niemand die extra features, of de offerte gaat omhoog. M.a.w. het is van belang dat het vanaf het begin al duidelijk gecommuniceerd wordt.

Het is belangrijk dat de klant weet dat uiteindelijk iedereen, klant (tijd/geld/performance/kwaliteit) EN bezoeker (gebruikservaring/looks), er beter van wordt.

[Voor 14% gewijzigd door Bosmonster op 16-10-2010 19:28]


  • posttoast
  • Registratie: april 2000
  • Laatst online: 22:57
Bosmonster schreef op zaterdag 16 oktober 2010 @ 19:26:
Ik heb het ook niet over IE6, dat is een verhaal apart. Ik heb het over het gebruik van CSS3.

Je moet je werkwijze en communciatie daar ook op aanpassen. Persoonlijk heb ik nog geen enkele keer meegemaakt dat een klant het niet snapt, MITS je het goed uitlegt. Of wat ook gebeurt bij sommige klanten, waarvan we toch weten dat ze het verschil niet zien, het gewoon doen.

Daarnaast moet je dus iets meer oppassen met het presenteren van kant-en-klare designs.

Ik denk dat als een klant "stug vol blijft houden" en je het al hebt over "battles", dat er iets schort aan je manier van communiceren. Bovendien is het alternatief heel makkelijk. Dan krijgt niemand die extra features, of de offerte gaat omhoog. M.a.w. het is van belang dat het vanaf het begin al duidelijk gecommuniceerd wordt.
Wat je zegt over die offerte: dat klopt. Als de klant wil dat het er allemaal in alle browser identiek uitziet, dan wordt daar voor geoffreerd en betaald.

Wat betreft het presenteren van kant-en-klare designs: ja, dat is een lastige. Het vereist in de wereld waarin ik vooral werk (samen met ontwerpers die zelf niet HTMLen en CSSen) best een andere manier van denken dan men nu gewend is. Maar ik ben absoluut met je eens dat je er bijna niet meer onderuit kan om het op die manier aan te pakken. Als je dat niet doet kun je gewoon niet gebruik maken van de nieuwste mogelijkheden en blijf je stil staan. En daar wordt niemand beter van.

Overigens valt het met mijn communicatie wel mee hoor (voor zover ik dat zelf kan zeggen natuurlijk). Ik heb zelden ruzie met mijn klanten ;) Mijn opmerking over "battles" was natuurlijk een beetje gechargeerd. Het gaat er gewoon om dat sommige klanten heel eigenwijs zijn en op zich mogen ze dat ook van mij. Zo lang ze er maar voor betalen. En uiteindelijk moet ik zelf wel achter het product staan. En dat lukt tot nu toe prima gelukkig :)

omniscale.nl


  • moozzuzz
  • Registratie: januari 2005
  • Laatst online: 10-01 23:26
posttoast schreef op zaterdag 16 oktober 2010 @ 18:02:
(vaak ongewenst, denk aan medewerkers van grote bedrijven)hebben.
Merci!
offtopic:
Onze leverancier van online-reisbook-software (KDS; een webapp dus) informeerde ons vorige week dat ze vanaf nu langzaam aan support voor IE6x gaan afbouwen. Reactie van onze IT: IE6 wordt zeker niet voor mid 2011 geupgrade :X . Dit even melden ter uiting van frustratie. Wereldwijde stats binnen het bedrijf: 68% IE6, 20% IE7, 5% IE8, 5% FF, 2% Chrome. Alternatieven bestaan dus binnen ons bedrijf maar...

[Voor 4% gewijzigd door moozzuzz op 18-10-2010 09:43]


  • geert1
  • Registratie: maart 2006
  • Laatst online: 24-09 15:39
mithras schreef op vrijdag 15 oktober 2010 @ 21:02:
Lege elementen (ook gecreëerd door pseudo elementen) worden afaik niet gerendered wanneer ze leeg zijn. Een aanvulling met:
Cascading Stylesheet:
1
2
3
4
5
6
7
img:after {
  content: ".";
  display: block;
  height: 0;
  font-size: 0;
  visibility: hidden;
}

Zou het op moet lossen.
Stel dat je nu toch de pseudo-selector :after wilt gebruiken, dan zit volgens mij de fout in bovenstaande code erin dat de hoogte op nul staat (dan zou de dropshadow ook geen hoogte krijgen namelijk). Ik vermoed dat dit aangemaakte element een zelfde hoogte en breedte zou moeten krijgen als het "echte" element, en bijvoorbeeld met position: absolute ook dezelfde positie zou moeten krijgen (of iets naar rechts en naar onder). Dan via z-index het aangemaakte element achter het "echte" element plaatsen, en er een dropshadow op zetten. Een dropshadow is dan misschien zelfs niet nodig, je kunt ook het element zelf wat verder naar rechts en naar onderen verplaatsen en voorzien van een background-color. Dan fungeert het aangemaakte element zelf als dropshadow van het "echte" element.

Dit alles is hier niet nodig, maar zo zou het wel ongeveer moeten werken denk ik. Interessante mogelijkheden die :after biedt, en al vrij breed inzetbaar op dit moment, aangezien ie7+ het ondersteunt (de :after-selector dan, niet de dropshadow via css3).

  • OkkE
  • Registratie: oktober 2000
  • Laatst online: 04-06 12:54

OkkE

Front-end ninja :+

Niet het hele topic gelezen hoor, maar waarom dit oplossen via een extra :after, terwijl je ook gewoon meerdere box-shadows op één element kunt zetten?

.
Cascading Stylesheet:
1
-moz-box-shadow: 8px 8px 0 green, 16px 16px 0px red;

“The best way to get the right answer on the Internet is not to ask a question, it's to post the wrong answer.”
QA Engineer walks into a bar. Orders a beer. Orders 0 beers. Orders 999999999 beers. Orders a lizard. Orders -1 beers.


  • posttoast
  • Registratie: april 2000
  • Laatst online: 22:57
Hey, ik wist niet dat je meerdere shadows kon plaatsen. Zometeen even testen, dank!

omniscale.nl

Pagina: 1


Nintendo Switch (OLED model) Apple iPhone 13 LG G1 Google Pixel 6 Call of Duty: Vanguard Samsung Galaxy S21 5G Apple iPad Pro (2021) 11" Wi-Fi, 8GB ram Nintendo Switch Lite

Tweakers vormt samen met Hardware Info, AutoTrack, Gaspedaal.nl, Nationale Vacaturebank, Intermediair en Independer DPG Online Services B.V.
Alle rechten voorbehouden © 1998 - 2021 Hosting door True

Tweakers maakt gebruik van cookies

Bij het bezoeken van het forum plaatst Tweakers alleen functionele en analytische cookies voor optimalisatie en analyse om de website-ervaring te verbeteren. Op het forum worden geen trackingcookies geplaatst. Voor het bekijken van video's en grafieken van derden vragen we je toestemming, we gebruiken daarvoor externe tooling die mogelijk cookies kunnen plaatsen.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Forum cookie-instellingen

Bekijk de onderstaande instellingen en maak je keuze. Meer informatie vind je in ons cookiebeleid.

Functionele en analytische cookies

Deze cookies helpen de website zijn functies uit te voeren en zijn verplicht. Meer details

janee

    Cookies van derden

    Deze cookies kunnen geplaatst worden door derde partijen via ingesloten content en om de gebruikerservaring van de website te verbeteren. Meer details

    janee