2016-07-06 3 views
3

У меня есть элемент HTML, и мне нужно отобразить путь к папке/файлу внутри него, который иногда может быть очень длинным.Проблема с направлением: rtl Свойство CSS

Я также хочу сохранить его на одной строке (в контейнере с ограничением ширины), поэтому я, очевидно, должен добавить к нему несколько многоточие.

Другим требованием является то, что я должен всегда видеть самые узкие папки в этом пути (это полезно, когда путь длинный, потому что последние узлы - это то, что вас действительно интересует).

Проблема в том, что этого довольно сложно достичь, если я использую свойство CSS direction: rtl;, потому что оно перемещает другие символы вокруг, например / или даже paranthesis.

Взгляните на этот пример: https://jsfiddle.net/r897duu9/1/ (как вы можете видеть, я не использовал text-overflow: ellipsis свойство, как это будет, по какой-то причине, переопределить direction: rtl свойство).

То, что я пытался до сих пор, и она работает на современных браузерах добавляет свойство unicode-bidi: plaintext; CSS, но в соответствии с Mozilla Developer Network это является экспериментальным и не очень хорошо поддерживается через не очень современных кашля IE браузеров. Сценарий для этого здесь: https://jsfiddle.net/n05b3jgt/1/.

Кто-нибудь знает лучший способ достичь этого, который будет хорошо поддерживаться в широком диапазоне браузеров?

+0

Зачем вам нужен 'rtl' с латинского языка? –

+0

Итак, результат во второй скрипке - это то, что вам нужно? Я бы, вероятно, позиционировал текст абсолютно так же, без какого-либо направления/биди. https://jsfiddle.net/n05b3jgt/2/ – CBroe

+0

Это хороший вопрос. Как еще я мог бы достичь этого, но без решений, которые предполагали бы обертывание каждого слова в HTML-элементы? – Zubzob

ответ

3

Вы можете использовать направление на контейнере, а затем сбросить его по тексту.

.container { 
 
    width: 340px; 
 
    background:gray; 
 
    direction:rtl; 
 
    overflow:hidden; 
 
    text-align:left; 
 
    position:relative; 
 
} 
 
.container:before{ 
 
    position: absolute; 
 
    content: '...'; 
 
    background: white; 
 
    left: 0; 
 
} 
 

 
.text-with-path { 
 
    display:inline-block; 
 
    white-space:nowrap; 
 
    text-indent:1em; 
 
    direction:ltr;
<div class="container"> 
 
    <div class="text-with-path"> 
 
    /Root/someFolder/SomeAnotherFolder/AgainSomeotherFolder/MyPictures/MyDocs (recent) 
 
    </div> 
 
</div> 
 
<hr/> 
 
<div class="container"> 
 
    <div class="text-with-path"> 
 
    /MyPictures/MyDocs (recent) 
 
    </div> 
 
</div>

или просто использовать поплавок, если ваш главный вопрос, каким образом текст перетекает

.container { 
 
    width: 340px; 
 
    background:gray; 
 
    overflow:hidden; 
 
    position:relative; 
 
} 
 
.container:before{ 
 
    position: absolute; 
 
    background:gray; 
 
    content: '...'; 
 
    left: 0; 
 
} 
 

 
.text-with-path { 
 
    float:right; 
 
    margin-left:-999px; 
 
    }
<div class="container"> 
 
    <div class="text-with-path"> 
 
    /Root/someFolder/SomeAnotherFolder/AgainSomeotherFolder/MyPictures/MyDocs (recent) 
 
    </div> 
 
</div>

+0

Спасибо за ваш ответ. К сожалению, это очень сложно, когда у вас короткие пути. Посмотрите эти скрипты: https://jsfiddle.net/acur94u3/ и https://jsfiddle.net/hptydy6z/ – Zubzob

+1

@ Zubzob см. Мое обновление по первому фрагменту. то, что выглядит странно для меня, - это три точки, показывающие, какая длина текста задействована;) –

+1

@ Zubzob может быть способом скрыть/показать визуально точки только при необходимости http://codepen.io/gc-nomade/pen/JKyjZq –

Смежные вопросы