Заставьте блок зеркала кода заполнить остальную часть страницы в Safari.

Я хочу создать страницу, удовлетворяющую следующим условиям:

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

Затем я делаю этот плункер:

<style>
    .rb {
        display: flex;
        flex-direction: column;
        height: 100%;
    }

    .rb .CodeMirror {
        flex: 1;
    }
</style>

<div class="rb">
    1<br/>2<br/>3<br/>4<br/>
    <textarea ng-model="body" ui-codemirror="option"></textarea>
</div>

Он отлично работает в Chrome, но не работает в Safari: высота кода-зеркала неверна; сразу видим проблему:

введите здесь описание изображения

Кто-нибудь знает, как это исправить? Раньше у меня было решение с calc(минус фиксированный пиксель), но я больше не могу его найти.


person SoftTimur    schedule 29.07.2017    source источник
comment
Как насчет добавления html, body { height: 100%; }   -  person Ason    schedule 30.07.2017
comment
@LGSon Можете ли вы сделать рабочий пример, особенно в Safari?   -  person SoftTimur    schedule 30.07.2017
comment
У меня нет Safari, поэтому я не могу сразу проверить, хотя этот образец должен работать: plnkr .co/edit/zCdU7Tn2rfvirXnD0kHM?p=preview   -  person Ason    schedule 30.07.2017
comment
@LGSon это не работает в Safari, макет такой же, как я разместил ... Этот вопрос непрост ...   -  person SoftTimur    schedule 30.07.2017
comment
Ваш класс rb имеет набор высоты, height: 100%, и для элемента с высотой, основанной на процентах, всем его предкам также требуется height: 100%, <ui-view class="ng-scope">, <div ng-app="myApp">, <body> и <html>... или измените высоту rb на единицы окна просмотра, т. е. height: 100vh   -  person Ason    schedule 31.07.2017
comment
@LGSon Ранее я задавал аналогичный вопрос, ни у кого не было идеального решения ... Если вы считаете, что ваша идея работает, приведите рабочий пример ...   -  person SoftTimur    schedule 31.07.2017
comment
Поскольку я не могу проверить, работает ли то, что я предлагаю, само по себе, я решил опубликовать только комментарий, просто сообщив, что, как я знаю, нужно исправить. Могут быть дополнительные проблемы, но я не могу их рассмотреть, так как у меня нет Safari.   -  person Ason    schedule 31.07.2017


Ответы (2)


Почему бы вам не использовать height: 100% вместо flex: 1?

.rb .CodeMirror {
  height: 100%;
}

Обновление:

Ради будущих пользователей вышеописанное не сработало, но с calc сработало как для Safari, так и для Chrome, поэтому:

.rb .CodeMirror {
  calc(100% - 80px); /* notice the spaces around "-" */
}

где 80px — высота «первой части», как описано в исходном посте.

Изображение из Safari 10.1.2 Plunker

person Kostas Siabanis    schedule 02.08.2017
comment
Я обновил свой ответ форком от вашего плунжера, пожалуйста, проверьте его. - person Kostas Siabanis; 02.08.2017
comment
Он хорошо работает в Chrome. Однако в Safari, если вы сделаете новую строку в зеркале кода, вы обнаружите, что несколько строк скрыты внизу; нам нужно добавить несколько строк, чтобы увидеть полосу прокрутки. Я видел это раньше, и у меня было решение с calc, но я не мог его найти... - person SoftTimur; 02.08.2017
comment
Собственно тестил на сафари, прикрепил скриншот с сафари 10.1.2, может проблема в другом? - person Kostas Siabanis; 02.08.2017
comment
Кстати, если вам нужно использовать calc, вы, вероятно, ищете что-то вроде этого: height: calc(100vh - fixed-height-of-first-part); - person Kostas Siabanis; 02.08.2017
comment
нажмите на последнюю строку зеркала кода и продолжайте нажимать Enter, чтобы добавить новые строки, пока не увидите полосу прокрутки: некоторые строки будут скрыты внизу... - person SoftTimur; 02.08.2017
comment
Возможно, это ошибка Safari, проверьте здесь... Поэтому я ищу обходные пути... - person SoftTimur; 02.08.2017
comment
Я кое-что попробовал, можешь еще раз проверить планку и дать мне знать? - person Kostas Siabanis; 02.08.2017
comment
В Safari спрятано еще больше линий... но calc - хорошее направление... - person SoftTimur; 02.08.2017
comment
Рад, что это помогло. Я обновлю свой ответ решением calc для будущих читателей. - person Kostas Siabanis; 02.08.2017
comment
Давайте продолжим обсуждение в чате. - person Kostas Siabanis; 02.08.2017
comment
calc(100% - 80px) у меня пока работает как в Chrome, так и в Safari (обратите внимание, что важно добавить пробел вокруг -, так как calc(100%-80px) не будет работать)... Спасибо... - person SoftTimur; 03.08.2017
comment
Вот упрощенная версия JSBin в качестве записи... - person SoftTimur; 11.08.2017

Он хотел бы дать вопрос попробовать.

Вы можете использовать em вместо vh.

1em = примерно 16px

Также из того, что я прочитал в w3schools: https://www.w3schools.com/cssref/css3_pr_flex.asp

Вам также нужно будет импортировать свойство браузера. Я предполагаю, что коррекция должна быть:

    <style>
    // just in case you didn't
    <!--
    html,body{
        height: 100%; // or 100vh
    }
    -->
    .rb {
        display: -webkit-flex; // for Safari
        display: flex;
        -webkit-flex-direction: column;
        flex-direction: column;
        // remove this height: 100%;
        // otherwise should set 100vh to height
    }

    .rb .CodeMirror {
        // You may want to try auto instead of 1. 
        // As the size of the chrome for each browser is different.
        -webkit-flex: 1; // for Safari
        -ms-flex: 1; // for IE
        flex: 1;
    }
</style>

<div class="rb">
    1<br/>2<br/>3<br/>4<br/>
    <textarea ng-model="body" ui-codemirror="option"></textarea>
</div>

Пожалуйста, дайте мне знать, если это работает или нет. Благодарность!

person Shirley Charlin Lee    schedule 02.08.2017