Выровнять ul и span по крайнему правому краю окружающего div с помощью css

#html #css #reactjs

#HTML #css #reactjs

Вопрос:

Я использовал элемент span и элемент reactstrap Nav в своем компоненте React. В браузере элементы html выглядят следующим образом

 <div class="alignRegFSBackContentsInSingleRow">
    <span class="angleLeftNavigateBack"/>
    <ul class="nav">
        <li class="nav-item">
            <a class="sc-bdVaJa hBLssO nav-link" id="wizardPreviousButton">Basic Info</a>
        </li>
    </ul>
    <ul class="nav" id="nextButtonNav">
        <li class="nav-item" id="nextButtonNavItem">
            <a class="sc-bwzfXH bDoCBt nav-link" id="wizardNextButton">Collateral Details</a>
        </li>
    </ul>
    <span class="angleRightNavigateBack"/>
</div>
 

Ниже приведен CSS-код контейнера div

 .alignRegFSBackContentsInSingleRow{
    display:flex;
    flex-direction:row;
    max-width: fit-content;
    height: 20px;
}
 

CSS — это два элемента со стрелками, для которых я использую промежутки

 .angleLeftNavigateBack::after{
    content: "f104";
    font-family: "FontAwesome";
    font-size: medium;
    padding-left: 10px;
    padding-top: 0px;
    padding-right: 0px;
    padding-bottom: 0px;
}

.angleRightNavigateBack::after{
    content: "f105";
    font-family: "FontAwesome";
    font-size: medium;
    padding-left: 5px;
    padding-top: 0px;
    padding-right: 0px;
    padding-bottom: 0px;
}
 

Мое требование — выровнять второй набор элементов и по крайнему правому краю внутри контейнера div. Я попытался использовать margin-left: auto для диапазона и ul. Также попробовал justify-content: пробел между разделом контейнера. Также пробовал float: прямо на ul и span, но ничего не работает

Пожалуйста, помогите. Я определенно упускаю что-то глупое здесь

Ссылка на Codesandbox здесь: https://2f095.csb.app /

Изображение для получения более подробной информации

Комментарии:

1. вы пробовали использовать display:flex; width:100% или использовать display:flex; flex-grow:1 свойства? Если возможно, пожалуйста, создайте какой-нибудь рабочий пример на stackbltiz или на любом другом подходящем портале и поделитесь ссылкой. Нам будет полезно понять это более четко.

2. Я не уверен, что вы ищете, поэтому не собираюсь давать ответ, но одна вещь, которая сразу портит ваш HTML, заключается в том, что вы не можете закрывать такие элементы span. Использовать <s pan></span>. Другая вещь, на которую я бы рекомендовал обратить внимание, — это атрибут CSS self-align .

3. Я добавил стиль margin-left: ‘auto’ ко второму диапазону с помощью css-класса angleRightNavigateBack выше и изменил максимальную ширину на 100% в классе alignRegFSBackContentsInSingleRow css, и он выровнялся по правому углу. Я думаю, что проблема со вторым <ul/> только сейчас. Я присвоил ul значение margin-left: ‘auto’, но оно неправильно выравнивается по правому краю

4. @HimanshuSaxena вот ссылка на codesandbox 2f095.csb.app

Ответ №1:

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

 <div className="alignAmendFSBackContentsInSingleRow">
  <span className="angleLeftNavigateBack"></span>
  <Nav className="navFormatting">
    <NavItem>
      <StyledLink
        id="wizardPreviousButton"
        onClick={() => {
          this.previousButtonClick();
        }}
      >
        Back
      </StyledLink>
    </NavItem>
    <NavItem id="nextButtonNavItem">
      <NextButtonStyledLink id="wizardNextButton">
        Next
      </NextButtonStyledLink>
    </NavItem>
  </Nav>
  <span
    style={{ marginLeft: "auto" }}
    className="angleRightNavigateBack"
  ></span>
</div>
 

Они стилизуются в файле styles.css ниже:

 .App {
  font-family: sans-serif;
}

.navFormatting {
  display: flex;
  width: 100vw;
  padding: 0;
  margin: 1rem 0;
  list-style: none;
  flex-direction: row;
  justify-content: space-between;
}

.angleRightNavigateBack::after {
  content: "f105";
  font-family: "FontAwesome";
  font-size: medium;
}

.angleLeftNavigateBack::after {
  content: "f104";
  font-family: "FontAwesome";
  font-size: medium;
}

.alignAmendFSBackContentsInSingleRow {
  display: flex;
  flex-direction: row;
  max-width: 100%;
  height: 20px;
}
 

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

Изображение вывода измененного кода в изолированной среде

Комментарии:

1. Хотел бы я дать вам 100 баллов за это. Решена моя проблема

2. Я рад, что смог помочь!

Ответ №2:

Сохранив весь ваш код таким, какой он есть, я просто немного изменил ваш CSS. Только что добавлены flex свойства для .navFormatting класса, ниже приведен измененный код.

   .navFormatting li {
    display: flex;
    width: 100%;
 }
.navFormatting li:first-child {
    justify-content: flex-start;
 }
.navFormatting li:last-child {
    justify-content: flex-end;
}
 
 import "./styles.css";
import { Nav, NavItem } from "reactstrap";
import StyledLink from "./styledLink";
import NextButtonStyledLink from "./nextbuttonstyledLink";

export default function App() {
  return (
    <div className="alignAmendFSBackContentsInSingleRow">
      <span className="angleLeftNavigateBack"></span>
      <Nav className="navFormatting">
        <NavItem>
          <StyledLink
            id="wizardPreviousButton"
            onClick={() => {
              this.previousButtonClick();
            }}
          >
            Back
          </StyledLink>
        </NavItem>
        <NavItem id="nextButtonNavItem">
          <NextButtonStyledLink id="wizardNextButton">
            Next
          </NextButtonStyledLink>
        </NavItem>
      </Nav>
      <span
        style={{ marginLeft: "auto" }}
        className="angleRightNavigateBack"
      ></span>
    </div>
  );
} 
 .App {
  font-family: sans-serif;
}
.navFormatting {
  display: flex;
  width: 100%;
  margin:8px;
  padding:0;
}
.navFormatting li {
  display: flex;
  width: 100%;
}
.navFormatting li:first-child {
  justify-content: flex-start;
}
.navFormatting li:last-child {
  justify-content: flex-end;
}
.angleRightNavigateBack::after {
  content: "f105";
  font-family: "FontAwesome";
  font-size: medium;
}

.angleLeftNavigateBack::after {
  content: "f104";
  font-family: "FontAwesome";
  font-size: medium;
}

.alignAmendFSBackContentsInSingleRow {
  display: flex;
  flex-direction: row;
  max-width: 100%;
  padding: 0;
} 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script> 

Ответ №3:

Вы можете использовать следующий код для настройки положения неупорядоченных списков:

 .nav{
   padding-left:0px;
}
 

Комментарии:

1. Привет всем, есть мысли?