2016-05-23 2 views
0

Недавно я начал изучать код HTML и CSS, и у меня есть веб-приложение, содержащее некоторые элементы дизайна. Я не знаю, как закодировать или найти правильное направление о том, как его закодировать (я не могу ничего сопоставить с моими поисками, которые делают то, что я хочу).HTML/CSS Изменение привязки в соответствии с текстом. Длина

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

Я знаю, что CSS не может сделать это самостоятельно. Я считаю, что JQuery или Javascript могут справиться с этой задачей, но я не уверен, как это сделать или где начать точно.

// Мое понимание Javascript и JQuery немного ограничено. Таким образом, моим лучшим направлением было бы создание div, который соответствует длине строки из имени пользователя или функции, которая изменяет ширину привязки по отношению к строке username.length. Возможно, что-то такое:

$('anchor').ready(function() { var anchorWidth = $('username').text().length; }); 

Действительно ли это правильное направление? Или я в стороне от марки?

редактировать

>HTML code: 
</head> 
<body class="bodyHome"> 
    <div class="settingMenu"> 
     <div onclick="myFunction()"> 
      <img class="fork" src="/Users/liamfox/Documents/Projects/PHM/SRC/fork.png" alt="settings and menu"> 
     </div> 
     <div id="myDropdown" class="setting-content">   
      <ul class="ContentList"> 
       <li><a href="#"">log out</a></li> 
       <li><a href="#"">USERNAME</a> 
       <img style="width: 150px;" src="/Users/liamfox/Documents/Projects/PHM/SRC/line0.png"></li> 
      </ul> 
     </div> <!-- END .settingsMenu --> 
    </div> <!-- END .setting-content --> 

    <div class="foot-signUp"> 
     <div class="foot-login">  
      <div class="homeText" alt="username"> 
       <a style="text-decoration: none; color: white;" href="#">add ingredient</a> 
      </div> 
      <a> 
       <img class="barLine2" src="/Users/liamfox/Documents/Projects/PHM/SRC/line0.png"> 
      </a> 

      <!-- this script is to manipulate the width of the line anchor under the USERNAME to match the character length --> 
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.2/jquery.min.js"> 
      $('imgLength').ready(function() { 
       var matchLength = this.text().length; 
       if (matchLength = this.text.length) { 
        this.width(text.width); 
       } 
      }); 
      </script> 
</body> 

до сих пор мой сценарий выглядит, как это сейчас:

  $(document).ready(function() { 
       $('.js-dropdown').on('click', function() { 
        var $underline = $('.js-underline'); 
        var $userNameLength = $('.js-userNameLength'); 

        console.log($underline); 
        console.log($userNameLength); 

        $underline.css('width', $userNameLength.width()); 
       }); 
      }); 

Якорь IMG может быть граница, я понял. Изображение - это просто штриховая линия, которую я сделал, у которой есть градиентный цвет, который я выбрал.

+0

«Я вдали от знака» ... да, боюсь, по крайней мере, относительно того, как написан этот сценарий. Пожалуйста, предоставьте некоторые соответствующие html – charlietfl

+0

_ «Я знаю, что CSS не может сделать это самостоятельно». Можете ли вы включить 'html' в Question? – guest271314

+0

