Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [CSS][JavaScript]Wstawianie kodu JS i problem z nadpisywaniem stylów
Lord
post 28.04.2016, 15:58:48
Post #1





Grupa: Zarejestrowani
Postów: 239
Pomógł: 32
Dołączył: 10.03.2004

Ostrzeżenie: (10%)
X----


mam plik JS gdzie wstawiam przez document.write kod HTML z CSS, mam tam między innymi import css i style lokalne. Niestety jak wstawie go na stronę to część stylów się nadpisuje. Bo strona ma już swoje style css i teraz nie wiem co mam zrobić by wyczyścić styl css dla wyświetlanego przeze mnie kodu tak by wyświetlał się tak jak zdefiniowałem to u siebie.

Ma ktoś jakiś pomysł? Ja wiem, że mogę wymusić styl przez !important, ale to nie rozwiązuje mi problemu ze stylami których nie zdefiniowałem. Jężeli nie mam np dla danego tagu ustawionego borderu, a na stronie jest to important nic mi nie pomoże.

A może jakiś inny sposób wstawiania widgeta na stronę? może coś innego niż document.write? Znaczy można to jako iframe, ale czy to sensowne rozwiązanie?
Go to the top of the page
+Quote Post
CuteOne
post 28.04.2016, 16:22:00
Post #2





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


Musisz zdefiniować style dla każdego tagu, który zostaje domyślnie ostylowany, swoimi stylami. Jeżeli chcesz uniknąć nadpisania stylów, które nie zdefiniowałeś, to nadaj swojemu wigetowi unikalną klasę np https://jsfiddle.net/g4LsLpu0/

Ten post edytował CuteOne 28.04.2016, 16:22:30
Go to the top of the page
+Quote Post
zegarek84
post 28.04.2016, 18:31:33
Post #3





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

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


to co napisał @CuteOne + pomyśl wcześniej o jakimś resecie styli na domyślne z uszczegółowieniem "definicji"...

na rok rejestracji to raczej wiesz o co chodzi... niby to samo co powyżej ale troszku inaczej https://jsfiddle.net/0wewk84m/


--------------------
Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.

Go to the top of the page
+Quote Post
CuteOne
post 28.04.2016, 19:40:03
Post #4





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


@UP podejście dobra ale posiada pewne "wady". Po pierwsze klasa "color" w widgetcie nie zmieniła koloru na czerwony, i to w przyszłości może spowodować drobne zamieszanie, no bo jak to - dodałem klasę ale nic się nie zmieniło. Druga wada to nadawanie tagom stylów, wbrew pozorom szybko się to zemści na programiście gdy potrzeba będzie coś zmienić w przyszłości
Go to the top of the page
+Quote Post
Lord
post 28.04.2016, 20:14:38
Post #5





Grupa: Zarejestrowani
Postów: 239
Pomógł: 32
Dołączył: 10.03.2004

Ostrzeżenie: (10%)
X----


http://stackoverflow.com/questions/1590103...or-element-only
Skorzystałem z tego rozwiązania.

