Archivál

Posts Tagged ‘CSS’

CSSCop

Aki követi az ASP.NET fejlődésével kapcsolatos blogokat, annak Mads Kristensent nem kell bemutatni. Mads a BlogEngine.NET alapítója, a Microsoftnál pedig most már másfél éve a Visual Studio webes editorain dolgozik. A Channel 9-on például megtekinthető egy videó Web Developer Efficiency Tools in Visual Studio 11 címmel, ami abszolút az ő területe.

Ezekből az editor fejlesztésekből a Visual Studio 2010 megjelenése óta több ingyenesen letölthető bővítmény is született, melyek részben Mads neve alatt érhetők el a Visual Studio Gallery-ben. Az egyik kevésbé ismert a CSSCop, ami a CSS Lint ellenőrzőt építi be a Visual Studioba.

Az indítás a StyleCopot, vagy az FxCopot ismerőknek a szokásos. Jobb klikk a projekten, majd Run CSSCop:

CSSCop indítás

Az elemzés eredménye az Error List ablakban jelenik meg:

CSSCop eredmények

Ami viszont kifejezetten szokatlan, az a kivételek kezelése. A CSSCop első indulásakor létrehoz a webhely gyökerében egy csslint.xml fájlt, és abban lehet kikapcsolgatni azokat a szabályokat, amikre nincs szükségünk, sőt van benne egy treatWarningsAsErrors kapcsoló is. Eszembe nem jutott volna itt keresni, de legalább könnyű TFS-be pakolni a beállításokat.

Mint minden automatikus kódelemző esetén, itt is érvényes, hogy ésszel kell kezelni az eredményeket, mert néha nincs igaza. Egyébként “will hurt your feelings”.

 

Technorati-címkék: ,,,

ASP.NET MVC 4: Reszponzív webdizájn

Az ASP.NET MVC 4 projekt sablonokkal készített weboldalak optimálisan jelennek meg asztali és mobil böngészőkön is, pedig nem tartalmaznak külön view-kat a különböző eszközökre. A trükk a viewport és a CSS media query használata, amelyet ebben a rövid videóban mutatok be:

A megtekintéshez teljes képernyős nézet, 720p ajánlott.

 

Kategóriák:Mobil, Webfejlesztés Címkék:, , , , ,

Image overlay készítése CSS-sel

Az egyik projektünkben egy weboldalon olyan képeket kell megjelenítenünk, amiket a felhasználók töltenek fel. Ez még önmagában nem is nagy durranás, csakhogy a dizájner ráálmodott egy-egy Metros nyíl ikont is ezekre a képekre, overlay formájában:

A végeredmény

A feladat nyilván sokféleképpen megoldható, mi a CSS-t választottuk, dolgozzon csak a böngésző. Ehhez kellett először is az eredeti kép:

Az eredeti kép

Továbbá az overlay, ami ugyanakkora, mint az eredeti kép, majdnem teljesen átlátszó és csak a nyíl van rajta:

Az overlay

A kód pedig nagyon egyszerű, csak fordítva kell gondolkodni: az overlayt jelenítjük meg és a kép lesz a háttér:

<img style="background:url(kep.jpg)" src="overlay.png" />

 

Technorati-címkék:
Kategóriák:Webfejlesztés Címkék:

Sass, LESS és CoffeeScript támogatás Visual Studiohoz

A Mindscape csapata egy igen ütős bővítményt készített a Visual Studio 2010-hez: a Web Workbench egyetlen bővítménnyel ad IntelliSense és syntax highlighting támogatást Sass, LESS és CoffeeScript fájlokhoz.

Ha ezek a technológiák nem ismerősek, akkor röviden csak annyit, hogy az első kettő a CSS, a harmadik pedig a JavaScript fejlesztéssel kapcsolatos fejfájásokat igyekszik enyhíteni. Elsőre mindhárom elég szokatlan, de hamar nagyon vonzóvá tudnak válni, bár fejlesztőeszköz támogatás hiányában eddig az “élmény” elmaradt. Szerencsére most ez az ingyenes Visual Studio bővítmény egy csapásra megoldja a problémát.

Akit pedig az érdekel, mindezt hogyan sikerült a fejlesztőknek megvalósítani, annak ajánlom figyelmébe ezt a blogbejegyzést.

Ti használjátok vagy használnátok a LESS, a Sass vagy a CoffeeScript közül valamelyiket? Mik a tapasztalatok?

Technorati-címkék: ,,

Internet Explorer 10 Platform Preview 2

Áprilisban a MIX konferencián a Microsoft bemutatta az Internet Explorer következő verziójának első előzetesét, amit ezen a héten – pontosan a korábban meghirdetett ütemtervet követve – követett a Platform Preview 2. Ízelítő az újdonságokból:

  • Positioned Floats
  • CSS3 Gradients (minden image típuson)
  • Korlátlan számú és mélységű CSS stíluslap kezelése
  • CSSOM Floating Point Value támogatás
  • Továbbfejlesztett hit testing API
  • Media Query Listeners
  • HTML5: async attribútum támogatása script elemeken
  • HTML5 Drag and Drop
  • HTML5 File API
  • HTML5 Sandbox
  • HTML5 Web Workers
  • Web Performance APIs

Mindezek nagyon ígéretesek, számomra az aszinkron szkript futtatás a web workerek a legizgalmasabbak. De szép lesz, amikor ezeket már valóban minden böngésző támogatni fogja…

Addig is az IE10 előzetes letölthető a http://ietestdrive.com oldalról.

Ti mit gondoltok?

 

Technorati-címkék: ,,,

Kategóriák:Webfejlesztés Címkék:, ,

Web Standards Update for VS 2010 SP1

HTML5 és Visual Studio 2010Fontos frissítés jelent meg a Visual Studio 2010 SP1-hez és a Visual Web Developer Expresshez, amely felokosítja ezeket az eszközöket a HTML5 és a CSS3 szabványok terén. Mivel VS extensionről van szó, ezért nem tudhat mindent (vannak olyan dolgok, amihez a VS kódját módosítani kell, de az ígéretek szerint ez is meglesz a következő verzióra), de az előrelépés így is jelentős:

HTML5

HTML5 a Visual Studio eszközsávon

IntelliSense és kód validálás a legfontosabb HTML5 elemekhez:

Browser APIs

CSS3

CSS validálás a Visual Studio eszközsávon

IntelliSense és kód validálás CSS3 finomságokhoz:

Akit képernyőképekkel lehet meggyőzni, annak feltétlenül ajánlom Scott Hanselman cikkét, akinek pedig ennyi is elég volt, annak irány a letöltő oldal.

LESS

Weboldalak dizájn részének szerkesztése közben gyakran előjön az az érzés, hogy a CSS bizony egy buta jószág. Sok mindent meg lehet vele csinálni szépen, de kinek nem volt még olyan gondolata, hogy de jó lenne, ha legalább konstansokat tudnánk definiálni vagy egyik osztály örökölhetne beállításokat másik osztálytól?

A CSS ezeket nem tudja, de van más, ami igen, úgy hívják, LESS. A nagy ötlet az benne, hogy nem próbál kitalálni egy teljesen új stílusleíró nyelvet, hanem csak kiegészíti a CSS-t néhány új funkcióval: változókkal, ún. mixinekkel, műveletekkel és egymásba ágyazott szabályokkal. Nem írok ide példákat, a LESS kezdőlapján gyorsan át lehet tekinteni ezeket.

Nyilvánvalóan a böngésző nem tudja értelmezni a .less kiterjesztésű fájlokat, ezért szükséges egy fordítási lépés, melynek során a .less fájlból szabványos .css fájl lesz – erre természetesen van eszköz.

