2010-05-17 28 views
4

Je suis en train de créer l'effet de colonnes dans un menu déroulant par un texte de remplissage des espaces, comme dans cet exemple:Honneur Whitespace rembourrage pour afficher les colonnes de largeur fixe <select>

<select style="font-family: courier;"> 
<option value="1">[Aux1+1] [*] [Aux1+1]    [@Tn=PP] </option> 
<option value="2">[Main] [*] [Main Apples Oranges] [@Fu=$p] </option> 
<option value="3">[Main] [*] [Next NP]    [@Fu=n] </option> 
<option value="4">[Main] [Dr] [Main]    [@Ty=$p] </option> 
</select> 

Selon cette blog, il est possible.

Le problème est que les espaces sont contractés de sorte que les colonnes ne s'alignent pas. SAme résultats dans FF, IE6 et Chrome.

Qu'est-ce qui me manque?

Répondre

7

Vous devez utiliser &nbsp; au lieu des espaces normaux.

Par exemple, vous faire avec votre option:

<option value="2">[Main]&nbsp;&nbsp;&nbsp;[*]&nbsp;&nbsp;[Main Apples Oranges]&nbsp;[@Fu=$p] </option> 
+0

Bien sûr. Comment pourrais-je avoir raté ça? Les règles HTML universelles s'appliquent. – Laramie

+0

Je chargeais en fait la liste déroulante dans le codebehind d'une page ASP.Net, et il y a un truc pour rendre le   correctement. Code ci-dessous. – Laramie

1

espace blanc en HTML est contracté par défaut. Utilisez CSS pour sélectionner une police à espacement fixe (comme dans l'exemple que vous liez à) et stylisez l'espace blanc comme préformaté.

option { 
    font-family: monospace; 
    white-space: pre; 
} 
+0

Est-ce que cela fonctionne avec les options Select? Je l'ai essayé dans Firefox 3 et IE7 et il ne semble pas. – patmortech

+0

Dangnabbit, on dirait que tu as raison. Utiliser des espaces insécables semble fonctionner (' '), donc vous pouvez utiliser la suggestion de @ patmortech. –

2

L'expansion de la réponse par patmortech pour rendre une ListItem en asp.net avec &nbsp; au lieu de &amp;nbsp;

//Pad the columns 
string spaceDecode = Server.HtmlDecode("&nbsp;"); 
for (int i = 0; i < ddl.Items.Count; i++) 
{ 
    ListItem item = ddl.Items[i]; 
    item.Text = item .Text.Replace(" ", spaceDecode); 
}