Nadałem id dla widgetu i dałem takie coś i to rozwiązało mój problem. Mam nadzieje, że to jest poprawne rozwiązanie. Napewno działa mam nadzieje, że za każdym razem smile.gif

  1. div#moj_widget *{
  2. animation : none;
  3. animation-delay : 0;
  4. animation-direction : normal;
  5. animation-duration : 0;
  6. animation-fill-mode : none;
  7. animation-iteration-count : 1;
  8. animation-name : none;
  9. animation-play-state : running;
  10. animation-timing-function : ease;
  11. backface-visibility : visible;
  12. background : 0;
  13. background-attachment : scroll;
  14. background-clip : border-box;
  15. background-color : transparent;
  16. background-image : none;
  17. background-origin : padding-box;
  18. background-position : 0 0;
  19. background-position-x : 0;
  20. background-position-y : 0;
  21. background-repeat : repeat;
  22. background-size : auto auto;
  23. border : 0;
  24. border-style : none;
  25. border-width : medium;
  26. border-color : inherit;
  27. border-bottom : 0;
  28. border-bottom-color : inherit;
  29. border-bottom-left-radius : 0;
  30. border-bottom-right-radius : 0;
  31. border-bottom-style : none;
  32. border-bottom-width : medium;
  33. border-collapse : separate;
  34. border-image : none;
  35. border-left : 0;
  36. border-left-color : inherit;
  37. border-left-style : none;
  38. border-left-width : medium;
  39. border-radius : 0;
  40. border-right : 0;
  41. border-right-color : inherit;
  42. border-right-style : none;
  43. border-right-width : medium;
  44. border-spacing : 0;
  45. border-top : 0;
  46. border-top-color : inherit;
  47. border-top-left-radius : 0;
  48. border-top-right-radius : 0;
  49. border-top-style : none;
  50. border-top-width : medium;
  51. bottom : auto;
  52. box-shadow : none;
  53. box-sizing : content-box;
  54. caption-side : top;
  55. clear : none;
  56. clip : auto;
  57. color : inherit;
  58. columns : auto;
  59. column-count : auto;
  60. column-fill : balance;
  61. column-gap : normal;
  62. column-rule : medium none currentColor;
  63. column-rule-color : currentColor;
  64. column-rule-style : none;
  65. column-rule-width : none;
  66. column-span : 1;
  67. column-width : auto;
  68. content : normal;
  69. counter-increment : none;
  70. counter-reset : none;
  71. cursor : auto;
  72. direction : ltr;
  73. display : inline;
  74. empty-cells : show;
  75. float : none;
  76. font : normal;
  77. font-family : inherit;
  78. font-size : medium;
  79. font-style : normal;
  80. font-variant : normal;
  81. font-weight : normal;
  82. height : auto;
  83. hyphens : none;
  84. left : auto;
  85. letter-spacing : normal;
  86. line-height : normal;
  87. list-style : none;
  88. list-style-image : none;
  89. list-style-position : outside;
  90. list-style-type : disc;
  91. margin : 0;
  92. margin-bottom : 0;
  93. margin-left : 0;
  94. margin-right : 0;
  95. margin-top : 0;
  96. max-height : none;
  97. max-width : none;
  98. min-height : 0;
  99. min-width : 0;
  100. opacity : 1;
  101. orphans : 0;
  102. outline : 0;
  103. outline-color : invert;
  104. outline-style : none;
  105. outline-width : medium;
  106. overflow : visible;
  107. overflow-x : visible;
  108. overflow-y : visible;
  109. padding : 0;
  110. padding-bottom : 0;
  111. padding-left : 0;
  112. padding-right : 0;
  113. padding-top : 0;
  114. page-break-after : auto;
  115. page-break-before : auto;
  116. page-break-inside : auto;
  117. perspective : none;
  118. perspective-origin : 50% 50%;
  119. position : static;
  120. /* May need to alter quotes for different locales (e.g fr) */
  121. quotes : '\201C' '\201D' '\2018' '\2019';
  122. right : auto;
  123. tab-size : 8;
  124. table-layout : auto;
  125. text-align : inherit;
  126. text-align-last : auto;
  127. text-decoration : none;
  128. text-decoration-color : inherit;
  129. text-decoration-line : none;
  130. text-decoration-style : solid;
  131. text-indent : 0;
  132. text-shadow : none;
  133. text-transform : none;
  134. top : auto;
  135. transform : none;
  136. transform-style : flat;
  137. transition : none;
  138. transition-delay : 0s;
  139. transition-duration : 0s;
  140. transition-property : none;
  141. transition-timing-function : ease;
  142. unicode-bidi : normal;
  143. vertical-align : baseline;
  144. visibility : visible;
  145. white-space : normal;
  146. widows : 0;
  147. width : auto;
  148. word-spacing : normal;
  149. z-index : auto;
  150. }
Go to the top of the page
+Quote Post
zegarek84
post 28.04.2016, 21:21:22
Post #6





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

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


