Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: CSS: Ongelma position-määritteen kanssa

Sivun loppuun

HTML5 [21.11.2013 13:55:42]

#

Google Chrome vaikuttaa toimivan virheellisesti määritteen position suhteen. Kyseessä on siis linkki, joka on tehty painikkeen näköiseksi ja sen sisällä on kuvakefonttikuvake. Kuvakke on aseteltu absoluttisella sijainnilla paikalleen.

Kun linkki on :active-tilassa kuvakkeen pitäisi olla 3 pikseliä alempana. Jostain syystä sen sijaiti muuttuu paljon enemmän, mikä ajattlin johtuvan yläkehyksestä (border). Näyttääkin siltä, että positionin top-arvon pitää olla linkin :active-tilassa sama kuin ennen kyseistä tilaa. Chrome kuitenkin näyttää kuvakkeen virheellisesti samalla paikalla kuin ennen linkin :active tilaa.

Linkki koodiin: http://codepen.io/anon/pen/dofsC

Mitä siis teen väärin?

Lebe80 [21.11.2013 14:21:00]

#

Älä käytä position: absolutea tuolla .fa:ssa

vaan mieluummin jotain tällaista:

a.login .fa {
	font-size:18px;
	paddin-top:9px;
	padding-left:14px;
}
a:active.login .fa {} /* <-- Ongelmakohta */

Metabolix [21.11.2013 14:57:17]

#

HTML5 kirjoitti:

Näyttääkin siltä, että positionin top-arvon pitää olla linkin :active-tilassa sama kuin ennen kyseistä tilaa.

Tietenkin top-arvon pitää pysyä samana: se mitataan sisältöalueesta, jolloin borderin lisääminen siirtää jo sisältöä.

HTML5 kirjoitti:

Chrome kuitenkin näyttää kuvakkeen virheellisesti samalla paikalla kuin ennen linkin :active tilaa.

Ilmeisesti olet löytänyt bugin selaimesta. Näkyyhän, että jos asetat tuossa ongelmakohdassa top-arvoksi vaikka 9.001px tai 8.999px, Chrome laskee sijainnin uudestaan ja elementti siirtyy oikeaan kohtaan, kun taas arvolla 9px Chrome ilmeisesti jättää uuden sijainnin laskematta, koska jostain syystä se ei rekisteröi, että on tapahtunut muutos.

Hauskasti bugin ilmeneminen vaatii, että alareunasta häviää saman verran reunaa, kuin yläreunaan lisätään. Jos elementin korkeus muuttuu, sisältö sijoitellaan uudestaan.

Tein bugista mallikoodin. Jonkun pitäisi varmaan lähettää aiheesta bugiraportti.

<!DOCTYPE html>
<style>
#top, #a, #b {
	border: 1px solid black;
	position: absolute;
	width: 3em;
	height: 3em;
}
#a, #b {
	top: 1px;
}
#a {
	left: 4em;
}
#b {
	left: 8em;
}

#top:not(:hover) {
	border-bottom-width: 16px;
}
#top:hover {
	border-top-width: 16px;
}

/* When border changes (above), #a fails to move but #b moves correctly. */
#top:hover #a {
	top: 1px;
}
#top:hover #b {
	top: 1.000001px;
}
</style>
<div id="top"><div id="a">A</div><div id="b">B</div></div>

HTML5 [21.11.2013 20:54:16]

#

Itse asiassa bugi kävi minullakin mielessä, mutta en ollut uskoa, sillä sama ongelma toistuu Chromen lisäksi myös Internet Explorerilla ja Firefoxilla.

Metabolix [21.11.2013 21:24:06]

#

HTML5 kirjoitti:

Itse asiassa bugi kävi minullakin mielessä, mutta en ollut uskoa, sillä sama ongelma toistuu Chromen lisäksi myös Internet Explorerilla ja Firefoxilla.

Ei toistu Firefoxilla ainakaan minulla. Jos toistuisi, en tuota bugia kovin herkästi ehdottaisikaan.

Testaapa vielä esimerkkikoodiani esim. tästä. Odotettu tulos on, että A ja B liikkuvat samalla tavalla, ja näin tapahtuukin minulla mm. Firefoxilla ja Operalla. Sen sijaan Chromiumilla A ei liiku mutta B liikkuu.

Toki jos tarkoitat ”ongelmalla” sitä itse aiheuttamaasi vikaa, että top-arvo vaihtuu 9px:stä 12px:ään, se on ihan oma virheesi. Kuten äsken selitin, top-arvoa ei pidä muuttaa vaan sen pitää olla koko ajan 9px.

Yhdyn Lebe80:n näkemykseen, että absoluuttinen asettelu ylipäänsä on väärä ajatus. Kuva voi aivan hyvin olla tekstin seassa (inline-block), ja asetteluun riittävät margin, line-height ja vertical-align vähän tilanteesta riippuen.

Merri [21.11.2013 21:35:31]

#

Bugi on WebKit-pohjaisissa selaimissa. IE:t, Firefox ja Opera 12.15 (Presto) toimii OK. Nykyiset Operat, Chrome ja tässä kohtaa jo ikivanha Safari 5.1.7 bugittaa.

Tässä tosiaan se parempi ratkaisu:

a.login .fa {
	display: inline-block;
	font-size: 18px;
	line-height: 1;
	margin-right: 5px;
	vertical-align: middle;
}

Muuttamalla line-heightia pystyy säätämään pystysuuntaista asemointia varsin hyvin.

Yucca [21.11.2013 22:25:07]

#

HTML5 kirjoitti:

Kyseessä on siis linkki, joka on tehty painikkeen näköiseksi ja sen sisällä on kuvakefonttikuvake.
– –
Mitä siis teen väärin?

