Autor Zpráva
Someone
Profil
Dobrý den, nejsem si zcela jistý zda to patří vůbec do javascriptu, ale doufám, že jo. Chtěl bych se zeptat jak udělat okno, které nezakryje stránku ale je řekněmě někde uprostřed a v jeho pozadí je stránka samotná. Doufám, že jsem to dobře popsal, uvedu příklad: Zobrazení fotky na Facebooku ta fotka je taky v jiném okně a v pozadí je stránka.
Witiko
Profil
Someone: Takovéhoto "nového modálního okna" dosáhneš tak, že vytvoříš blokový element, který pomocí css absolutně napozicuješ na střed. Do tohoto elementu pak vložíš kýžený obsah. Pro úplný facebook efekt můžeš ještě napnout od levého horního po pravý dolní roh blokový element s poloprůhledným pozadím a poštelovat z-index tak, aby byl mezi stránkou a "oknem". Tím dosáhneš zamlžení stránky na pozadí.

Ukázka:
<style>
  #okno {
    width: 500px;
    height: 500px;
    line-height: 500px;
    text-align: center;
    border: 1px solid #000;
    background-color: #fff;
    position: absolute;
    left: 50%;
    top: 50%;
    margin-left: -250px; 
    margin-top: -250px;
    z-index: 2;
  } #zamlžení {
    background-color: #000;
    opacity: 0.75;
    filter: progid:DXImageTransform.Microsoft.Alpha(opacity=75);
    -ms-filter: progid:DXImageTransform.Microsoft.Alpha(opacity=75);
    position: absolute;
    top: 0px;
    left: 0px;
    width: 100%;
    height: 100%;
    z-index: 1;
  }
</style>

Obsah stránky
<div id="zamlžení"></div>
<div id="okno">Okno</div>

Javascript se pak může starat o odkrytí daných elementů. Tzn.:
<style>
  // deklarace stylů zmíněná výše
  #kontejnerProOkno {
    display: none;
  }
</style>

Obsah stránky - <a onclick="show();">Zobrazit okno</a>
<div id="kontejnerProOkno">
  <div id="zamlžení"></div>
  <div id="okno">
    <a onclick="hide();">Skrýt okno</a>
  </div>
</span>
<script>
  var element = document.getElementById("kontejnerProOkno");
  function show() {
    element.style.display = "block";
  } function hide() {
    element.style.display = "";
  }
</script>
peta
Profil
Someone:
Fotka na fb neni v jinem okne. Okno se rozumi plocha ohranicena tlacitky, ktere se ti take zobrazi dole v liste a terou si muzes presouvat a nastavovat a pretahovat mimo okraje okna. To, co je na fb je napozicovany div uprostred stranky. Pod nim je jeste jeden, ktery zbytek stranky prekryje tmavou plochou.
Witiko
Profil
peta:
Pověz, ignoruješ předchozí příspěvky úmyslně?
Someone
Profil
Dobrý den, děkuji za návrh, vyzkouším a dám vědět.
Witiko
Profil
Someone:
Pro správné roztažení zamlžení na pozadí "okna" pro starší verze Internet Exploreru bude třeba tipuji použít ještě nějaký css hack. Něco ve stylu:
#zamlžení {
  // zbytek deklarace
  width: 100%;
  width: expression(document.body.clientWidth + "px");
  // zbytek deklarace
}
Someone
Profil
Ok vše funguje jak má jen jsem potřeboval, aby když je okno viditelné aby bylo zakázané rolování, takže jsem se pokusil o jakousi podmínku, ale vůbec si nejsem jistý jestli to takhle nějak má vypadat. Pokud je to totální nesmysl předem se omluvám, pracovat v javascriptu se zrovna učím.
<script>
  var element = document.getElementById("kontajnerprookno");
  var body = document.getelementbytagname("body");
  function hide() {
    element.style.display = "none";
  }
  if (element.style.display = "block")
  {body.style.overflow = "hidden"}
