- From: Luca Passani <passani@eunet.no>
- Date: Tue, 01 Jul 2008 09:50:30 +0200
- To: Benjamin Hawkes-Lewis <bhawkeslewis@googlemail.com>
- CC: Mark Birbeck <mark.birbeck@webbackplane.com>, Tina Holmboe <tina@greytower.net>, Shane McCarron <shane@aptest.com>, "Michael(tm) Smith" <mike@w3.org>, www-html@w3.org
This is absolutely fantastic. Your code makes my point exactly. > It's not poetry, but anyways: it's not poetry and the fact that you cannot use @style *is* the culprit. What about this (to be fair to you, I will also start with your arrays that simulate interaction with the backend): <?php header( 'content-type: application/xhtml+xml; charset=utf-8' ); // For demonstration purposes, we'll define the images, but the // imagined case is that these are dynamic not static. $pairs = array( array( array( 'url' => 'http://example.com/images/1.jpg', 'width' => 40, 'height' => 100, 'text_equivalent' => 'hello', ), array( 'url' => 'http://example.com/images/2.jpg', 'width' => 30, 'height' => 200, 'text_equivalent' => ' world', ), ), array( array( 'url' => 'http://example.com/images/1.jpg', 'width' => 20, 'height' => 500, 'text_equivalent' => 'goodbye', ), array( 'url' => 'http://example.com/images/2.jpg', 'width' => 10, 'height' => 400, 'text_equivalent' => ' world', ), ), ); } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.1//EN" "http://www.w3.org/TR/xhtml-basic/xhtml-basic11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> <head> <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8" /> <title>Image pairs</title> </head> <body> <h1>Image pairs</h1> <?php foreach( $pairs as $pair ) { $pair_width = $pair[0]['width'] + $pair[1]['width']; ?> <div style="width:'*<?= $pair_width ?>* .'px;"> <?foreach ( $pair as $image ) { ?> <img src="<?= htmlentities( $image['url'] )?>" width="<?= $image['width']?>" height="<?= $image['height']?>" alt="<?= htmlentities($image['text_equivalent'],ENT_QUOTES)" /> <?php } ?> </div> <?php } ?> </body> </html> look! Miracle! it's still almost XHTML!!!! and, let me tell you, I am not the greatest PHP programmer. If I had to do this in Java, assuming I can use JSTL and a common MVC framework such as Struts, Spring MVC or similar (i.e. I typically already find all the variables in the context of the page, since the controller has placed them there for me), this would be as simple as: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.1//EN" "http://www.w3.org/TR/xhtml-basic/xhtml-basic11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> <head> <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8" /> <title>Image pairs</title> </head> <body> <h1>Image pairs</h1> <c:forEach var="pair" items="${pairs}"> <div style="width:${pair[0].width+pair[1].width}"> <c:forEach var="image" items="${pair}"> <img src="${image.url}" width="${image.width}" height="${image.height}" alt="${image.textEquivalent}"> </c:forEach> </div> </c:forEach> </body> </html> (if you had to create a style tag, as you would be forced to do, if you want to avoid using a deprecated attribute, you would get my original point about repeating the code) you see? another miracle....are you guys still going to tell me that @style should be deprecated in the name of purity of separation? what about the real world? Luca Benjamin Hawkes-Lewis wrote: > Luca Passani wrote: >> Benjamin Hawkes-Lewis wrote: >>> >>> I was talking about your generic claim that because something has >>> uses it must not be deprecated. bgcolor support was also useful when >>> HTML 4.01 was released, that doesn't mean they were wrong for /that/ >>> reason to deprecate it in favour of stylesheets. >>> >>> Features may have use-cases a specification is intended to meet, but >>> still be deprecated because there are /or/ will be in the future >>> better ways to fulfill those use-cases. >> better ways in theory. Not in practice. > > Again, I was addressing the general point, not "style" in particular. > The fact that there are use-cases for a feature does not mean there > aren't better ways to address those use-cases. Deprecation is a > mechanism for gradually moving from worse to better ways of addressing > use-cases by warning people about what's planned. Therefore the fact > that there are use-cases for a feature /cannot/ be an argument against > deprecation, or nothing would ever be deprecated. > > So the mere existence of use-cases for the "style" attribute is not by > itself a sufficient argument against deprecation. > > Now, in the case of the "style" attribute, there may well be other > arguments against deprecation, but I think they all turn out to be > arguments against its removal in disguise. For example, you might > argue that "style" is the /best/ way to address a particular use-case. > This is, I guess, the position you're gravitating towards with your > "theory" and "practice" rhetoric. > >>>> I presented examples of legitimate uses of @style to which you >>>> responded with "hacks" (manipulate the dom, >>>> repeat the code to create the CSS definition elsewhere, and so on). >>> >>> * Manipulating the DOM is not a hack. >> it is, if presented as an alternative to <div style="color:red">Red >> Text</div> >>> * Adding a style attribute /is/ manipulating the DOM. >> sure, for some definitions of manipulating the DOM > > Since you agree that adding a style attribute is a change to the DOM > (for "some definitions"), I think we've clarified that changing the > DOM is not an issue for you. As far as I can tell from what you're > saying, anything that is not your choice of markup is a "hack". > >> What is a hack to me, isn't a hack to you and the other way around, >> probably. > > Maybe it would help if you picked a phrase that you don't think is so > subjective? > >>> * My suggestion did not involve any repetition of code. Your >>> imagined implementation did, but I can't understand why. Insisting >>> that I proposed this, in direct contradiction of the email you're >>> replying to, is really not helpful. >> well, yeah, I imagined implementation. > > It's not poetry, but anyways: > > <?php > header( 'content-type: application/xhtml+xml; charset=utf-8' ); > > // For demonstration purposes, we'll define the images, but the > // imagined case is that these are dynamic not static. > $pairs = array( > array( > array( > 'url' => 'http://example.com/images/1.jpg', > 'width' => 40, > 'height' => 100, > 'text_equivalent' => 'hello', > ), > array( > 'url' => 'http://example.com/images/2.jpg', > 'width' => 30, > 'height' => 200, > 'text_equivalent' => ' world', > ), > ), > array( > array( > 'url' => 'http://example.com/images/1.jpg', > 'width' => 20, > 'height' => 500, > 'text_equivalent' => 'goodbye', > ), > array( > 'url' => 'http://example.com/images/2.jpg', > 'width' => 10, > 'height' => 400, > 'text_equivalent' => ' world', > ), > ), > ); > > $i = 0; > $pairs_css = ''; > $pairs_xhtml = ''; > > foreach( $pairs as $pair ) { > $i++; > $id = 'image-pair-'.$i; > $pair_width = $pair[0]['width'] + $pair[1]['width']; > $pairs_css .= '#'.$id.'{width:'.$pair_width.'px;}'; > $pairs_xhtml .= '<div id="'.$id.'">'; > > foreach ( $pair as $image ) { > $pairs_xhtml .= '<img src="' > .htmlentities( $image['url'] ) > .'" width="' > .$image['width'] > .'" height="' > .$image['height'] > .'" alt="' > .htmlentities( > $image['text_equivalent'], > ENT_QUOTES > ) > .'" />'; > } > > $pairs_xhtml .= '</div>'; > } > > /* One loop has produced two blocks: one suggested styling, one > "semantic" markup, that can be output wherever we like. You could > output the CSS to a file and cache it, but in this case we'll assume > the styles are throwaway and just use the (undeprecated) "style" > element. */ > > ?> > <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.1//EN" > "http://www.w3.org/TR/xhtml-basic/xhtml-basic11.dtd"> > <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> > <head> > <meta http-equiv="Content-Type" content="application/xhtml+xml; > charset=utf-8" /> > <title>Image pairs</title> > <style type="text/css"><![CDATA[<?php echo $pairs_css; ?>]]></style> > </head> > <body> > <h1>Image pairs</h1> > <?php echo $pairs_xhtml; ?> > </body> > </html> > >>> * I've regularly seen the style attribute used to apply the same >>> style in multiple places, either for rapid prototyping or to style >>> included DOM. That's an example of code repetition that can be >>> avoided by using "link" or "style" elements rather than "style" >>> attribute. >> I think we are in a loop here. IMO it should be up to the coder to >> understand when the time to 'refactor' their markup has come, and >> multiple @style uses would be better turned into a reusable class. > > I suppose you can consistently assert both that "style" should be > allowed in order to avoid code repetition in final delivery /and/ that > it should be allowed in order to allow repetition in prototyping. > > Coders can produce markup however they like; it doesn't mean that > every coding preference needs expression at a markup language level > (many coding preferences can actually be met by decent programmers' > tools) and naturally XHTML 1.1 Basic doesn't even try. There's no > special catering for people who struggle to read lowercase markup, for > example. > > If a coding practice tends to produce worse code, I think it becomes > harder to argue for features to support it. I've never found "style" > terribly helpful myself, and from watching others work with it, my > impression is that prototyping using the "style" attribute does tend > to produce worse markup. That's not so much an argument for removing > the "style" attribute as a reason why I don't (personally) find the > prototyping use-case terribly persuasive as a reason for keeping it. > Not that I'm a decision-maker in all this. > >> Enforcing this with the grammar (even though just deprecating) is IMO >> wrong! > > As avoiding the "style" attribute is /not/ being enforced in the > proposed standard, this opinion appears to have only indirect bearing > on the deprecation that is the subject of this thread. > > Deprecation is a warning mechanism to ease migration. So long as the > Working Group views XHTML2 as a natural migration target from XHTML > 1.1 Basic, and so long as "style" is likely to be absent from XHTML2, > I'd guess it's incumbent on the Working Group to warn publishers of > that by deprecating it. > > So it seems to me you either need to: > > 1. Make the case that XHTML2 is not a natural migration target, or at > least that there are other natural migration targets which are likely > to include the "style" attribute or something very similar. > > /or/ > > 2. Make the case against removing the "style" attribute from any > (X)HTML standard. None of your arguments seem specific to XHTML 1.1 > Basic anyway. > > -- > Benjamin Hawkes-Lewis >
Received on Tuesday, 1 July 2008 07:51:20 UTC