带有标志的Html国家列表

时间:2011-03-23 18:18:02

标签: javascript html country

我正在寻找一种方法来选择和显示国家/地区列表,最好是带有标记。有什么建议吗?

我开始尝试使用这个jQuery插件http://www.graphicpush.com/website-language-dropdown-with-jquery,但由于我所拥有的国家/地区列表相当大,因此结果表明性能非常差(对图像的http请求太多)。当大于50个元素时,列表也很笨重。

5 个答案:

答案 0 :(得分:32)

只是想建议一种(imho)更聪明的做标志精灵的方式。

这个想法是根据国家iso2代码将标志保存在网格中。

第一封信 - >垂直位置
第二个字母 - >横向位置

示例(对于16x11px标记+ 4x4px间距):

Austria = AT
A = 1   => vertically 1st row       => y = (1-1)*(11+4)  = 0
T = 20  => horizontally 20th column => x = (20-1)*(16+4) = 380

United States = US
U = 21  => vertically 21st row      => y = (21-1)*(11+4) = 300
S = 19  => horizontally 19th column => x = (19-1)*(16+4) = 360

通过这种方式,我可以在客户端使用非常简单的函数计算标记位置,而无需200多个额外的样式定义。

示例jQuery插件:

(function($) {
    // size = flag size + spacing
    var default_size = {
        w: 20,
        h: 15
    };

    function calcPos(letter, size) {
        return -(letter.toLowerCase().charCodeAt(0) - 97) * size;
    }

    $.fn.setFlagPosition = function(iso, size) {
        size || (size = default_size);

        return $(this).css('background-position',
            [calcPos(iso[1], size.w), 'px ', calcPos(iso[0], size.h), 'px'].join(''));
    };
})(jQuery);

演示用法:

$('.country i').setFlagPosition('es');

http://jsfiddle.net/roberkules/TxAhb/

这是我的国旗精灵:

enter image description here

答案 1 :(得分:30)

  

未来的注意事项:jQuery UI自动完成现在支持自定义   默认情况下渲染,请参阅   http://api.jqueryui.com/autocomplete/#method-_renderItem

这很简单。你需要的东西:

  1. jQuery UI auto-complete
  2. UI auto-complete html extension
  3. A list of country names/codes
  4. A CSS sprite with all flags
  5. 请记住,Google是您的朋友。混合好的成分,仔细搅拌一些javascript,并完成 - 在7行代码中:

    var countries = [["Argentina", "ar"], ...];
    
    var countryNames = countries.map(function(country){
      return {
          label: '<div class="flag '+country[1].toLowerCase()+'">'+country[0]+'</div>',
          value: country[0]
      }
    });
    
    $('#country').autocomplete({
      source: countryNames,
      html: true
    });
    

    Here's this code in action

答案 2 :(得分:1)

正如评论者所提到的,CSS精灵是适当的解决方案。幸运的是,there are many CSS sprites of flags freely availableThis one看起来很不错。

我们必须调整下拉代码以适应预先制作的CSS精灵。我已经为你完成了这件事。 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; }

我所做的CSS更改是Q&amp; D hacks;你可能想花一些时间来抛光它们。我从languageswitcher.css中删除了所有特定于标志的内容,因为我们正在使用flag16.css

此外,如果CSS精灵中不存在国家/地区代码,则显示的标志将默认为http://www.veryicon.com/icon/16/Flag/Country%20Flags/African%20Union%20Flag.png非洲联盟的标志,因为它是精灵中的第一个图像。在演示中,我的示例列表中的几个国家/地区没有精灵图像。请注意这一点。

答案 3 :(得分:0)

这是一个包含国家/地区列表的文件以及指向其标志的链接(某些链接可能不起作用,但大部分都是) Excel File

答案 4 :(得分:0)

您还可以使用http://www.famfamfam.com/lab/icons/flags/中的标记,只需使用CSS来定位相应的标记。

---- ---- EDITED

如果我需要显示我的国家的旗帜,那么我会从CSS映射

<span class='np'></span>

.np {
background: url(./flags_preview_large.png) -172px -397px no-repeat;
width: 14px;
height: 20px;
}