Я хочу, чтобы заголовки моих страниц автоматически масштабировались, чтобы заполнить доступное пространство (по горизонтали)

Я создаю блог (через tumblr) и хочу, чтобы заголовки моих страниц автоматически масштабировались, чтобы заполнить доступное пространство по горизонтали, и, возможно, одновременно немного опустить содержимое.

(под масштабом я подразумеваю изменение размера шрифта и, возможно, межсловного интервала)

Заголовки страниц будут состоять из четырех слов, поэтому, вероятно, будет от 16 до 40 символов.

Я очень мало знаю об html, и я был бы чрезвычайно благодарен любому, кто мог бы мне помочь. Ваше здоровье!


person Rhys Mills    schedule 22.04.2011    source источник
comment
Сначала вам нужно найти идентификатор CSS или класс тега заголовка. какой адрес вашего блога?   -  person Faraz Kelhini    schedule 22.04.2011
comment
На самом деле это довольно сложная задача, какой бы простой она ни казалась. Я в полном тупике, я бы хотел посмотреть, что люди придумают.   -  person Wesley Murch    schedule 23.04.2011


Ответы (1)


Примечание: это не чистое решение html/css. Я не думаю, что это возможно сделать только с html и css, поэтому он интенсивно использует javascript. Также я использую jquery для этого, но его можно легко воспроизвести с любой из библиотек javascript. (Я использую библиотеку javascript в основном по двум причинам: 1-я — это кросс-браузерная совместимость, которую обеспечивают эти библиотеки, а также надежные ярлыки / служебные функции, а 2-я причина — это большое количество плагинов, которые есть в этих библиотеках. справляться с большинством ситуаций или приносить бесплатное удовольствие на веб-сайты)

Привет, я не нашел готового решения для этого, но это то, что мне всегда нравилось в разработке для iphone и чего мне не хватало в веб-разработке, поэтому я решил попробовать

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

Он вдохновлен этим вопросом, где они изобразите решение, основанное на цикле, в котором они увеличивают/уменьшают размер текста до тех пор, пока он не уместится. Но меня не устраивал цикл для изменения размера каждого текста, и я был уверен, что его можно вычислить напрямую, а не методом проб и ошибок!

Он также вдохновлен здесь для обработки изменения размера окна.

Теперь прекратите болтать, вот код:

<script type="text/javascript">
    var timer_is_on=0;
    jQuery.event.add(window, "load", loadFrame);
    jQuery.event.add(window, "resize", resizeFrame);

    function loadFrame() {
        $(".sc_container").each(function(){
            var $sc = $(this).children(".sc")
            $sc[0].orig_width=$sc.width();
            //console.log("saving width : "+$sc[0].orig_width+" for "+$sc[0])
        });

        resizeFrame() 
    }

    function resizeFrame() 
    {
        $(".sc_container").each(function(){
            var $sc = $(this).children(".sc")
            var wc = $(this).width();
            var scale = 0
            if (wc > $sc[0].orig_width) {
                scale = wc / $sc[0].orig_width; 
            } else {
                scale = - $sc[0].orig_width / wc;   
            }

            //console.log("applying scale : "+scale+" for "+$sc[0])
            $sc.css("font-size",scale+"em")

        });
    }

</script>
</head>
<body>
<div id="container">
    <div class="sc_container">
        <div class='sc'>SOME SUPER TITLE !</div>
    </div>
    <div class="sc_container">
        <div class='sc'>ANOTHER ONE !</div>
    </div>
    <div class="sc_container">
        <div class='sc'>AND A THIRD LOOOOOOOOOOOOOONG ONE :) !</div>
    </div>
    <div> And some normal content</div>
</div>

А вот тестовая страница

Это не очень надежно ... оно плохо работает, когда окно шириной менее 400 пикселей, и я тестировал его только на сафари, firefox, chrome на mac.

Небольшая сложность заключается в том, что я хотел, чтобы он работал с несколькими текстами, поэтому цикл $(".sc_container").each выполняется для всех объектов с классом css «.sc_container».

Последний трюк заключается в том, что я использую силу модуля css 'em': например, '3em' означает в 3 раза больше исходного размера текста, поэтому здесь я могу использовать это для масштабирования от исходного размера текста до желаемого размера текста. вот почему я сохраняю исходную ширину текста в самих объектах DOM: $sc[0].orig_width=$sc.width(); и повторно использую ее для вычислений позже при изменении размера, иначе она испортилась после многократного изменения размера.

Что вы, ребята, думаете об этом?

person dwarfy    schedule 24.04.2011
comment
Вы знаете, что это предложение JavaScript для вопроса с тегами «html» и «css»? (Это единственный способ сделать это, но лучше объяснить это до того, как вы начнете работать с JavaScript, также стоит объяснить, почему вы используете конкретную библиотеку, а не простой JavaScript...) NB: этот комментарий делает < b>не означает голосование против; просто (надеюсь) конструктивная критика. :) - person David says reinstate Monica; 24.04.2011
comment
Добавлю примечание в начале :) - person dwarfy; 24.04.2011
comment
Хорошая работа @dwarfy, приятно видеть, что кто-то принял вызов! Это было тяжело. Я уверен, что OP сейчас говорит, черт возьми, ха-ха, но все равно хорошая работа +1 :) - person Wesley Murch; 24.04.2011
comment
Спасибо, Madmartigan :) Могу я спросить вас, что означает ОП? Потому что я здесь новичок и не знаю, что это значит... - person dwarfy; 24.04.2011
comment
@dwarfy OP — общепринятый термин на форуме для оригинального постера. Кстати, я случайно заметил этот комментарий, пожалуйста, прочитайте здесь для совета ответа на комментарий. - person Wesley Murch; 26.04.2011