Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [solved] :hover -> bold i poziome menu, czyli jak zapobiec rozszerzaniu elementu po najechaniu
sowiq
post
Post #1





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Witam,
pytanie może wydawać się głupie, zwłaszcza jeśli pochodzi od kogoś zajmującego się tematem od jakiegoś czasu, ale kto pyta, nie błądzi.

Mam proste menu:
  1. <ul class="menu">
  2. <li><a href="#">menu 1</a></li>
  3. <li><a href="#">menu 2</a></li>
  4. <li><a href="#">menu 3</a></li>
  5. <li><a href="#">menu 4</a></li>
  6. </ul>

i CSS:
  1. ul.menu{
  2. list-style-type: none;
  3. padding: 0;
  4. margin: 0;
  5. }
  6. ul.menu li{
  7. display: block;
  8. float: left;
  9. padding: 3px;
  10. }
  11. ul.menu li a{ font-weight: normal; }
  12. ul.menu li a:hover{ font-weight: bold; }

Czyli ni mniej, ni więcej, tylko menu w układzie poziomym.

Moje pytanie brzmi: co muszę zrobić, żeby menu nie rozszerzało się po najechaniu kursorem na jakiś element? Chodzi o to, że jeśli link zostanie pogrubiony, to zmienia swoją szerokość 'rozpychając' na boki swojego rodzica, a ten sąsiednie elementy.

Od razu powiem, że nie mogę nadać elementom stałej/min/max szerokości, bo nie wiem co w nich będzie (różne języki menu definiowane z panelu admina).

Z góry dzięki za wszelkie podpowiedzi smile.gif

Ten post edytował sowiq 22.12.2008, 12:32:33
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
piotrooo89
post
Post #2


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




ja bym próbował nadawać paddingi i/lub magriny...


--------------------
Go to the top of the page
+Quote Post
sowiq
post
Post #3





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


No ok, ale paddingi i marginy zostają takie same po najechaniu kursorem. Zmienia się tylko szerokość czcionki i 'rozpycha' element na szerokości. Trzeba by zmniejszyć paddingi poziome po najechaniu, ale o ile, skoro treść linków może mieć różną długość (czyli różne 'wydłużenia')?
Go to the top of the page
+Quote Post
piotrooo89
post
Post #4


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




ustaw jednakowy padding dla elementu bez hovera i z hoverem.


--------------------
Go to the top of the page
+Quote Post
sowiq
post
Post #5





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Nie, to nie pomaga. Tak jak pisałem wyżej. Problem jest w innym miejscu. Zobacz to na poniższym przykładzie:
  1. <ul class="menu">
  2. <li><a href="#">menu 1</a></li>
  3. <li><a href="#">menu 2</a></li>
  4. <li><a href="#">menu 3</a></li>
  5. <li><a href="#">menu 4</a></li>
  6. </ul>

  1. ul.menu{
  2. list-style-type: none;
  3. padding: 0;
  4. margin: 0;
  5. }
  6. ul.menu li{
  7. display: block;
  8. float: left;
  9. padding: 3px;
  10. background-color: #f00;
  11. }
  12. ul.menu li a{
  13. display: block;
  14. font-weight: normal;
  15. padding: 5px;
  16. background-color: #0f0;
  17. }
  18. ul.menu li a:hover{
  19. display: block;
  20. font-weight: bold;
  21. padding: 5px;
  22. }


W przypływie desperacji miałem już zamiar ustawić coś w stylu 'lewego tła', tzn zrobić przezroczystą czcionkę /czcionkę w kolorze tła, wyboldowaną, która ustawi szerokość elementu, a nad nią (odpowiednia wartość position) prawdziwy link. Ale to średnio elegancki sposób...
Go to the top of the page
+Quote Post
Crozin
post
Post #6





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


jakimś tam rozwiązaniem jest dodanie w JS do zdarzenia mouseover funkcji, która ustawi elementowi szerokość równą offsetWidth - padding i do zdarzenia mouseout funkcje, która poprostu wywali właściwość width.

Użycie tutaj JS nie stworzy żadnych problemów - w przypadku jego braku co najwyżej "poskacze".
W samym CSS raczej ciężko będzie to uzyskać nie mając możliwości ustawienia stałej szerokości elementu - może jakaś zabawa z wywalaniem tekstu poza documentFlow przy :hover, ale to IMHO przerost formy nad treścią winksmiley.jpg
Go to the top of the page
+Quote Post
sowiq
post
Post #7





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


@Crozin,
masz rację, JS to chyba najlepszy sposób. Właśnie miałem wrzucić tutaj rozwiązanie, ale byłeś szybszy smile.gif

Ja to robię trochę inaczej. Za pomocą JS przechodzę przez wszystkie elementy menu, ustawiam im font-weight na bold, zapamiętuję offsetWidth, czcionkę zmieniam na normal, a jako width ustawiam zapamiętaną wartość. Dzięki temu tylko raz wykonuję JS, bez zbędnych obliczeń.

Dzięki za pomoc!
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 11:50