Teet väärin sen, että yrität tehdä linkistä painikkeen näköisen. Se on rikkoo käytettävyyden ja esteettömyyden. Sivuvaikutuksena saatat sitten saada selainten bugeja silmillesi.

Kirjautuminen on operaatio, joka sopii tehdä painikkeella. Linkki ilmaisee relaation, painike toiminnan.

On noin ziljoona tapaa tehdä painikkeesta halutunlainen. Yksi simppeli tapa on input type=image.

Merri [21.11.2013 22:55:59]

#

Höpöhöpö. Se miltä se näyttää ei ole mitään väliä käytettävyyden saati esteettömyyden kannalta. CSS:n koko pointtihan on irroittaa rakenne ja ulkoasu toisistaan. Jos rakenne on kunnossa, niin ei se ainakaan esteettömyyttä haittaa. Käytettävyys taas... no, se on nappula/linkki. Sitä klikataan. Sillä ei vielä yksinään ole mitään väliä, millä tavalla kirjautumiseen päädytään.

Esteettömyys tulee vastaan vasta sitten, mikäli uusi avautuva sisältö ei olekaan saavutettavissa muutoin kuin visuaalisesti. Eli karkea esimerkki voisi olla vaikka se, että haetaan kirjautumislomake AJAXilla, mutta fokus jää nappulaan ja uusi sisältö on ainoastaan nähtävissä, mutta esim. puhesyntikka ei pääse kertomaan siitä kun se fokus on edelleen nappulassa eikä mikään muukaan informoi selainta kertomaan uudesta olennaisesta rakenteesta.

Käytettävyysongelma voi taas tulla vaikka siitä, että näppikselläkään ei pääse hyppäämään siihen lomakkeeseen vaan on pakko klikata hiirellä. Tai siitä, että lomake on liian iso mahtuakseen puhelimeen näkyville ja skrollaaminen on estetty.

Metabolix [21.11.2013 22:57:03]

#

Yucca kirjoitti:

Teet väärin sen, että yrität tehdä linkistä painikkeen näköisen. – – Sivuvaikutuksena saatat sitten saada selainten bugeja silmillesi.

On totta, että painike on viisainta tehdä painikkeena eikä linkkinä. Tällä ei ole silti mitään tekemistä kysyjän ongelman kanssa: täsmälleen sama bugi ilmenee, vaikka a-elementin vaihtaisi button-elementiksi.

Yucca kirjoitti:

On noin ziljoona tapaa tehdä painikkeesta halutunlainen. Yksi simppeli tapa on input type=image.

Näytäpä sitten sellainen input type=image, joka toimii hyvin eri selaimilla, skaalautuu nätisti, ei vaadi erillistä kuvaa sivuston jokaista painiketta varten (pahimmillaan vielä kymmeniä kieliversioita), ei kaipaa kuvan muuttamista sivuston muiden tyylien muuttuessa ja vieläpä vaihtaa kuvaa painettaessa.

HTML5 [22.11.2013 00:11:21]

#

Olin näköjään unohtanut ottaa pois top-ominaisuuden ko. linkin :active-luokasta, mistä virhetulkintani johtui.

Eikös tuon virheen pitäisi toistua Operalla (15+), kun sekin on WebKit-pohjainen? (En siis ole kokeillut vielä sillä.)

Jos ”painike” vie erilliselle kirjautumissivulle, eikö ole juuri käytännöllistä toteuttaa se linkillä ja tyylitellä sitten CSS:llä muistuttamaan painiketta?

Metabolix [22.11.2013 00:27:01]

#

HTML5 kirjoitti:

Eikös tuon virheen pitäisi toistua Operalla (15+), kun sekin on WebKit-pohjainen?

Niin, no toistaiseksi Linuxiin ei tietääkseni ole saatavilla Operasta tuollaista versiota, vaan eletään yhä Presto-pohjaisella versiolla 12.16.

HTML5 kirjoitti:

Jos linkki vie erilliselle kirjautumissivulle, eikö juuri loogisin tapa toteuttaa ”painike” ole linkin käyttö ja tyylittely CSS:llä muistuttamaan painiketta?

Kyllä linkki on silloin oikea. Yucca ehkä luuli, että kyseessä olisi jo varsinaisen kirjautumislomakkeen painike.

Yucca [22.11.2013 22:33:02]

#

HTML5 kirjoitti:

Olin näköjään unohtanut ottaa pois top-ominaisuuden ko. linkin :active-luokasta, mistä virhetulkintani johtui.

Ylipäänsä koko idea on liian kikkaileva. Miksi ihmeessä absoluuttinen asemointi?

lainaus:

Jos ”painike” vie erilliselle kirjautumissivulle, eikö ole juuri käytännöllistä toteuttaa se linkillä ja tyylitellä sitten CSS:llä muistuttamaan painiketta?

Jos ”painike” ”vie” sivulle, niin ”painike” on linkki ja sen pitäisi normaalisti näyttääkin linkiltä. Jos se taas on sovellustyyppisen sivun ”linkki”, joka ei oikeasti ole linkki, vaan vaihtaa sivun sisältöä, niin sitten sen pitäisi olla painike ja näyttää painikkeelta.

Ihan aluksi siis kannattaisi varmistua siitä, että on ratkaisemassa oikeaa ongelmaa. Ja ylipäänsä ratkaisemassa eikä luomassa ongelmia.

groovyb [23.11.2013 10:52:49]

#

Viimeisimpien tietojen mukaan, designeri voi käyttää joko linkkejä tai nappuloita, tyylittää ne oman halunsa mukaan ja sen ei pitäisi vaivata ketään.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta