Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Kuvien keskikohdan näyttäminen neliönä css vai php?

Sivun loppuun

creepy [14.04.2012 14:25:16]

#

Olisi tarkoitus siistiä ulkoasua, nyt kuvat tulevat sellaisenaan max-height ja max-width rajoitettuna..

Miten saisin kuvista tasasivuiset neliöt kuvan keskeltä. Eli näitä laajakuva kuvia pitäisi saada saman kokoiseksi riippumatta onko kuvattu vaakaan tai pystyyn.

Ymmärtääköhän kukaan, hankala selittää, mutta hakusessa siis kuvien näyttäminen neliönä ilman että niitä pitää venytellä?

Onnistuuko tämä css:llä? ei haluttaisi tallentaa ylimääräisiä thumppeja palvelimelle.

Metabolix [14.04.2012 14:40:45]

#

Selityksestäsi jäi vähän epäselväksi, haluatko nyt siis otsikon mukaisesti kuvasta tietyn kokoisen alueen niin, että reunat leikataan pois, vai haluatko näyttää koko kuvan tietyn kokoisessa kehyksessä niin, että kuva on skaalattu kehykseen sopivaksi oikeassa kuvasuhteessa eli ilman näkyvää venymistä.

Jos haluat kaikista kuvista tietynlaisen alueen ilman skaalausta, voit tehdä vaikka näin:

div.kuva {
	overflow: hidden;
	position: relative;
	max-width: 400px;
	max-height: 400px;
}
<!-- Kuva niin, että näkyy 400x400 pikseliä vasemmasta yläkulmasta: -->
<div class="kuva"><img src="kuva.png" alt="" /></div>

<!-- Kuva niin, että yläreunasta leikkautuu 40 pikseliä: -->
<div class="kuva"><img src="kuva.png" alt="" style="top: -40px;" /></div>

Jos haluat alueen aina keskeltä etkä tiedä ennalta kuvien mittoja, voit laittaa kuvat divien taustakuviksi ja määrätä, että tausta on divissä keskitettynä.

ErroR++ [14.04.2012 14:43:12]

#

Eiköhän tuo onnistu molemmilla. PHP:llä nappaat (jos mahdollista) näytön korkeuden ja leveyden ja lasket jonkun koon kuvalle, jossa on kuitenkin sama kuvasuhde kuin alkuperäisessä kuvassa. Sitten CSS:llä asetat kuvalle oikean koon.

EDIT: Metabolix ehtikin ensin.

punppis [16.04.2012 03:33:10]

#

Jos liikenne ei ole suurta, niin toki voit luoda aina lennosta nuo thumbnailit viakkapa phpthumbilla. Pienellä liikennemäärällä skriptin hitaus ei luulisi olevan ongelma. Eipähän tarvitse tallentaa erikseen thumbbeja.

pevm [16.04.2012 14:31:30]

#

Yksi vaihtoehto on tietysti että laitat kuvan vaikka diviin taustaksi.
Taustakuvan saa CSS:lla helposti keskelle diviä ilman sen kummempaa kikkailua.

qeijo [16.04.2012 15:25:53]

#

creepy kirjoitti:

Miten saisin kuvista tasasivuiset neliöt kuvan keskeltä. Eli näitä laajakuva kuvia pitäisi saada saman kokoiseksi riippumatta onko kuvattu vaakaan tai pystyyn.

Metabolix kirjoitti:

div.kuva {
	overflow: hidden;
	position: relative;
	max-width: 400px;
	max-height: 400px;
}

Metabolixin vastaus ei täytä näitä vaatimuksia. Alla täyttävä, toki jQuery:llä.

div {
    width: 400px;
	height: 400px;
    overflow: hidden;
}
 /* 400 x 400 */

$(document).ready(function() {

    $(".kuva").each(function() {

        if($(this).width() >= $(this).height()) {

            var leveys =  $(this).width() * (400/$(this).height());

            $(this).css("height", "400px");
            $(this).css("width", leveys + "px");

            var keskitys = ($(this).width()/2) - 200;
            $(this).css("margin-left", -keskitys + "px");
        }
        else {

            var korkeus =  $(this).height() * (400/$(this).width());

            $(this).css("width", "400px");
            $(this).css("height", korkeus + "px");

            var keskitys = ($(this).height()/2) - 200;
            $(this).css("margin-top", -keskitys + "px");
        }
    });
});
<div>
    <img class="kuva" src="Kuva.jpg" />
</div>

Merri [16.04.2012 20:03:13]

#

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8" />
		<title>Kuvia</title>
		<style type="text/css">

