Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Jak przypiąć dymek z tekstem do innego elementu?
WebCM
post 20.06.2015, 22:47:55
Post #1





Grupa: Zarejestrowani
Postów: 375
Pomógł: 20
Dołączył: 28.07.2006

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


Jak zakotwiczyć dymek z tekstem do innego elementu na stronie, aby:

1. Automatycznie ustawiał się z góry, dołu, po lewej, po prawej stronie elementu
2. Nie przekraczał krawędzi ekranu ani nie zachodził na/pod element
3. Nie dziedziczył szerokości ani wysokości po elemencie

Dymek ma ustawioną szerokość maksymalną. Rozmiar powinien dostosować się do wolnej przestrzeni i ilości tekstu. Czy w czystym CSS jest to wykonalne?

Oto przykład:
  1. <!DOCTYPE html>
  2. <head>
  3. <title>Galeria</title>
  4. * {
  5. box-sizing: border-box
  6. }
  7. .sklep {
  8. position: absolute;
  9. }
  10. .hint {
  11. position: absolute;
  12. left: 0;
  13. top: 0;
  14. background-color: black;
  15. color: white;
  16. padding: 6px;
  17. max-width: 500px
  18. }
  19. .hint.z_lewej {
  20. top: 50%;
  21. transform: translate(-100%,-50%);
  22. left: -10px;
  23. }
  24. .hint.z_prawej {
  25. top: 50%;
  26. /*left: 100%;*/
  27. margin-left: 100%;
  28. margin-right: -100%;
  29. transform: translate(10px,-50%)
  30. }
  31. .hint.z_dolu {
  32. top: 100%;
  33. left: 50%;
  34. right: -50%;
  35. transform: translate(-50%,0)
  36. }
  37. </style>
  38. </head>
  39. <body>
  40. <div class="sklep" style="left: 200px; top: 100px">
  41. <img src="obraz.jpg" width="200" height="220" alt="Crapp">
  42. <div class="hint z_prawej">Ten tekst jest bardzo długi. Szerokość hintu dopasowuje się do szerokości obrazka. To efekt niepożądany. Czy istnieją inne rozwiązania problemu poza ustaleniem szerokości hintu na sztywno? Hint nie powinien także wyjeżdżać poza obszar ekranu.</div>
  43. </div>
  44. <div class="sklep" style="left: 400px; top: 400px">
  45. <img src="obraz.jpg" width="500" height="300" alt="Horse">
  46. <div class="hint z_lewej">Krótki tekst</div>
  47. </div>
  48. <div class="sklep" style="left: 300px; top: 800px">
  49. <img src="obraz.JPG" width="200" height="250" alt="Old Balance">
  50. <div class="hint z_dolu">Ten hint wyświetli się pod spodem. Nie ma nic przeciwko, aby przekroczył szerokość obrazka, ale stało się inaczej. Po usunięciu right:-50% efekt jeszcze ciekawszy ;)</div>
  51. </div>
  52. <div class="sklep" style="left: 400px; top: 1300px">
  53. <img src="obraz.pg" width="500" height="300" alt="Horse">
  54. <div class="hint z_lewej">Czasami teksty są bardzo długie. Zobaczmy, czy ten hint wyskoczy poza ekran. Jeśli tak się stanie, jak temu zapobiec?</div>
  55. </div>
  56. </body>
  57. </html>
Działający przykład do edycji: https://jsfiddle.net/mdhpLa7m/
Działający przykład na pełnym ekranie: https://jsfiddle.net/mdhpLa7m/embedded/result/


--------------------
„Jesteśmy różni, pochodzimy z różnych stron Polski, mamy różne zainteresowania, ale łączy nas jeden cel. Cel ten to Ojczyna, dla której chcemy żyć i pracować.” Roman Dmowski
Go to the top of the page
+Quote Post
kafowi
post 21.06.2015, 09:32:13
Post #2





Grupa: Zarejestrowani
Postów: 75
Pomógł: 20
Dołączył: 13.02.2015

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


Zakładając, że obrazek ma stałą szerokość (albo ustawiasz każdemu na sztywno) to:

