Herman<T>.Instance Ответов: 1

Левый и правый в CCS не работают


Всем привет,

Я создаю ASP.NET веб-страница и у меня есть нижний сегмент, в который нужно добавить поле поиска (текстовое поле).
<div class="BottomBar">
                    <asp:Panel runat="server" ID="pnlSearch" GroupingText="Search" CssClass="searchBar">
                           <asp:TextBox runat="server" ID="txtSearch" TextMode="Search" />
                           <asp:Button runat="server" ID="btnSearch" Text="Zoek" CssClass="searchButton" />
                    </asp:Panel>
</div>

В моем css эта часть использует следующее кодирование:
.BottomBar {
    position: fixed;
    height: 100px;
    bottom: 0px;
    left: 0px;
    right: 0px;
    background-color: rgba(105, 179, 231, 0.45); 
    text-align: left;
    align-self: baseline;
    align-items: baseline;
    vertical-align: bottom;
    box-shadow: -0px -3px 20px #8C8279;
   
}

В этой части я добавляю панель asp (набор полей с легендой)
.searchBar {
   display: block;
   left: 10px;
   right: 10px;
   bottom: 30px;
   position: absolute;
}

Этот блок тоже работает. Слева направо я вижу панель на экране.

Внутри панели мне нужно текстовое поле слева направо - 150px, а в последних 150 px нужна кнопка.

для поиска:
input[type=search] {
    left: 0px;
    right: 150px;
    position: relative;
    display: inline-block;
    
}

.searchButton {
    display:inline-block;
    right: 20px;
    position:fixed;
}


А теперь вопрос. Почему размер текстового поля составляет 175 пикселей, в то время как я нигде не устанавливаю это значение......

Что я уже пробовал:

Я попробовал решение Flex, найденное в нескольких местах на WWW. Я не могу заставить это работать.

Laxmidhar tatwa technologies

Установите ширину div и панели

1 Ответов

Рейтинг:
9

Richard Deeming

Насколько я могу видеть, поскольку коробка имеет относительное расположение, установка либо left или right просто перемещает элемент относительно его положения по умолчанию. Установка обоих одновременно не имеет никакого эффекта.

Если вам нужно только поддерживать современные браузеры (а именно: не IE10 или ниже), вы можете использовать Flexbox:

<div class="BottomBar">
    <asp:Panel runat="server" ID="pnlSearch" GroupingText="Search" CssClass="searchBar">
        <div>
            <asp:TextBox runat="server" ID="txtSearch" TextMode="Search" />
            <asp:Button runat="server" ID="btnSearch" Text="Zoek" CssClass="searchButton" />
        </div>
    </asp:Panel>
</div>
.searchBar > div {
  display: flex;
}
.searchBar input[type=search] {
  flex-grow: 1;
}
.searchBar .searchButton {
  margin: 0 20px;
}
Демонстрация[^]

РЕДАКТИРОВАТЬ:
С тех пор как ASP.NET добавляет класс CSS в оболочку <div> а не то, что <fieldset>, вам нужно будет немного изменить CSS.
.searchBar div {
    display: flex;
}

Обновленная демо-версия[^]


Herman&lt;T&gt;.Instance

Привет Ричард,

спасибо за ваше решение, но оно не работает. Я не знаю, откуда он берется, но ширина texbox = 173px. Я нигде не устанавливаю это значение. Есть идеи?

Использование последних версий Chrome и IE 11

Richard Deeming

Демо-ссылка, которую я предоставил, отлично работает для меня в Firefox 59, Chrome 64, Edge и IE11.

Herman&lt;T&gt;.Instance

Я видел демо-версию, и она работает. Есть asp.net вмешательство в перевод на HTML?

Richard Deeming

Он должен генерировать выходные данные, похожие на HTML в демо-версии, но вы можете использовать опцию "просмотр источника" вашего браузера, чтобы посмотреть на визуализированные выходные данные и сравнить их.

Вы также можете использовать инструменты разработчика, чтобы увидеть, есть ли какие-либо другие применяемые стили, которые могут переопределить CSS.

Herman&lt;T&gt;.Instance

Я нашел проблему.
Asp.Net устанавливает класс css на панели (=div), а не на наборе полей.

<div class="marinBottomBar">
<div id="pnlSearch" class="searchBar">
<fieldset>
<legend>
Search
</legend>
<div>
<input name="ctl00$txtSearch" type="search" id="txtSearch" />
<input type="submit" name="ctl00$BtnSearch" value="Zoek" id="BtnSearch" class="searchButton" />
</div>

</fieldset>
</div>


Как я могу это исправить

Richard Deeming

А, хороший улов. :)

Заменять:

.searchBar > div
с:
.searchBar > fieldset > div

Или, если у вас никогда не будет вложенного <div>:
.searchBar div

Herman&lt;T&gt;.Instance

Вот именно! Спасибо