ul {
	background: #CCC;
	display: block;
	list-style: none;
	margin: 0;
	padding: 10px;
	text-align: center;
}

li {
	background: #555;
	border: 2px solid #AAA;
	display: inline-block;
	height: 200px;
	line-height: 195px;
	margin: 5px;
	padding: 0;
	text-align: center;
	vertical-align: middle;
	width: 200px;
}

li img {
	border: 0;
	max-height: 200px;
	max-width: 200px;
	margin: 0;
	padding: 0;
	vertical-align: middle;
}

		</style>
	</head>
	<body>
		<ul>
			<li><img alt="" src="pienikuva1.jpg" /></li>
			<li><img alt="" src="pienikuva2.jpg" /></li>
			<li><img alt="" src="pienikuva3.jpg" /></li>
			<li><img alt="" src="pienikuva4.jpg" /></li>
			<li><img alt="" src="pienikuva5.jpg" /></li>
		</ul>
	</body>
</html>

Näe se omin silmin


En nyt heti hoksannut/muistanut, miksi line-height arvolla 200px heittää kuvat liian alas, noukkimalla 5px pois siitä niin keskitys tapahtuu just keskelle.


Muoks!
Linkin takana olevaa esimerkkiä on päivitetty eeppisemmäksi. Hiiri päälle ja kuva zoomaa sisään ja pysyy siitä huolimatta keskitettynä.

jukkah [16.04.2012 20:25:45]

#

Merri: Tosi hieno!

Merri [16.04.2012 20:30:41]

#

Nyt se myös animoituu käyttäen CSS3:n transformia :)

Muoks!
Tykkään uudesta CSS:stä. Pari riviä koodia ja tulee hienoja efektejä. Firefox renderöi tämän esimerkin parhaiten/sujuvimmin.

dartvaneri [16.04.2012 21:11:23]

#

Yks huono puoli on tuossa CSS3:n efekteissä, sillä kaikki selaimet eivät tahdo tukea kaikkia, etenkin ie.

Merri [16.04.2012 21:19:55]

#

IE:n käyttäjä ei huomaa minkään puuttuvan ennen kuin kokeilee lopputulosta jollakin toisella selaimella :)


Toisaalta ensisijainen tarkoitukseni oli osoittaa, että JavaScriptiä ei tarvita. Samalla vaan innostuin kokeilemaan näitä uusia juttuja. Yllätyin siitä, miten helppoa noiden käyttö oli.

Macro [16.04.2012 21:20:39]

#

Mulla toimii tabletillakin. Ehkä IE 15 vois jo tukee sitä.

jukkah [16.04.2012 21:36:40]

#

Merri kirjoitti:

Firefox renderöi tämän esimerkin parhaiten/sujuvimmin.

En huomaa mitään eroa Firefoxin ja Chromen välillä. Joku pieni eroavaisuus z-indexin toteutuksessa saattaa olla, mutta se menisi jo pilkun viilaamiseksi. :)

Edit. Tuo hitaampi 0.8s animaatio on minun silmään parempi. :P

Merri [16.04.2012 21:41:44]

#

Chrome ei tuossa ensimmäisessä esimerkissä osannut ottaa pyöreitä reunoja huomioon overflow: hidden; -asetuksella. Toisessa esimerkissä tätä ei ole, jolloin oikeastaan ainoaksi selväksi eroksi jää z-index ja se, että Chrome vilkkuttaa ainakin minun koneellani enemmän. Safarilla ja Operalla on molemmilla heikompi renderöinti kuin Chromella, Opera näistä selvästi heikoin. Mutta nämä nyt on aika pieniä asioita kun pääasia silti sujuu. Ainutkaan selain ei kaadu näiden takia, mikä on huomattava edistys kymmenen vuoden takaiseen verrattuna! :D

dartvaneri [16.04.2012 21:52:35]

#

Kiva :)

Macro kirjoitti:

Ehkä IE 15 vois jo tukee sitä.

Toivottavasti Microsoft on siihen mennessä huomannut, että miten käteviä ne on :P

jukkah [16.04.2012 22:45:44]

#

dartvaneri kirjoitti:

Toivottavasti Microsoft on siihen mennessä huomannut, että miten käteviä ne on :P

Ellen väärin muista, Microsoft tukee W3C:tä monin tavoin. Vähän kärjistettynä, IE ei tue talon omia standardeja! :D

creepy [17.04.2012 18:56:40]

#

Merri kirjoitti:

Näe se omin silmin – –

Tämä on hieno!!


Sivun alkuun

Vastaus

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

Tietoa sivustosta