Como se ha mencionado por los comentaristas, un sprite CSS es el correcto solución aquí. Afortunadamente, there are many CSS sprites of flags freely available. This one se ve bastante bien.
Tendremos que ajustar el código desplegable para acomodar ese sprite CSS prefabricado. He seguido adelante y he hecho eso por ti. Here's a live demo.
languageswitcher.js
@@ -44,10 +44,11 @@
source.removeAttr("autocomplete");
var selected = source.find("option:selected");
var options = $("option", source);
- $("#country-select").append('<dl id="target" class="dropdown"></dl>')
- $("#target").append('<dt class="' + selected.val() + '"><a href="#"><span class="flag"></span><em>' + selected.text() + '</em></a></dt>')
- $("#target").append('<dd><ul></ul></dd>')
+ $("#country-select").append('<dl id="target" class="dropdown f16"></dl>')
+ $("#target").append('<dt><a href="#"><em class="flag ' + selected.val().toLowerCase() + '">' + selected.text() + '</em></a></dt>');
+ $("#target").append('<dd><ul></ul></dd>');
+ var $drop = $("#target dd ul");
options.each(function(){
- $("#target dd ul").append('<li class="' + $(this).val() + '"><a href="' + $(this).attr("title") + '"><span class="flag"></span><em>' + $(this).text() + '</em></a></li>');
+ $drop.append('<li><a href="' + $(this).attr("title") + '"><em class="flag ' + $(this).val().toLowerCase() + '">' + $(this).text() + '</em></a></li>');
});
}
languageswitcher.css
@@ -45,6 +45,8 @@
.dropdown dd { position: relative; }
+.dropdown ul { max-height:350px; overflow-y:auto; overflow-x:hidden; }
+
.dropdown a {
text-decoration: none;
outline: 0;
@@ -52,6 +54,7 @@
display: block;
width: 130px;
overflow: hidden;
+ white-space:nowrap;
}
.dropdown dt a {
@@ -107,23 +110,6 @@
padding: 2px 10px;
}
- .dropdown dd ul li a span,
- .dropdown dt a span {
- float: left;
- width: 16px;
- height: 11px;
- margin: 2px 6px 0 0;
- background-image: url(flags.png);
- background-repeat: no-repeat;
- cursor: pointer;
- }
-
- .us a span { background-position: 0 0 }
- .uk a span { background-position: -16px 0 }
- .fr a span { background-position: -32px 0 }
- .de a span { background-position: -48px 0 }
- .nl a span { background-position: -64px 0 }
-
.dropdown dd ul li a em,
.dropdown dt a em {
font-style: normal;
@@ -138,3 +124,5 @@
.dropdown dd ul li a:hover { background-color: rgba(255,255,255,.1); }
.dropdown dd ul li a:hover em { color: #fff; }
+
+.flag { padding-left:18px; }
Los cambios de estilo CSS que hice fueron Q & hacks D; es probable que desee pasar un tiempo puliéndolos. Eliminé todas las cosas específicas de la bandera de languageswitcher.css ya que estamos usando flag16.css.
Además, si el código de país no existe en el sprite de CSS, la bandera mostrada será la bandera de la Unión Africana http://www.veryicon.com/icon/16/Flag/Country%20Flags/African%20Union%20Flag.png por defecto, ya que es la primera imagen en el sprite. En la demostración, varios de los países en mi lista de ejemplos no tienen una imagen de sprite. Ten cuidado con eso.
¿lo googleaste? o probar algo primero? no vamos a hacer todo el trabajo por ti :-p – Neal
Ver [Escribir la pregunta perfecta] (http://msmvps.com/blogs/jon_skeet/archive/2010/08/29/writing-the-perfect-question .aspx) – gideon
¿Quizás intente descargar todas las banderas y usar un convertidor de imágenes por lotes para reducir su tamaño? – Pepe