Сделать div заполнить высоту оставшегося места на экране

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

Опции:

  • Сначала перенесите объект:
    SomeClass obj2 = (SomeClass) (object) t;
    
  • Вместо этого используйте as:
    SomeClass obj2 = t as SomeClass;
    

Очевидно во втором случае вам также понадобится выполнить проверку недействительности позже, если t - not a SomeClass.

EDIT: аргументы для этого приведены в разделе 6.2.7 спецификации C # 4:

Вышеупомянутые правила не позволяют прямое явное преобразование из параметра неограниченного типа в тип без интерфейса, что может быть неожиданным. Причина этого правила заключается в том, чтобы предотвратить путаницу и сделать семантику таких преобразований понятными. Например, рассмотрим следующее объявление:

class X<T>
{
    public static long F(T t) {
        return (long)t; // Error 
    }
} 

Если разрешено прямое явное преобразование t в int, можно легко ожидать, что X<int>.F(7) вернет 7L. Однако это не так, потому что стандартные числовые преобразования учитываются только тогда, когда типы известны как числовые во время привязки. Чтобы сделать семантику понятной, вместо этого должен быть написан вышеприведенный пример:

class X<T>
{
    public static long F(T t) {
        return (long)(object)t; // Ok, but will only work when T is long
    }
}

Этот код теперь будет компилироваться, но выполнение X<int>.F(7) затем выдаст исключение во время выполнения, так как вложенное значение int не может быть преобразован непосредственно в длинный.

1633
задан danronmoon 8 February 2019 в 17:39
поделиться

4 ответа

Vincent, я отвечу на снова использование Ваших новых требований. Так как Вы не заботитесь о содержании, скрытом, если это слишком длинно, Вы не должны пускать в ход заголовок. Просто поместите переполнение, скрытое на теги HTML и теги основного текста, и установите #content высота на 100%. Содержание всегда будет более длинным, чем область просмотра высотой заголовка, но это будет скрыто и не вызовет полосы прокрутки.

<!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">
  <head>
    <title>Test</title>
    <style type="text/css">
    body, html {
      height: 100%;
      margin: 0;
      padding: 0;
      overflow: hidden;
      color: #FFF;
    }
    p {
      margin: 0;
    }

    #header {
      background: red;
    }

    #content {
      position: relative;
      height: 100%;
      background: blue;
    }

    #content #positioned {
      position: absolute;
      top: 0;
      right: 0;
    }
  </style>
</head>

<body>
  <div id="header">
    Header
    <p>Header stuff</p>
  </div>

  <div id="content">
    Content
    <p>Content stuff</p>
    <div id="positioned">Positioned Content</div>
  </div>

</body>
</html>
5
ответ дан pascalhein 8 February 2019 в 17:39
поделиться

Если единственной проблемой является высота, просто использование отделений, кажется, работает:

<div id="header">header content</div>
<div id="content" style="height:100%">content content</div>

В простом тесте, ширина заголовка/содержания отличается в Вашем примере и является моей, но я не уверен из Вашего сообщения, если Вы обеспокоены шириной?

-5
ответ дан Bruce 8 February 2019 в 17:39
поделиться
<!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">
<head>
<title>Test</title>
<style type="text/css">
body
,html
{
    height: 100%;
    margin: 0;
    padding: 0;
    color: #FFF;
}

#header
{
    float: left;
    width: 100%;
    background: red;
}

#content
{
    height: 100%;
    overflow: auto;
    background: blue;
}

</style>
</head>
<body>

    <div id="content">
        <div id="header">
                Header
                <p>Header stuff</p>
        </div>
            Content
            <p>Content stuff</p>
    </div>

</body>
</html>

Во всех нормальных браузерах, можно поместить отделение "заголовка" перед содержанием как одноуровневый элемент, и тот же CSS будет работать. Однако IE7-не интерпретирует высоту правильно, если плавание составляет 100% в этом случае, таким образом, заголовок должен быть В содержании, как выше. Переполнение: автоматический вызовет двойные полосы прокрутки на IE (который всегда имеет видимую полосу прокрутки области просмотра, но отключенный), но без него, содержание отсечет, если это переполнится.

13
ответ дан Jerph 8 February 2019 в 17:39
поделиться

Действительно нет звука, перекрестный браузер способ сделать это в CSS. Принятие Вашего расположения имеет сложности, необходимо использовать JavaScript для установки высоты элемента. Сущность того, что необходимо сделать:

Element Height = Viewport height - element.offset.top - desired bottom margin

, Как только можно получить это значение и установить высоту элемента, необходимо присоединить обработчики событий и к окну onload и к onresize так, чтобы можно было запустить Ваш изменять размеры функции.

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

218
ответ дан Igor 8 February 2019 в 17:39
поделиться