Почему полосы прокрутки появляются при использовании элемента SVG внутри DIV? - PullRequest
3 голосов
/ 09 января 2011

Моя цель - получить <div> с фиксированным размером (динамически устанавливаемым через JavaScript), который содержит только элемент <svg>. Когда это <svg> больше, чем родительские полосы прокрутки <div> должны появиться. Когда он меньше, его размер должен быть равен размеру родительского <div> - но полосы прокрутки не должны появляться.

Это не работает, как ожидалось, так как немного кода может показать:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
    <script type="text/javascript" src="lib/jquery-1.4.4.js"></script>
    <script type="text/javascript" src="lib/jquery-ui-1.8.7.custom.min.js"></script>
    <script type="text/javascript" src="lib/jquery.svg.js"></script>
    <script type="text/javascript">
      $(document).ready(function() {
        $('#editor').svg();
      });
    </script>
  </head>
  <body>
    <div id="editor" style="width:500px;height:500px;overflow:auto"></div>
  </body>
</html>

Это создаст почти пустую страницу, содержащую <div> с фиксированным размером 500x500px - и <svg width="500" height="500"> внутри. У этого SVG есть полосы прокрутки - хотя они не нужны, поскольку размер будет идеально подходить.

То, что это произойдет только с <svg>, можно легко показать, когда демо-версия изменена на

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
    <script type="text/javascript" src="lib/jquery-1.4.4.js"></script>
    <script type="text/javascript" src="lib/jquery-ui-1.8.7.custom.min.js"></script>
    <script type="text/javascript" src="lib/jquery.svg.js"></script>
  </head>
  <body>    
    <div style="width:500px;height:500px;overflow:auto"><div style="width:500px;height:500px"></div></div>
  </body>
</html>

Так что теперь <div> находится внутри родительского элемента <div> точно такого же размера - и появляются полосы прокрутки.

Может кто-то просветить меня, почему <div> и <svg> ведут себя по-разному?

И как я могу встроить SVG в родительский элемент <div> без появления полос прокрутки, когда размер одинаков (и с появлением, когда размер становится больше?)

Примечание: это проверено с Firefox и Chromium.

1 Ответ

7 голосов
/ 10 января 2011

Разница в том, что div по умолчанию display: block;, а svg - display: inline;, поэтому вы столкнулись с проблемой выравнивания базовой линии текста, которая не возникает с div. Любое из следующего должно удалить полосы прокрутки, если добавлено в ваш CSS:

svg { display:block; }

Или,

svg { vertical-align: top; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...