Szerokość CSS tagu <span>

82

Używam <span>tagów w tytułach moich modułów, np

<span>Categories</span>.

Określam kolor / obraz tła przęsła, szerokość i wysokość w css.

Ale szerokość przęsła zależy od jego zawartości / tekstu.

Więc jeśli to zrobię <span></span>, tylko z obrazem / kolorem tła w css, nic się nie pojawi.

Oczywiście chcę, żeby coś się pojawiło.

Jak mogę to rozwiązać?

mars-o
źródło
4
Chciałbym tylko zaznaczyć, że nie jest to zbyt dobre wykorzystanie rozpiętości. Ma na celu oznaczanie krótkich zakresów treści w większej całości, więc celowo nie jest domyślnie elementem blokowym. W przypadku tytułów najlepszy byłby jeden z tagów h #. Jeśli to się nie powiedzie, div jest zwykle lepszy niż span.
Chuck,
dzięki za odpowiedzi ..: D Uważam, że to głupie pytanie. lol .. już wiele lat temu. =))
mars-o

Odpowiedzi:

115

Możesz jawnie ustawić właściwość display na „block”, aby zachowywała się jak element na poziomie bloku, ale w takim przypadku prawdopodobnie powinieneś po prostu użyć zamiast tego elementu div.

<span style="display:block; background-color:red; width:100px;"></span>
Chris Fulstow
źródło
dzięki, rozumiem. dzieje się tak, ponieważ span jest wbudowany. Teraz widzę różnicę w zakładzie. wyświetlacze inline & block. tak, div jest odpowiedni.:
D .. dzięki
4
Użycie DIV w akapitach, nagłówkach (h1, h2 itd.) Zepsuje walidację, jeśli ci na tym zależy. Innym możliwym rozwiązaniem jest użycie span, display: block; and float: left; :)
Arve Systad
dzięki, a odpowiedź poniżej była krytyczna, aby szerokość działała
Satchel
3
lepiej użyć inline-blockzamiastblock
Eugen Konkov
125

spans jest domyślnie stylem wbudowanym, którego szerokości nie można określić.

display: inline-block;

byłby to dobry sposób, chyba że IE go nie obsługuje

możesz jednak zhakować rozwiązanie obsługujące wiele przeglądarek

cobbal
źródło
2
Uważam, że IE obsługuje inline-block od co najmniej wersji 6. Myślę, że obsługuje on tylko inline-block, jeśli element, do którego został zastosowany, jest naturalnie inline (którym jest <span>).
Ken Browning,
3
Tak, IE obsługuje blokowanie inline. Jego obsługa jest nieco inna, ale w tym przypadku zadziała.
thomasrutter
Niesamowite! Zaczynam rozumieć prawdziwe różnice w wyświetlaniu:
Dean Meehan
6

Nie można określić szerokości elementu z wbudowanym wyświetlaczem. Możesz umieścić w nim coś, na przykład nierozdzielającą spację (), a następnie ustawić dopełnienie, aby nadać mu większą szerokość, ale nie możesz tego bezpośrednio kontrolować.

Możesz użyć display inline-block, ale nie jest to szeroko obsługiwane.

Prawdziwym hackem byłoby umieszczenie obrazu w środku, a następnie ustawienie jego szerokości. Coś w rodzaju przezroczystego 1 piksela GIF. Nie jest to jednak zalecane podejście.

cletus
źródło
3

Użyłbym paddingatrybutu. Umożliwi to dodanie określonej liczby pikseli po obu stronach elementu bez utraty właściwości rozpiętości elementu:

  • Nie stanie się blokiem
  • Będzie unosić się zgodnie z oczekiwaniami

Ta metoda spowoduje jednak tylko dodanie dopełnienia, więc jeśli zmienisz długość treści (na przykład z kategorii na tagi), rozmiar treści się zmieni, a także zmieni się ogólny rozmiar elementu. Ale jeśli naprawdę chcesz ustawić sztywny rozmiar, powinieneś zrobić jak wspomniano powyżej i użyć div.

Zobacz model pudełka, aby uzyskać więcej informacji na temat modelu pudełka, zawartości, dopełnienia, marginesów itp.

Kelly Hays
źródło
3

Podobnie jak w innych odpowiedziach, zacznij atrybuty zakresu od tego:

display:inline-block;  

Teraz możesz użyć dopełnienia większego niż szerokość:

padding-left:6%;
padding-right:6%;

Kiedy używasz dopełnienia, twój kolor rozszerza się w obie strony (prawą i lewą), a nie tylko w prawo (jak w przypadku szerokości).

Nohy bez hranic
źródło
2

Użyj atrybutu „display”, jak w przykładzie:

<span style="background: gray; width: 100px; display:block;">hello</span>
<span style="background: gray; width: 200px; display:block;">world</span>
Antonio
źródło
1

Po ustaleniu wysokości i szerokości powinieneś powiedzieć, jak zachować się, jeśli tekst w środku wykroczy poza swój obszar. Więc dodaj css

przepełnienie: auto;

user2130923
źródło