A legszebb az egészben, hogy van .NET-re portolt változata, úgy hívják .LESS (dot-less), ahol ráadásul nincs szükség explicit fordítási lépésre, mert HttpHandlerként tud beépülni az ASP.NET csővezetékbe. Sőt, a handler képes minimalizálni a generált CSS-t és cache fejléceket is be tud rájuk állítani, így csökkentve a hálózati forgalmat és a szerver terhelését. Látszik, hogy olyanok csinálták, akik láttak már valós projektet. A telepítés mindössze web.config szerkesztést igényel.

Készül hozzá Visual Studio integráció is, még az is lehet, hogy a 2010-es változat közvetlenül fogja támogatni, legalább syntax highlight szinten.

 

Technorati-címkék: ,,,

Kategóriák:Webfejlesztés Címkék:,

CSS és Javascript minimalizálás MSBuildből

Az ASP.NET Web Site típusú projekt egyik tulajdonsága, hogy nem tartozik hozzá project fájl. Ez ugyan többnyire előny, mert kényelmes, nekem most éppen hátrány, mert MSBuilddel akarom automatizálni nem csak a fordítási folyamatot, hanem a web.config production beállításokkal történő frissítését, a felesleges könyvtárak törlését, továbbá a CSS és Javascript fájlok minimalizálását is.

Mivel a szóban forgó alkalmazás Visual Studio 2008 alatt van és gyors megoldás kellett, ezért nem ástam bele magam a szép új MSDeployba, inkább feltettem a Web Deployments Projectset. Ez gyakorlatilag azt tudja, hogy egy Web Site projekthez rendel egy MSBuildes projekt fájlt, továbbá telepít egy rakás MSBuild taskot, ami közül néhányat grafikus felületről lehet paraméterezni.

Ha végigjutottunk a Next-Next-Finish telepítőn, akkor ne a New Project menüben keresgéljünk, hanem a Solution Explorerben a Web Site projektünkön jobb klikk és ott Add Web Deployment Project… Ezek után ne várjunk sokat, létrejön egy üres projekt, aminek a Properties ablakában szinte mindent be tudunk állítgatni. Ez többnyire magától értetődő.

A Deployment fülön tudjuk beállítani, hogy a web.config fájlunkban lévő értékek (pl. appSettings) melyik másik fájlnak a tartalmára cserélődjenek ki. Itt egy trükkre hívnám fel a figyelmet: config section groupokat nem lehet megadni. Azaz például ne próbáljuk a system.net/mailSettings szekciót cserélni, mert az épp section group, hanem az alatta lévő system.net/mailSettings/smtp szekcióval próbálkozzunk:

WDP_Deployment_tab

Ha mindent szépen beállítgattunk, akkor úgy lehet kipróbálni, hogy megbildeljük a deployment projektet.

Ám ezzel még nincs vége, ha ugyanis a deployment projekten jobb egérgombbal kattintunk és azt mondjuk, hogy Open project file, és minden bátorságunkat összeszedve belefirkálunk a forrásba, akkor még jobban felturbózhatjuk a build folyamatot.

Tekerjünk az aljára és szabadítsuk ki a kikommentezett AfterBuild szekciót. Első lépésként jó lenne megszabadulni azoktól a mappáktól és fájloktól, amik a fordítás és a web.config feldolgozása után már amúgy sem kellenek. Ehhez mindössze ezt kell beleírnunk ebbe a szekcióba:

  <Target Name="AfterBuild">
    <Message Text="-- Removing unnecessary files and folders..." Importance="high" />
    <RemoveDir Directories="$(OutputPath)App_Themes" />
    <Delete Files="$(OutputPath)web_appsettings.production.config;$(OutputPath)web_connectionstrings.production.config;$(OutputPath)web_smtp.production.config" />
  </Target>

A RemoveDir taskkal törölhetünk egy mappát, a Delete taskkal pedig fájlokat, akár többet is. A Message arra jó, hogy “fordítás” közben látszódjon a konzolon, hogy mi is történik, Importance=”high” pedig arra kell, hogy a saját üzeneteink kiemelt színnel jelenjenek meg.