Kod
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>Galeria</title>
  <style>
  .obrazek1 {float:left;width:200px;height:220px;}
  .hint_prawy1 {float:right;width: calc(100% - 200px);background:yellow;}
    
  .obrazek2 {float:right;width:200px;height:220px;}
  .hint_lewy2 {float:left;width: calc(100% - 200px);background:red;}
    
  .odstep {clear:both;padding-top:10px;}
  </style>
</head>
<body>

<div class="sklep">
<img class="obrazek1" src="http://news.nationalgeographic.com/news/2009/09/photogalleries/crop-circles-pictures/images/primary/090915-05-firefox-crop-circle_big.jpg" alt="">
<div class="hint_prawy1">Lorem ipsum dolor sit amet enim. Etiam ullamcorper. Suspendisse a pellentesque dui, non felis. Maecenas malesuada elit lectus felis, malesuada ultricies. Curabitur et ligula. Ut molestie a, ultricies porta urna. Vestibulum commodo volutpat a, convallis ac, laoreet enim. Phasellus fermentum in, dolor. Pellentesque facilisis. Nulla imperdiet sit amet magna. Vestibulum dapibus, mauris nec malesuada fames ac turpis velit, rhoncus eu, luctus et interdum adipiscing wisi. Aliquam erat ac ipsum. Integer aliquam purus. Quisque lorem tortor fringilla sed, vestibulum id, eleifend justo vel bibendum sapien massa ac turpis faucibus orci luctus non, consectetuer lobortis quis, varius in, purus. Integer ultrices posuere cubilia Curae, Nulla ipsum dolor lacus, suscipit adipiscing. Cum sociis natoque penatibus et ultrices volutpat. Nullam wisi ultricies a, gravida vitae, dapibus risus ante sodales lectus blandit eu, tempor diam pede cursus vitae, ultricies eu, faucibus quis, porttitor eros cursus lectus, pellentesque eget, bibendum a, gravida ullamcorper quam. Nullam viverra consectetuer. Quisque cursus et, porttitor risus. Aliquam sem. In hendrerit nulla quam nunc, accumsan congue. Lorem ipsum primis in nibh vel risus. Sed vel lectus. Ut sagittis, ipsum dolor quam.
</div>
</div>

<div class="odstep"></div>

<div class="sklep">
<img class="obrazek2" src="http://news.nationalgeographic.com/news/2009/09/photogalleries/crop-circles-pictures/images/primary/090915-05-firefox-crop-circle_big.jpg" alt="">
<div class="hint_lewy2">Lorem ipsum dolor sit amet enim. Etiam ullamcorper. Suspendisse a pellentesque dui, non felis. Maecenas malesuada elit lectus felis, malesuada ultricies. Curabitur et ligula. Ut molestie a, ultricies porta urna. Vestibulum commodo volutpat a, convallis ac, laoreet enim. Phasellus fermentum in, dolor. Pellentesque facilisis. Nulla imperdiet sit amet magna. Vestibulum dapibus, mauris nec malesuada fames ac turpis velit, rhoncus eu, luctus et interdum adipiscing wisi. Aliquam erat ac ipsum. Integer aliquam purus. Quisque lorem tortor fringilla sed, vestibulum id, eleifend justo vel bibendum sapien massa ac turpis faucibus orci luctus non, consectetuer lobortis quis, varius in, purus. Integer ultrices posuere cubilia Curae, Nulla ipsum dolor lacus, suscipit adipiscing. Cum sociis natoque penatibus et ultrices volutpat. Nullam wisi ultricies a, gravida vitae, dapibus risus ante sodales lectus blandit eu, tempor diam pede cursus vitae, ultricies eu, faucibus quis, porttitor eros cursus lectus, pellentesque eget, bibendum a, gravida ullamcorper quam. Nullam viverra consectetuer. Quisque cursus et, porttitor risus. Aliquam sem. In hendrerit nulla quam nunc, accumsan congue. Lorem ipsum primis in nibh vel risus. Sed vel lectus. Ut sagittis, ipsum dolor quam.
</div>
</div>
    
</body>
</html>


W innym przypadku w czystym css nie widzę rozwiązania.

edit@
Można by też spróbować z align dla obrazka.

Ten post edytował kafowi 21.06.2015, 09:38:19
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 Wersja Lo-Fi Aktualny czas: 25.04.2024 - 20:09