Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował sowiq 22.12.2008, 12:32:33
Go to the top of the page
+Quote Post
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ą (IMG:http://forum.php.pl/style_emoticons/default/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 (IMG:http://forum.php.pl/style_emoticons/default/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
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 15.09.2025 - 03:52