modal

Mattepuffo's logo
Centrare verticalmente un modal in Twitter Bootstrap 3

Centrare verticalmente un modal in Twitter Bootstrap 3

Le finestre modali sono molto utilizzate, in quanto sostituiscono bene i pop-up, e generalmente hanno un aspetto migliori dei classici alert.

Anche Twitter Bootstrap ha questo componente, ed è anche molto facile da usare.

Di default, però, si centra solo orizzontalmente, partendo dalla parte alta dello schermo.

Cosa che va bene nel caso di testi lunghi; ma potrebbe non essere carino nel caso di scritte molto brevi, come ad esempio modal per il loading.

Mattepuffo's logo
Google Maps dentro finestra modale

Google Maps dentro finestra modale

A volte è più comodo mettere Goole Maps dentro una finestra modale, soprattutto quando in una stessa pagina ci stanno diverse mappe.

Di come usare GMaps con Javascript ne ho parlato in questo articolo.

Partiamo da li con qualche modifica.

Preparate una pagina php (o in altro linguaggio lato server; ci serve per raccogliare i parametri passati in GET dalla pagina principale):

<!DOCTYPE html>
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<style type="text/css">
#tooltip {
color: black;
font-family: Arial;
}

#tooltip a {
color: blue;
text-decoration: underline;
}
</style>
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=true&language=it"></script>
<script type="text/javascript" src="gmap.js"></script>
</head>
<body onload="maps(, );"> // PURTROPPO NON SI LEGGE CHE C'E DENTRO ALLE PARENTESI
<div id="map_canvas" style="width: 590px; height: 590px;"></div>
</body>
</html>

Purtroppo non si vede che c'è dentro maps(); in pratica dovete fare echo delle due variabili passate in GET (echo $_GET['lat'], echo $_GET['lng']).

Ho messo un evento onload dentro al body in modo da caricare la pagine con latitudine e longitudine che gli passeremo dalla pagina principale.

Così facendo possiamo usare sempre lo stesso file senza crearne uno per ogni mappa.

Il file map.js sarà una cosa del genere:

function maps(lat, lng) {
var latlng = new google.maps.LatLng(lat, lng);
var myOptions = {
zoom: 13,
center: latlng,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
var marker = new google.maps.Marker({
position: latlng,
map: map
});
var tooltip = '<div id="tooltip">'+
'<a href="http://maps.google.it/maps?q="'+lat+','+lng+'" target="_blank">Indicazioni stradali</a>' +
'</div>';
var infowindow = new google.maps.InfoWindow({
content: tooltip
});
google.maps.event.addListener(marker, 'click', function() {
infowindow.open(map,marker);
});
}

Come vedete adesso latitudine e longitudine sono parametrizzati.

A questo punto dobbiamo creare la pagina che richiamerà la finestra modale con la roba sopra caricata al suo interno.

Per la finestra modale ho scelto di usare il plugin per jQuery Thickbox.

Potete scaricare il tutto da qua.

Mattepuffo's logo
Una semplice finestra modale con jQuery

Una semplice finestra modale con jQuery

Le finestre modali sono usate in più ambiti.

Questo perchè al suo interno è possibile mettere quello che vogliamo:

  • avvisi
  • form
  • Google Maps
  • .....

Se avete jQuery UI potete sfruttare la sua libreria, altrimenti è possibile ottenere lo stesso effetto in altre maniere.

Useremo jQuery e un pò di CSS.

Cominciamo dalla pagina HTML.

Dopo aver incluso jQuery:

<div id="boxes">

  <div id="dialog" class="window">

    <a href="#" class="close">Close it</a><br/><br/>

    VOSTRO CONTENUTO

  </div>

  <div id="mask"></div>
</div>

Un semplice div dove all'interno abbiamo un link per chiudere la finestra, il contenuto che vi serve e il div mask che serve per riempire la finestra.

Il CSS sarà una cosa del genere:

#mask {
position:absolute;
left:0;
top:0;
z-index:9000;
background-color:#000;
display:none;
}

#boxes #dialog {
width:700px;
height:700px;
padding:10px;
background-color:#ffffff;
}

#boxes .window {
position:fixed;
left:0;
top:0;
width:100%;
height:100%;
display:none;
z-index:9999;
padding:20px;
}

Nulla di particolare.