Я добавил свой код HTML, часть, о которой идет речь, -

  • USERNAME
  • - Я добавил все это на случай, если это необходимо:/Я надеюсь, что все в порядке. Спасибо –

    ответ

    1

    Вы можете использовать cssfont-size и DOM.previousElementSibling, .getComputedStyle(), .setAttribute(), javascriptparseInt(). Установить img шириной до 200px или 300px в случае длительного имени пользователя; комплект font-size из a элемент; установить imgwidth атрибут продукта .textContent.lengtha из элемента, умноженной на font-size из a элемента

    var img = document.querySelector(".username"); 
     
    var a = img.previousElementSibling; 
     
    var len = a.textContent.length; 
     
    var font = parseInt(window.getComputedStyle(a).getPropertyValue("font-size")); 
     
    img.setAttribute("width", len * font + "px");
    ul { 
     
        list-style:none; 
     
    } 
     
    
     
    a { 
     
        font-size: 16px; 
     
    }
    <ul> 
     
        <li><a href="#">USERNAME</a> <img class="username" src="http://lorempixel.com/200/200" alt="" /> 
     
        </li> 
     
    </ul>

    +0

    Спасибо. Вероятно, я посмотрю на это некоторое время, так как я понимаю, что все элементы. Я очень благодарен за то, что дал мне направление! –

    2

    Позволяет идти Css подход и применить фоновое изображение. Это потенциально очищает HTML, а

    .ContentList { 
     
        list-style: none; 
     
    } 
     
    .ContentList li { 
     
        padding: 5px; 
     
        0 
     
    } 
     
    .ContentList a { 
     
        text-decoration: none; 
     
        font-size: 16px; 
     
    } 
     
    .js-userNameLength { 
     
        background-image: url(http://lorempixel.com/80/10/); 
     
        background-repeat: no-repeat; 
     
        background-size: 100% 10px; 
     
        background-position: bottom; 
     
        padding: 10px 0; 
     
    }
    <ul class="ContentList"> 
     
        <li><a href="#">log out</a> 
     
        </li> 
     
        <li><a class="js-userNameLength" href="#">USERNAME</a> 
     
        </li> 
     
        <li><a class="js-userNameLength" href="#">Really long USERNAME</a> 
     
        </li> 
     
    
     
        <li><a href="#">change password</a> 
     
        </li> 
     
        <li><a href="#">my recipes</a> 
     
        </li> 
     
        <li><a href="#">terms of use</a> 
     
        </li> 
     
        <li><a href="#">need help/feedback</a> 
     
        </li> 
     
    </ul>

    Для этого примера я принявшей высоту 10px для линии изображения. Вам нужно будет отрегулировать значения в .js-userNameLength в соответствии с фактической высотой изображения. padding используется для создания пространства для изображения, а также при необходимости отрегулируйте его.

    Вы можете также пойти изображения бесплатный подход с CSS Градиенты:

    .ContentList { 
     
        list-style: none; 
     
    } 
     
    .ContentList li { 
     
        padding: 5px; 
     
        0 
     
    } 
     
    .ContentList a { 
     
        text-decoration: none; 
     
        font-size: 16px; 
     
    } 
     
    .js-userNameLength { 
     
        padding: 5px 0; 
     
        /* Permalink - use to edit and share this gradient: http://colorzilla.com/gradient-editor/#1e5799+85,2989d8+93,207cca+94,207cca+94,7db9e8+100&0+0,0+83,1+85,1+100;border-bottom */ 
     
        /* IE9 SVG, needs conditional override of 'filter' to 'none' */ 
     
        background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzFlNTc5OSIgc3RvcC1vcGFjaXR5PSIwIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjgzJSIgc3RvcC1jb2xvcj0iIzFlNTc5OSIgc3RvcC1vcGFjaXR5PSIwIi8+CiAgICA8c3RvcCBvZmZzZXQ9Ijg1JSIgc3RvcC1jb2xvcj0iIzFlNTc5OSIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjkzJSIgc3RvcC1jb2xvcj0iIzI5ODlkOCIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9Ijk0JSIgc3RvcC1jb2xvcj0iIzIwN2NjYSIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiM3ZGI5ZTgiIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+); 
     
        background: -moz-linear-gradient(top, rgba(30, 87, 153, 0) 0%, rgba(30, 87, 153, 0) 83%, rgba(30, 87, 153, 1) 85%, rgba(41, 137, 216, 1) 93%, rgba(32, 124, 202, 1) 94%, rgba(125, 185, 232, 1) 100%); 
     
        /* FF3.6-15 */ 
     
        background: -webkit-linear-gradient(top, rgba(30, 87, 153, 0) 0%, rgba(30, 87, 153, 0) 83%, rgba(30, 87, 153, 1) 85%, rgba(41, 137, 216, 1) 93%, rgba(32, 124, 202, 1) 94%, rgba(125, 185, 232, 1) 100%); 
     
        /* Chrome10-25,Safari5.1-6 */ 
     
        background: linear-gradient(to bottom, rgba(30, 87, 153, 0) 0%, rgba(30, 87, 153, 0) 83%, rgba(30, 87, 153, 1) 85%, rgba(41, 137, 216, 1) 93%, rgba(32, 124, 202, 1) 94%, rgba(125, 185, 232, 1) 100%); 
     
        /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */ 
     
        filter: progid: DXImageTransform.Microsoft.gradient(startColorstr='#001e5799', endColorstr='#7db9e8', GradientType=0); 
     
        /* IE6-8 */ 
     
    }
    <ul class="ContentList"> 
     
        <li><a href="#">log out</a> 
     
        </li> 
     
        <li><a class="js-userNameLength" href="#">USERNAME</a> 
     
        </li> 
     
        <li><a class="js-userNameLength" href="#">Really long USERNAME</a> 
     
        </li> 
     
    
     
        <li><a href="#">change password</a> 
     
        </li> 
     
        <li><a href="#">my recipes</a> 
     
        </li> 
     
        <li><a href="#">terms of use</a> 
     
        </li> 
     
        <li><a href="#">need help/feedback</a> 
     
        </li> 
     
    </ul>

    CSS Градиенты может быть немного страшно.Я использовал этот замечательный инструмент для создания этого: http://www.colorzilla.com/gradient-editor/#1e5799+85,2989d8+93,207cca+94,207cca+94,7db9e8+100&0+0,0+83

    +0

    Вау, это прекрасно! Я не думал, что CSS способен на такой эффект. Я думаю, что это именно то, что я хотел сделать. Добавленная colourzilla - спасатель! Спасибо. –

    +0

    Рад помочь. Вот добавленный бонус .... Градиенты границы: https://css-tricks.com/examples/GradientBorder/ –

    Смежные вопросы