Itt egyébként tetszőleges parancsot futtathatunk, ha az Exec taskot használjuk. Ha van például a projektünkben egy UserUpload mappa és az a source control miatt read-only, akkor így szedhetjük le róla ezt az attribútumot a kimenetben:

  <Exec Command="attrib -R /S &quot;$(OutputPath)UserUpload*.*&quot;" />

Ugyanígy futtathatunk tetszőleges külső alkalmazást, például olyat is, ami a Javascript fájljainkat minimalizálja. Én egy ennél igényesebb megoldást akartam és ezért döntöttem a Microsoft AJAX Minifier mellett, ahhoz ugyanis tartozik MSBuild task! Az AJAX Minifier telepítője egy MSI, én pedig nem akartam a projektben minden résztvevő kollégával ezt letölteni és telepíttetni, ezért miután a saját gépemen feltelepült, átmásoltam a szükséges fájlokat egy _Build nevű mappába a Web Site projektben. Ezt a mappát természetesen ugyanúgy letöröltetem a RemoveDir taskkal…

WDP_AJAX_Minifier

Importálnunk kell az AJAX Minifierhez tartozó MSBuild taskot, ami egyébként az AjaxMin.tasks fájlban van definiálva. Ehhez ezt kell beírnunk még az AfterBuild szekció elé:

  <Import Project="..Web_BuildAjaxMinajaxmin.tasks" />

Következő lépésben az AfterBuild szekción belül definiáltam ItemGroupot, amiben JavaScriptFiles néven összefogtam az összes tömörítendő fájlt:

  <ItemGroup>
    <JavaScriptFiles Include="$(OutputPath)Static*.js" Exclude="$(OutputPath)Static*.min.js" />
  </ItemGroup>

Ezután már csak meg kellett hívni a tömörítő taskot:

  <AjaxMin SourceFiles="@(JavaScriptFiles)" SourceExtensionPattern=".js$" TargetExtension=".min.js" />

Ez létrehozza az ize.js fájl mellé az ize.min.js fájlt. A feleslegessé vált eredeti állományt le kell törölnünk, a tömörítettet pedig át kell neveznünk:

  <Delete Files="$(OutputPath)Staticize.js" />
  <Exec Command="rename &quot;$(OutputPath)Staticize.min.js&quot; ize.js" />

Ez eddig hibátlan, sajnos azonban a Microsoft AJAX Minifier nem tud CSS-t optimalizálni. Ezért szemrebbenés nélkül letöltöttem a YUI Compressor .NET-es változatát, ahhoz ugyanis szintén van MSBuild task. A YUI Compressor nem csak CSS-t, hanem Javascriptet is tud tömöríteni, de ScottGu szerint a sajátjuk jobb, és mivel az én tesztem is ezt támasztotta alá, ezért a hibrid megoldás mellett döntöttem.

A fenti képen látszik, hogy a YUI Compressor fájljait is kicsomagoltam a _Build mappába, majd az AjaxMin.tasks mintájára faragtam egy YUICompressor.tasks fájlt, ami mindössze ennyiből áll:

  <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <UsingTask TaskName="CompressorTask" AssemblyFile="Yahoo.Yui.Compressor.dll" />
  </Project>

Természetesen használat előtt ezt is importálni kell:

  <Import Project="..Web_BuildYUICompressorYUICompressor.tasks" />

És az ItemGroupot is kiegészítettem egy CssFiles változóval:

  <ItemGroup>
    <JavaScriptFiles Include="$(OutputPath)Static*.js" Exclude="$(OutputPath)Static*.min.js" />
    <CssFiles Include="$(OutputPath)Staticize.css" />
  </ItemGroup>

Ennyi bemelegítés után a CSS optimalizálás már csak ennyiből áll:

  <CompressorTask
    CssFiles="@(CssFiles)"
    DeleteCssFiles="True"
    CssOutputFile="$(OutputPath)Staticize.css"
    CssCompressionType="YuiStockCompression"
    PreserveAllSemicolons="False"
    DisableOptimizations="Nope"
    EncodingType="Default"
    LineBreakPosition="-1"            
    LoggingType="ALittleBit"
    ThreadCulture="en-au"
    IsEvalIgnored="false" />

