- From: Shahar Or <mightyiampresence@gmail.com>
- Date: Mon, 2 Dec 2013 19:56:46 +0200
- To: www-style@w3.org
- Cc: Yaron Shahrabani <sh.yaron@gmail.com>
Hi, I'm not a software engineer (yet), nor have I ever been involved in any kind of standards establishment process. Excuse me for not following any guidelines. I do believe that I have some valuable input on bidi support in CSS. My insight, as a beginner web designer is that CSS is missing a few features that can make the bidi web designer's work a *whole lot* easier. And frankly, I'm surprised that they aren't yet implemented, and I wouldn't be surprised if I wasn't the first to conceive them. First, the concept that any attribute that has horizontal directionality as a possible value (like `float: right;`) should have a possible value of something like `with` and `against`. Let me explain why with an example: Let's say we have an element that in LTR should float right (like a photo in an article) and in RTL should float to the opposite direction, left. ``` <div class="article" lang="en" dir="ltr"> <img alt="Article photo" src="photo.jpg" /> <p>Some english text.</p> </div> ``` And the style would be: ``` ..article img { float: right; } ``` Now, if we would want to make this site bidi, containing both LTR and RTL articles: ``` <div class="article" lang="en" dir="ltr"> <img alt="Article photo" src="photo.jpg" /> <p>Some english text.</p> </div> <div class="article" lang="he" dir="rtl"> <img alt="תמונת כתבה" src="photo.jpg" /> <p>קצת מלל בעברית.</p> </div> ``` We would have to make overrides for the style of the floating image: ``` ..article img { float: right; } [dir="rtl"].article img { float: left; } ``` Let me be clear that this duplication of code is *the* common way in which bidirectional sites are designed. It seems to be the shortest way to achieve the required result. And let me be also clear, that across a whole site, this sums up to quite a lot of code just for overriding the horizontally-determined, shall I call them, or directionality-relevant declarations. Imagine all the left and right margins, the paddings, the background-positions, the floats, the `right:` and `left:` declarations and so on. So, in order to remedy this I would suggest a twist on the plot: What if, as I wrote earlier, there was a `with` or `against` value, that would set the effective direction of a float, for example, to the right or to the left, according to the direction property of the element. So, for example, our image float's style would only have to be: ``` ..article img { float: with; } ``` And if the img's direction is ltr, inherited from it's parent div's dir attribute, it would be effectively float:right (with direction) and if it is rtl, it would effectively float:left (again, with direction). I think that all bidirectional web designers would be overjoyed about this. I realise that this solves only a part of the issue, because with positional values like `margin: top right bottom left` a different solution would be required and for me, it seems rather easy but may entail some backward compatibility issues: When directionality is rtl, the values would be calculated as `top left bottom right`. Simple, elegant, amazingly effective. I can also suggest that for the `left` and `right` attributes, that they would be treated as the opposite direction when the element is rtl. This is my two cent, as a beginner rtl web designer.
Received on Monday, 2 December 2013 21:18:21 UTC