</script>
Chamurappi
Profil
Reaguji na Witika:
pro starší verze Internet Exploreru bude třeba tipuji použít ještě nějaký css hack. Něco ve stylu
Nebude. Teda, možná na (minimální) výšku, to už tu dneska jednou bylo.
Mimochodem, proč duplikuješ filter + -ms-filter ty?
Witiko
Profil
Chamurappi:
Nebude. Teda, možná na (minimální) výšku, to už tu dneska jednou bylo.
V Adaptivním režimu (což zdá-se je emulace IE5) se i při použití width: 100% blokový potomek těla stránky roztáhne "jen" na 100% šířky mínus šířku scrollbaru. Ukázka, použitý kód je ten z [#2].

Mimochodem, proč duplikuješ filter + -ms-filter ty?
Osobně jsem to netestoval, ale Microsoft vyhrožuje, že filter má fungovat od osmičky jen ve quirku a doporučuje zahrnutí obou zápisů. Viz.:
http://blogs.msdn.com/b/ie/archive/2008/09/08/microsoft-css-vendor-extensions.aspx » Changes in the filter property syntax » 3. odstavec.
Navíc zdá se, že jsem to v původním stylopisu uvedl ve špatném pořadí. Podle textu má jít -ms-filter první.

Someone:
Tak něco takového:
<script> 
  var element = document.getElementById("kontajnerprookno"); 
  // Kdyžtak už takhle, javascript je case-sensitive: document.getElementsByTagname("body")[0]; 
  // Nicméně není to třeba, DOM host prostředí javascriptu zpřístupňuje kýženou referenci v document.body
  function show() {
    element.style.display = "block";
    document.body.style.overflow = "hidden";
  } function hide() {
    element.style.display = ""; // none není potřeba, definovali jsme ve stylopisu, že defaultně je element skrytý
    document.body.style.overflow = "";
  }
</script>
Mimochodem, možná by dávalo větší smysl nastavit v definici stylopisu pozici pro #zamlžení jako fixed místo absolute. Ve výsledku pak bude jedno jak moc je okno odscrollováno.
Chamurappi
Profil
Reaguji na Witika:
V Adaptivním režimu (což zdá-se je emulace IE5)
Což je quirk Exploreru 6 (až na pár detailů). Žádná emulace IE5 v Exploreru nikdy nebyla.

blokový potomek těla stránky roztáhne "jen" na 100% šířky mínus šířku scrollbaru. Ukázka
Mezera je širší než posuvník, spíš je to součet výchozích marginů na <body>/<html>.

Microsoft vyhrožuje, že filter má fungovat od osmičky jen ve quirku
Ne. Viz tebou odkázaný článek. Patrně ho mnoho lidí dezinterpretuje podobným způsobem.
Ve všech Explorerech od verze 4 bez problémů funguje filter: alpha(opacity=číslo), není důvod psát cokoliv jiného.

Changes in the filter property syntax » 3. odstavec
Neměl uvádět jen samotný -ms-filter, protože ho sedmička nezná, a starý způsob zápisu hodnoty bude u -ms-filteru ignorován. Celý humbuk okolo přidání prefixu vznikl jen proto, aby existoval zápis neodporující CSS specifikaci, po čemž byla mezi ovečkami velebícími W3C velká poptávka (aspoň tak to vnímal MS). Nutno podotknout, že i ten starší odporující zápis nesmí podle CSS specifikace nikomu způsobit vážný problém. Normální lidé tedy mohou článek na IEBlogu v klidu ignorovat :-)
Witiko
Profil
Chamurappi:
Což je quirk Exploreru 6 (až na pár detailů). Žádná emulace IE5 v Exploreru nikdy nebyla.
No quirk IE6 bude nejspíš režim zpětné kompatibility právě pro IE 5.5, 5 a jiné soudobé prohlížeče, ne? :-)

spíš je to součet výchozích marginů na <body>/<html>.
Je tomu skutečně tak.

Neměl uvádět jen samotný -ms-filter, protože ho sedmička nezná, a starý způsob zápisu hodnoty bude u -ms-filteru ignorován.
Patrně ho mnoho lidí dezinterpretuje podobným způsobem
Patrně autor článku píše nějakou jinou angličtinou, kde slova znamenají něco jiného? „Since our CSS parser has been re-designed to comply with standards, the old filter syntax will be ignored as it should according to the CSS Specification.“ Možná jsem mimo kontext, ale ze zběžného prolítnutí jsem měl ten pocit, že IE8 a výše nebude mít filter rádo.
Chamurappi
Profil
Reaguji na Witika:
No quirk IE6 bude nejspíš režim zpětné kompatibility právě pro IE 5.5 a 5 a jiné soudobé prohlížeče, ne?
Má sice hodně blízko k verzi 5.5, nicméně pár věcí mění a podporuje řadu nových vlastností. Rozhodně je s pětkou mnohem méně kompatibilní, než sedmičkový režim se sedmičkou.

Patrně autor článku píše nějakou jinou angličtinou, kde slova znamenají něco jiného?
Mno jo, máš pravdu, zní to docela jasně. I když v odstavci nad „Changes in the filter property syntax“ je psáno, že staré zápisy vlastností mají fungovat. Teď jsou tři možnosti:
1) Autor článku to pomotal.
2) Článek vznikal před vydáním finální verze osmičky a MS ještě stihl změnit názor.
3) Mýlím se já a nevšiml jsem si, že filter v osmičce nefunguje, přestože s ním pracuji docela často. To mě trochu děsí :-)
Zítra se dostanu ke stroji s nativním Explorerem 8 a vyzkouším.

Rozhodně ale je zbytečné u filtru alpha uvádět „progid:DXImageTransform.Microsoft“ (což jen činí ze zápisu obtížně zapamatovatelnou věc).
Chamurappi
Profil
Reaguji na Witika:
Vlastnost filter funguje v osmičce i v devítce přesně stejně jako ve starších verzích, zápis s progid i bez.
Vlastnost -ms-filter funguje jen při uzavření hodnoty do uvozovek.
Takže článek na IEBlogu je skutečně lepší přehlížet a zapomenout, že nějaký -ms-filter existuje.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0