Szerencsére itt van olyan opció (DeleteCssFiles), amivel az optimalizált verzió egyből felülírja az eredeti fájlt.

Végül már csak egyetlen lépés maradt hátra, egy rövidke .cmd fájl elkészítése, amire bármikor duplán kattintva lefordul a teljes solution (a Web Site projekt által használt osztálykönyvtárak is), és természetesen lefut a Web Deployment Project is. Ebben a batch fájlba egyetlen sor került:

  "%WinDir%Microsoft.NETFrameworkv3.5MSBuild.exe" /target:Build 
/property:Configuration=Release MySolution.sln 
/p:AspNetConfiguration=Release

Kategóriák:Webfejlesztés Címkék:, ,

Gombok kiszürkítése Firefoxban

Azt hiszem jogosan várjuk el egy szoftver felhasználói felületétől, hogy ha egy gombot nem lehet megnyomni, akkor ez messziről ordítson róla. Sajnos ez a Firefoxban megjelenített weboldalakon nem mindig van így.

Legyen két teljesen egyszerű gombunk, ám az egyik legyen disabled:

  <asp:Button runat="server" Text="Meg lehet nyomni" />
  <asp:Button runat="server" Text="Nem lehet megnyomni" Enabled="false" />

Ezek teljesen jól jelennek meg IE8-ban és FF 3.5-ben, a disabled gomb szép szürke:

Enabled és disabled gombok Firefoxban stílus nélkülA bajok akkor kezdődnek, ha elkezdünk virgonckodni és ráakasztunk a gombra valamilyen dizájnt, például ezt a CSS osztályt:

  .button
  {
    background-color: Orange;
    color: #940000; 
    font-family: Verdana, Arial, Helvetica, Sans-Serif;
    font-size: 0.8em;
    border: solid 1px #afafaf;
    cursor: pointer;
    padding: 3px 5px;
    border: solid 1px #d5d5d5;
  }

Innentől kezdve a nyomorult Firefox nem törődik azzal, hogy a gomb enabled vagy disabled, mindegyik úgy fog kinézni, ahogy azt a CSS osztályban megadtuk: Enabled és disabled gombok Firefoxban egyedi stílussal, azonosanAz egyik megoldás nyilván az, hogy miközben szerver oldali kódból vagy JavaScriptből állítgatjuk az enabled állapotot, manuálisan gondoskodunk a gomb megjelenéséről is. Ennél egy nagyságrenddel jobb megoldás egy másik CSS osztály felvétele, ami csak akkor alkalmazódik, ha a gombot letiltottuk. Ehhez tudnunk kell, hogy a szerver oldali Enabled=”false” kliens oldalon disabled=”disabled” lesz:

  .button[disabled="disabled"] /* Firefox workaround */
  {
    background-color: LightGray;
    color: Gray;
  }    

Íme az eredmény:

Enabled és disabled gombok Firefoxban egyedi stílussal különbözően

Kiváló példa arra, hogy egy dizájner mivel tud hónapokig “szöszmötölni” egy projekten, illetve, hogy mennyire nem attól lesz valaki jó dizájner, hogy van grafikai érzéke és ismeri a CSS-t, hanem hogy mennyi tapasztalata van és mennyire figyel a részletekre.

Ráadás (2009.08.25.)

Úgy látszik ez sem tökéletes, ugyanis ha JavaScriptből állítom a disabled tulajdonságot, akkor FF-ban “”, “true” vagy “false” értéket vesz fel, amire persze a fenti disabled=”disabled” nem illeszkedik. Gincsai Gábor barátom szerint a .button:disabled { color: Gray; } osztály felvételével ez is kezelhető.

Technorati-címkék: ,,,

Kategóriák:Webfejlesztés Címkék:, , ,
Follow

Get every new post delivered to your Inbox.

Join 34 other followers