0

左から右の Web サイト用に作成された CSS ファイルが多数あります。

LTR のプロパティと値を対応する RTL に変換できる php 関数を作成したい

私がこれをやりたい理由は、ウェブサイトが常に開発中であり、数十のページとcssファイルがあり、それらすべてを追跡するのが非常に難しいためです.

この機能はCSSファイルを自動変換するのが目的なので、RTL版のWebサイトが作りやすくなります。

例えば:

// This is the content of the css file:
$content = '
html, body {
  direction: ltr;
}
#element1 {
  padding:   1px 2px  3px 4px;
  margin-right: 3em;
  background-position: 5%   80%;
  background-image: url(image.png);
  cursor: ne-resize;
  text-align: left; /* 1 */
}
#element2 {
  background: url(image.gif) 5% 80%;
  text-align: right; /* 2 */
  border-left: 1px solid #000;
}
';

$content = convertCSStoRTL($content);

// The output - This is what i want it to become after the function is applied to the content of the css file:
$content = '
html, body {
  direction: rtl;
}
#element1 {
  padding: 1px 4px 3px 2px;
  margin-left: 3em;
  background-position: 95% 80%;
  background-image: url(image.png);
  cursor: nw-resize;
  text-align: right; /* 1 */

}
#element2 {
  background: url(image.gif) 95% 80%;
  text-align: left; /* 2 */
  border-right:  1px solid #000;
}
';

PHPで(最も簡単な方法で)それを行うにはどうすればよいですか?

4

2 に答える 2

0

CSSを変更するために正規表現/str_replaceに依存しようとすると、あなたは傷ついた世界に陥るだろうと思います。特に、整列だけでなく境界線などのプロパティを検討する場合は、PHPで1つを取得してそのミラーを生成するのではなく、2つの異なるファイルを生成することをお勧めします。

私は実際にこれをテストしていませんが、それはあなたにそれにアプローチする方法のアイデアを与えるはずです

<?php
$ltr = true;
function doLTR($left, $right, $property = FALSE) {
    @global $ltr;

    $direction = $ltr ? $left : $right;
    if (!$property) {
        print $direction;
    } else {
        print $direction . ': ' . $property;
    }
}
?>

.test {
    border: 1px solid;
    <?php doLTR('margin-left', 'margin-right', '10px'); ?>
    <?php doLTR('text-align: left', 'text-align: right'); ?>
}

の場合$ltr = true、理論的には次の出力を取得する必要があります。

.test {
    border: 1px solid;
    margin-left: 10px;
    text-align: left;
}

false(rtl)の場合、次のようになります。

.test {
    border: 1px solid;
    margin-right: 10px;
    text-align: right;
}

SassやLESSなどのCSSプリプロセッサを使用して、この種のうなり声を上げる作業を行うことを検討する価値があるかもしれません。

于 2012-09-13T17:07:13.460 に答える
0

次の SCSS インポートは、いくつかの便利な変数、関数、および mixin を追加します。

GitHub で見る

続きを読む

// Override default value for $dir in directional.scss
$dir: rtl;

// Import helpers from directional.scss
@import "directional";

// Use the helpers to make CSS for LTR or RTL
body {
    text-align: $left;
    padding-#{$right}: 1em;
    margin: dir-values(0 2em 0 1em) if-ltr(!important);
}
于 2013-09-07T18:26:56.277 に答える