- From: Andrew Fedoniouk <news@terrainformatica.com>
- Date: Wed, 30 Jan 2013 11:19:55 -0800
- To: Bobby Mozumder <mozumder@futureclaw.com>
- Cc: www-style list <www-style@w3.org>
- Message-ID: <CALRQH7-wiWT6DKms+nZZN1vdBg786XgmthhAfrJ5pwKWPph8_Q@mail.gmail.com>
On Tue, Jan 29, 2013 at 4:59 PM, Bobby Mozumder <mozumder@futureclaw.com>wrote: > Hi, > > A problem I've been dealing with in design is that the pseudo-class > selector :hover signals a state of an element, and that element is the only > object that style can be applied to. > > For example, i can only affect the element that :hover applies to: > > #myImage { > color: #000000 ; > } > > #myImage:hover { > color: #fffff; > } > > > I can't apply it to affect another completely separate element: > > #myImage --> #myOtherImage { > color: #000000 ; > } > #myImage:hover --> #myOtherImage { > color: #fffff; > } > > I would need to Javascript for this to happen. > > Here are two other approaches to the problem: First one named CSSS! <http://www.terrainformatica.com/htmlayout/csss!.htm>(CSS script) that I've implemented in HTMLayout [1] CSSS is a set of "active" properties<http://www.terrainformatica.com/htmlayout/csss!-events.htm>with name ending with "!". Such properties may contain CSSS expressions. CSSS is very simple language implemented as virtual [state] machine. It is purely stack based - no GC required for the execution. As a typical example, here is how UI functionality of the <label for=otherid > element can be (roughly) defined using CSSS! extension: label[for] { hover-on! : $1(#< self.for >):hover = true; /* JS: $("#" + this.attr("for")).first().setState("hover",true); */ hover-off! : $1(#< self.for >):hover = false; active-on! : $1(#< self.for >):focus = true; cursor:pointer; } input:hover { outline: 4px solid blue; } Hover on the label changes :hover state on "buddy" element identified by "for" attribute. Activation of the label causes focus to be set on buddy element. Second approach that I've implemented in Sciter [2] uses script and one additional CSS property named "prototype": label[for] { prototype: Label url(label.tis); /* subclass all matching elements by the Label behavior defined in label.tis file */ } It requires additional script where Label behavior is defined (TIScript<http://www.codeproject.com/Articles/33662/TIScript-language-a-gentle-extension-of-JavaScript> ): class Label: Behavior { function attached() { this.buddy = self.select("#" + this.attr("for")); /*kind of CTOR but for the mixin case */ } function onHoverOn() { this.buddy.state.hover = true; } function onHoverOff() { this.buddy.state.hover = false; } function onActiveOn() { this.buddy.state.focus = true; } } Personally I would prefer second approach as it clearly separates behavioral part from styling part and at the same time it allows to assign behaviors decoratively using CSS. [1] HTMLayout, embeddable HTML/CSS engine - http://www.terrainformatica.com/htmlayout/main.whtm [2] Sciter, embeddable HTML/CSS/script engine - http://www.terrainformatica.com/sciter/main.whtm -- Andrew Fedoniouk. http://terrainformatica.com
Received on Wednesday, 30 January 2013 19:20:22 UTC