jedynie o ile miałbyś więcej widgetów to nie poprawne jest mniej więcej (będzie działało ale...) wiele tych samych "id"...
+ o ile ten skrypt jest częścią czegoś większego, gdzie na "obcej" stronie jest załączany JS to sama metoda document.write jest bardzo złym pomysłem, gdyż przy późniejszym asynchronicznym wczytaniu skryptu skasujesz zawartość strony... rozwiązanie - twórz elementy DOM lub wstrzykuj kod HTML ale inaczej ;]
Cytat(CuteOne @ 28.04.2016, 20:40:03 ) *
@UP podejście dobra ale posiada pewne "wady". Po pierwsze klasa "color" w widgetcie nie zmieniła koloru na czerwony, i to w przyszłości może spowodować drobne zamieszanie, no bo jak to - dodałem klasę ale nic się nie zmieniło. Druga wada to nadawanie tagom stylów, wbrew pozorom szybko się to zemści na programiście gdy potrzeba będzie coś zmienić w przyszłości

i tak i nie... dalej to i element mógłby być czarny a nie jest ;] - to akurat był jakiś "reset" w duuuużym skrócie... osobie mniej doświadczonej w pracy można wytłumaczyć kiedy reguły CSS są nadpisywane a kiedy nie...

z zawodu nie jestem programistą mimo, iż 5/6 lat temu "dorabiałem" (o ile przy moich zarobkach można to nazwać dorabianiem ;p) z pasji przy pisaniu w JS choć wtedy miałem większą wiedzę z PHP... i jedną z rzeczy dla grafików w manifo.pl to miałem wykonać narzędzie graficzne do wizualizacji styli pomijając ostylowanie na istniejącej stronie...

...lata naszej rejestracji, to co do nauki JS, zachęcali zaglądać w kod Prototype, jQuery dobrze wtedy rozwijał się choć kod nie był super ;], pamiętam, jak wtedy jeszcze w jQ nie było metody .delegate a na tym forum był już kod jak to powinno działać (tzn. nie była to metoda jQ)... co poprawne to ludzie wyznaczają z czasem...

samo Node.js 5/6 lat temu raczkowało a teraz proszę... oprócz wiedzy marketing i brak potrzeby nauki dodatkowego [rus.] jazyka ;p, no i jest... gdzie coś podobnego łatwo można było napisać w PHP i ludzie serwery do nietypowych zastosowań pisali w języku który znali zamiast uczyć się C++ i bibliotek właśnie w PHP... choć wielu pisze to w trybie blokującym ale mniejsza z tym Guru - Multiplexing - gdy potrzebowałem, to okazało się, iż wielu nawet nie umie stosować Curl multi i tych informacji w necie było nie wiele by nie zrywać połączenia ze stroną którą się parsuje więc o czym tu mówić...

obecnie na swoje potrzeby wolę korzystać z C++ ASIO ;] - ale hobbystycznie ;]... + do obróbki niektórych stron zamiast używać jakichś pluginów do przeglądarek w JS to wolę QtWebki ;]


--------------------
Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.

Go to the top of the page
+Quote Post
Lord
post 28.04.2016, 22:13:37
Post #7





Grupa: Zarejestrowani
Postów: 239
Pomógł: 32
Dołączył: 10.03.2004

Ostrzeżenie: (10%)
X----


Cytat(zegarek84 @ 28.04.2016, 22:21:22 ) *
jedynie o ile miałbyś więcej widgetów to nie poprawne jest mniej więcej (będzie działało ale...) wiele tych samych "id"...
+ o ile ten skrypt jest częścią czegoś większego, gdzie na "obcej" stronie jest załączany JS to sama metoda document.write jest bardzo złym pomysłem, gdyż przy późniejszym asynchronicznym wczytaniu skryptu skasujesz zawartość strony... rozwiązanie - twórz elementy DOM lub wstrzykuj kod HTML ale inaczej ;]

Oczywiście mam rózne id. To tylko podałem za przykład

Czyli lepiej jak dam np
<script src="http://moj,pll/display.js?id=1234"></script>
<div id="widget_id_1234"></div>
i potem dac jakiś innerHtml tak?


