Метка не выравнивается при использовании длинного текста на ap: selectOneRadio - PullRequest
3 голосов
/ 08 апреля 2020

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

Код для одного из вопросов следующий:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:p="http://primefaces.org/ui">

<h:head>
</h:head>
<h:body>
    <h:form>
        <div class="ui-g">
            <div class="ui-g-1"></div>
            <div class="ui-g-10">
                <p:panelGrid columns="1" layout="grid"
                    styleClass="showcase-text-align-center">
                    <h2>Domanda 1</h2>
                    <p:selectOneRadio id="domanda1" layout="pageDirection">
                        <f:selectItem itemLabel="Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. " itemValue="1" />
                        <f:selectItem itemLabel="Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat." itemValue="2" />
                        <f:selectItem itemLabel="Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur." itemValue="3" />
                        <f:selectItem itemLabel="Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium" itemValue="4" />
                    </p:selectOneRadio>
                </p:panelGrid>
            </div>
        </div>
    </h:form>
</h:body>
</html>

Вывод, который я получаю, - это следующее:

enter image description here

Как видите, у меня есть ярлык, связанный с последним переключателем, который не выровнен со всеми остальными. Есть ли способ решить эту проблему?

1 Ответ

5 голосов
/ 08 апреля 2020

Вы можете переопределить стиль Primefaces для достижения этого (смотрите здесь Как мне переопределить стандартные PrimeFaces CSS с пользовательскими стилями? для полного описания):

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:p="http://primefaces.org/ui">

<h:head>
<style>
.ui-selectmanycheckbox.ui-widget td, .ui-selectoneradio.ui-widget td {
    display: flex;
}

.ui-selectoneradio label {
    word-break: break-all;
}
</style>
</h:head>
<h:body>
    <h:form>
        <div class="ui-g">
            <div class="ui-g-1"></div>
            <div class="ui-g-10">
                <p:panelGrid columns="1" layout="grid"
                    styleClass="showcase-text-align-center">
                    <h2>Domanda 1</h2>
                    <p:selectOneRadio id="domanda1" layout="pageDirection">
                        <f:selectItem
                            itemLabel="Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. "
                            itemValue="1" />
                        <f:selectItem
                            itemLabel="Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat."
                            itemValue="2" />
                        <f:selectItem
                            itemLabel="Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur."
                            itemValue="3" />
                        <f:selectItem
                            itemLabel="Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantiumExcepteurExcepteurExcepteurExcepteurExcepteurExcepteurExcepteurExcepteurExcepteurExcepteurExcepteurExcepteurExcepteurExcepteurExcepteurExcepteurExcepteurExcepteurExcepteurExcepteurExcepteurExcepteurExcepteurExcepteurExcepteurExcepteurExcepteurExcepteurExcepteurExcepteurExcepteurExcepteurExcepteurExcepteurExcepteurExcepteurExcepteurExcepteurExcepteurExcepteurExcepteurExcepteurExcepteurExcepteurExcepteurExcepteurExcepteurExcepteurExcepteurExcepteurExcepteurExcepteurExcepteurExcepteur"
                            itemValue="4" />
                    </p:selectOneRadio>
                </p:panelGrid>
            </div>
        </div>
    </h:form>
</h:body>
</html>

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

Вот что происходит (обратите внимание, что реальное поведение может зависеть от версии pf и если вы используете специфи c theme, здесь я беру компоненты. css из pf 6.2 в качестве примера): Primefaces selectOneRadio создают таблицу, поэтому каждый переключатель находится в ячейке, которая наследует макет ячейки таблицы. Одиночная кнопка-переключатель в основном состоит из двух элементов: div, который содержит ввод с типом radio и метку.

Оба эти тега наследуют отображение встроенного блока от pf css. Встроенный блок отображается в той же строке, если они соответствуют, иначе они помещаются каждый в линию. Display flex может справиться с этой ситуацией, адаптируя содержимое к пространству, для лучшего описания см. this .

Теперь вам нужно управлять последним худшим сценарием: на одно слово длиннее вашей строки. Для этого вы можете использовать стиль разрыва слова. Здесь вы можете выбрать, хотите ли вы начинать новую строку, когда начинается слово (break-word), или когда вы достигаете конца строки (break-all), см. здесь для всех параметров.

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

Если хотите, Primefaces также имеет версию, ориентированную на несколько платформ, поэтому отзывчивый et c, вы можете увидеть больше здесь PrimeNG

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...