Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> ajax - podmiana arkusza styli do strony
Dobrek Kropielni...
post
Post #1





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 11.05.2006

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


witam,
probuje rozwiazac nastepujacy problem:

strona posiada pewna czesc wspolnych styli (pojedynczy plik css) oraz kilka skorek (osobne arkusze styli) - zalaczenie ich wszystkich jako styli alternatywnych i ich podmiana przy pomocy techniki opisanej na http://www.alistapart.com/articles/alternate/ lub przy pomocy mechanizmu http://24ways.org/advent/introducing-udasss nie za bardzo wchodzi w gre - ograniczenie wynika z wagi poszczegolnych skorek kazda z nich to ok 100kB do zaladownia

rozwiazanie ktore działa ale niestety nie waliduje sie (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) to dynamiczne umieszczenie w tresci strony (gdzies w sekcji body) tagu <link> z odwolaniem do dolaczanego arkusza styli

czy ktos z Was mial juz do czynienia z taka sytuacja ? macie jakies pomysly jak to rozwiazac ?

pozdrawiam
dobrek
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
bigZbig
post
Post #2





Grupa: Zarejestrowani
Postów: 740
Pomógł: 15
Dołączył: 23.08.2004
Skąd: Poznań

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


Możesz stworzyć w sekcji head taga np. <style id="mycss" type="text/css">, a później załadować do niego dane tekstowe przy pomocy AJAXA, tak jakbyś to robił z każdym innym divem czy spanem w sekcji body.

Pomysł ten został wykorzystany na stronie Generator kolorowania składni. Niestety technika ta nie działa w IE.
Go to the top of the page
+Quote Post
TomASS
post
Post #3





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

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


Do tego wcale nie jest potrzebny AJAX - ja to mam zrobione tak:
  1. <link rel="Stylesheet" href="./style/style.css" type="text/css">
  2. <link rel="Stylesheet" href="./style/red.css" type="text/css">
  3. <link rel="Stylesheet" href="./style/green.css" type="text/css">
  4. <link rel="Stylesheet" href="./style/blue.css" type="text/css">
  5. <link rel="Stylesheet" href="./style/yellow.css" type="text/css">

Gdzie pierwszy ze styli jest wspolnym stylem, a później mam funkcję JS:
  1. function selectCSS(numer){
  2. for(i=1;i<document.styleSheets.length;i++){
  3. document.styleSheets[i].disabled=true;
  4. }
  5. document.styleSheets[numer].disabled=false;
  6. }
Go to the top of the page
+Quote Post
bigZbig
post
Post #4





Grupa: Zarejestrowani
Postów: 740
Pomógł: 15
Dołączył: 23.08.2004
Skąd: Poznań

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


No tak ale niezaleznie od tego ktorego arkusza styli uzywasz musisz za kazdym razem zaladowac wszystkie. Moj sposob umozliwia doladowanie definicji styli w zaleznosci od potrzeb. Widze zastosowanie przy pisaniu pluginow, modulow itp. Pytanie moje brzmi czy mozna to jakos zaimplementowac dla IE?

-- edit --
@TomASS - a tak w ogole to masz racje - do tego nie jest potrzebny AJAX tylko js, ktory zaktualizuje nam DOM

Ten post edytował bigZbig 29.05.2006, 14:54:02
Go to the top of the page
+Quote Post
bigZbig
post
Post #5





Grupa: Zarejestrowani
Postów: 740
Pomógł: 15
Dołączył: 23.08.2004
Skąd: Poznań

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


Okazuje sie ze dla IE tez moze dzialac

Kod
<html><head>
  <link rel="stylesheet" id="myStylesheet" href="./red.css" type="text/css" />
  <script type="text/javascript">
  
// prototype StyleManger {
  function StyleManager() {
    this.varsion = '1.0';
  }  
  
  StyleManager.prototype.changeStylesheet = function(url) {
    this.removeStylesheet();
    this.addStylesheet(url);
  }
  
  StyleManager.prototype.addStylesheet = function(url) {
    var head = document.getElementsByTagName('head')[0];
    var link = document.createElement('link');
    link.id = 'myStylesheet'
    link.rel = 'stylesheet';
    link.type = 'text/css';
    link.href = url;
    head.appendChild(link);
  }
  
  StyleManager.prototype.removeStylesheet = function() {
    var head = document.getElementsByTagName('head')[0];
    var link = document.getElementById('myStylesheet');
    if(link) {
      head.removeChild(link);
    }
  }
// }
  StyleManager = new StyleManager();

  </script>
  
</head>
<body>
  <form action="" method="POST">
    <select onchange="StyleManager.changeStylesheet(this.value)">
      <option value="./red.css">red</option>
      <option value="./yellow.css">yellow</option>
      <option value="./green.css">green</option>
    </select>
  </form>
  <h1>PRÓBA</h1>
</body></html>
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: 22.08.2025 - 22:33