Ogólnie mam to zrobione w ten sposób. Osoba generuje sobie widget gdzie personalizuje wygląd (kolory, wielkości itd) i potem wstawia to na stronę.

Tylko mam pewien problem bo nie moge dac 2 id dla tego samego diva. a jeden ID potrzebny jest mi do stylów. Bo dla każdego rodzaju widgetu mam zdefiniowany styl.css plus w kodzie dodaje do tagów style zedifniowane przez uzytkownika. np.

<div id="widget_1"><h2 style="color: red">Tytul</h2></div>

nie moge dać

<div id="widget_id_1234" class="widget_1"><h2 style="color: red">Tytul</h2></div>

ponieważ jak na stronie jest zdefiniowany styl #cos h2{color: blue} to styl po id jest ważniejszy od mojego .widget_1 h2 i nie nadpisuje wartości (testowałem), no chyba że bym generował dla każdego widgetu odzielny styl css, co nie jest trudne ale wydawało mi się zbyteczne.

można zrobić jakis htaccess gdzie odwołanie http://moj.pl/css/styl_id_1234.css generuje styl z określonym id w stylach.

Jak zrobić by to było dobrze smile.gif?

Wiem, ze wszystkie PP jak adsense definiuja sobie wygląd w kodzie js w postaci zmiennych, ale nie chciałem tego robić w ten sposób bo jak ktoś będzie miał X widgetów i zmieni sobie wygląd to potem musi zmieniać w każdym kodzie kolory, a tak u mnie definiuje sobie styl i może go wykorzystac w wielu widgetach i za 1 kliknięciem może sobie kolory zmienić bez ingerowania w kod widgeta samego.

Jakieś sugestie smile.gif ?

Ten post edytował Lord 28.04.2016, 22:26:11
Go to the top of the page
+Quote Post
zegarek84
post 29.04.2016, 00:59:49
Post #8





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

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


"Cicha woda brzegi rwie" ;]
nie udzielałeś się na forum a teraz widać, że jednak wiesz co i jak ;p
Cytat(Lord @ 28.04.2016, 23:13:37 ) *
<div id="widget_id_1234" class="widget_1"><h2 style="color: red">Tytul</h2></div>
ponieważ jak na stronie jest zdefiniowany styl #cos h2{color: blue} to styl po id jest ważniejszy od mojego .widget_1 h2 i nie nadpisuje wartości (testowałem), no chyba że bym generował dla każdego widgetu odzielny styl css, co nie jest trudne ale wydawało mi się zbyteczne.

robisz bardziej zaawansowany "system" - jak już wspomniałem kilka id tych samych zadziała [na 99% - a jak pisałeś, że sprawdzałeś to i możesz sprawdzić wszystkie przeglądarki...]

... szczegóły a i pewnie nie wszystkie napisałeś w ostatnim poście... trochu musisz potestować ale... i dalej innerHTML (i jego implementacje) nie były mile widziane w przeszłości, a jak teraz nie wiem (ale najśmieszniejsze u programistów, jak to dobrze obudujesz i tego nie będą widzieć to ok o.O)...

...jeśli jest tak jak pamiętam, że wszystkie przeglądarki respektują kilka "id" i tylko tak możesz pewne rzeczy nadpisać to z tego skorzystaj... problemem jest dla dalszych "developerów", iż powinni korzystać np. z .queryselectorAll a nie z document.getElementById itd...

...choć wspomniałeś co chcesz zrobić to i nie do końca choć może... masz wielu userów i oni mają zdefiniowane style domyśle a potem widgety jak sub-aplikację.... no na wiele sposobów to można rozwiązać... o ile nie chcesz się bawić w "liczenie" wartości którą możesz zrobić po stronie serwera lub klienta to możesz znowu doraźnie nadpisać wartości przez dokładniejszą definicję CSS dodając np jakiś kontener z dodatkowym ID czy jak tam ;p

ps. nie bierz teraz tego jako wykładnię a ja ko podpowiedź gdyż jestem podchmielony i też nie programuję z zawodu ;p


--------------------
Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.

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: 28.04.2024 - 15:13